Удалить и обновить операторы, не работающие с несколькими флажками - PullRequest
1 голос
/ 24 января 2012

Коротко:

На основе запроса у меня есть несколько флажков, генерируемых динамически. Значением каждого флажка является строка из одной из строк запроса;

при отправке формы запускается другой скрипт (del.php). Этот скрипт получает массив флажков, которые были проверены, и проходит по ним, чтобы он мог выполнить еще два запроса, а именно запросы на удаление и обновление.

Они не работают! если я попробую запрос INSERT, он работает нормально. Но УДАЛИТЬ И ОБНОВИТЬ не.

Вот мой код:

index.php:

<?php
$gettips = mysql_query('SELECT body FROM tips WHERE body!="" and approved!="yes" and approved!="no"')or die(mysql_error());
$i=0;
while($tips = mysql_fetch_array($gettips))
{ ?>
<input type="checkbox" name="checkboxes[]" value="<?php print $tips[0] ?>" />
<input type="checkbox" name="checkboxesno[]" value="<?php print $tips[0] ?>" />
<a class="names"> - <span><?php print $tips[0] ?></span></a><br />
<?  $i++;
}
?>

и del.php:

foreach($_POST['checkboxes'] as $check) {
mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");      
}
foreach($_POST['checkboxesno'] as $key) {
mysql_query("DELETE FROM tips WHERE body='$key' ")or die(mysql_error());
}

mysql_error() не выдает никаких ошибок. Подключение к базе данных работает в обоих файлах. Значения флажков являются строками. Я могу удалить запись, добавив в запрос саму строку, а не POST $variable. (Я также заметил, что не могу удалить старые записи, только недавно добавленные).

UPDATE:

Я понял, что пытаться удалять записи, где row='string', не было лучшей практикой, по крайней мере, в моем случае. Поэтому вместо того, чтобы передавать строки в качестве значений в флажки в форме, я решил указать значение идентификатора таблицы.

вот новый код:

<?php
$gettips = mysql_query('SELECT id,body FROM tips WHERE body!="" and approved!="yes" and approved!="no"')or die(mysql_error());
$i=0;
while($tips = mysql_fetch_array($gettips))
{ ?>
<input type="checkbox" name="checkboxes[]" value="<?php print $tips[0] ?>" />
<input type="checkbox" name="checkboxesno[]" value="<?php print $tips[0] ?>" />
<a class="names"> - <span><?php print $tips[1] ?></span></a><br />
<?  $i++;
}
?>

и запросы на удаление:

foreach($_POST['checkboxes'] as $check) {
// echo "INSERT INTO approved (body) VALUES ('$check') <br>";
// echo "UPDATE tips SET approved='yes' WHERE body='$check'<br>";
mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");      
}

foreach($_POST['checkboxesno'] as $key) {
// echo "DELETE FROM tips WHERE id=$key <br>";
mysql_query("UPDATE tips SET approved='no' WHERE id=$key");      
mysql_query("DELETE FROM tips WHERE id=$key ")or die(mysql_error());
}

Я до сих пор не знаю, почему другой способ не сработал, поэтому, если у кого-то есть шанс объяснить, это было бы здорово!

Ответы [ 2 ]

1 голос
/ 24 января 2012

Если вы добавите несколько выражений echo в свои forloops и закомментируете запросы, вы сможете увидеть, что именно отправляется в mysql, и тогда вы сможете лучше решить вашу проблему.

foreach($_POST['checkboxes'] as $check) {
  echo "INSERT INTO approved (body) VALUES ('$check') <br>";
  echo "UPDATE tips SET approved='yes' WHERE body='$check'<br>";
  //mysql_query("INSERT INTO approved (body) VALUES ('$check') ");
  //mysql_query("UPDATE tips SET approved='yes' WHERE body='$check'");      
}

foreach($_POST['checkboxesno'] as $key) {
  echo "DELETE FROM tips WHERE body='$key' <br>";
  //mysql_query("DELETE FROM tips WHERE body='$key' ")or die(mysql_error());
}
0 голосов
/ 24 января 2012

Попробуйте защитить себя от SQL-инъекций: http://php.net/manual/en/security.database.sql-injection.php, не могли бы вы вывести точный сгенерированный запрос SQL, возможно, из-за того, что строка SQL не экранирована.

Попробуйте экранировать ее с помощью mysql_real_escape_string ();

...