#php #mysql #ajax #validation
#php #mysql #ajax #проверка
Вопрос:
Я нашел хороший плагин jQuery. Он отправляет данные на php-сервер в виде 1202,39,2393,29,1,39
Я хочу получить эти данные из post, я знаю, как это сделать.
Моя идея состоит в том, чтобы поместить 1202,39,2393,29,1,39
в строку. затем каким-то образом выполнить цикл по ней.
Итак, я бы вставил $string = '1202,39,2393,29,1,39';
Результат был бы примерно таким
1202<br>
39<br>
2393<br>
29<br>
1<br>
39<br>
Для каждого идентификатора в цикле я бы проверил, является ли это допустимым идентификатором. Я знаю, как проверить в MySQL, существует ли что-то. Часть, в которой я не уверен, — это получение каждого идентификатора в цикле из строки, а затем выполнение чего-либо с ним. Это кажется трудным для объяснения, надеюсь, я ясно выразился.
Комментарии:
1. Вы можете просто использовать функцию разнесения: php.net/manual/en/function.explode.php чтобы разделить ее на
,
2. Добавлен
mysql
тег, потому что это важный фактор в этом вопросе.
Ответ №1:
Вам не следует запускать SQL-запросы в цикле, поэтому я бы сказал, что вам вообще не следует explode()
этого делать (что предлагали другие). Это очень плохая практика, потому что если у вас есть 20 идентификаторов, это будет означать 20 вызовов базы данных, что очень, очень неэффективно. Вызовы базы данных должны быть по возможности сведены к минимуму, поскольку они дороги.
Я бы запустил запрос, который возвращает те идентификаторы, которые есть в базе данных.
Ваш запрос будет выглядеть примерно так
select id from table where id in (YOUR_STRING_ESCAPED)
Обязательно экранируйте свой $string
first, например, с помощью mysql_real_escape_string()
.
Идентификаторы, которые возвращаются из вашего запроса, — это те, которые можно безопасно вывести.
Комментарии:
1. выберите id из учетных записей, где id в 2,8,9,10 дает #1064 — У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘2,8,9,10 LIMIT 0, 30’ в строке 1
2. @Keverw Обратите внимание на
()
вокруг строки.3. Ох. Я думал, вы просто вставили это, чтобы показать переменную. Спасибо! Мое приложение будет использовать как этот метод, так и метод цикла. Один из них предназначен для проверки при сохранении на черновик, другой будет использоваться для вставки в почтовый ящик каждого пользователя.
4. @Keverw Если
insert in to each users mailbox
вы имеете в виду вызовы SQLINSERT
, вам также не следует вызывать их из цикла.INSERT
поддерживает вставку нескольких записей одним вызовом.
Ответ №2:
Чтобы разбить строку на отдельные части, используйте explode:
$string = '1202,39,2393,29,1,39';
$list = explode(",", $string);
Затем вы могли бы делать с массивом все, что захотите, например
foreach ($list as $item)
{
print $item."<br>";
}
Ответ №3:
Используйте explode()
first для создания массива:
$string = '1202,39,2393,29,1,39';
$array= explode(",", $string);
Затем используйте foreach
цикл для выполнения ваших проверок:
foreach ($array as amp;$value) {
if($value == etc.....//perform your checks here.
}
Комментарии:
1. Это проблема с вопросами по софтболу. Я новичок в SO и разрываюсь между ответами на множество простых вопросов или на несколько сложных. Несколько часов назад я написал подробный ответ на проблему, и вопрос был удален менее чем за минуту до того, как я опубликовал.
*sob*
2. Это просто кажется вопросом софтбола… Мне было интересно, что все предлагают запускать SQL-запросы в цикле.
Ответ №4:
$string = '1202,39,2393,29,1,39';
$array = explode(',', $string);
for($i=0;$i<count($array);$i ) {
$sql = "CHECK FOR VALID ID WHERE id=" . $array[$i];
}
Это должно заставить вас проверять все эти идентификаторы с помощью sql по отдельности.
Ответ №5:
Предполагая, что вы используете PHP:
$string = '1202,39,2393,29,1,39';
$data = explode(",", $string);
echo "<pre>"; print_r($data); echo "</pre>"
// Outputs:
// Array
// (
// [0] => 1202
// [1] => 39
// [2] => 2393
// [3] => 29
// [4] => 1
// [5] => 39
// )
// Then you can iterate through the array
foreach ($data AS $value) {
// Validate the $value
}