#php #mysql #html
#php #mysql #HTML
Вопрос:
У меня есть таблица, в которой отображается информация из таблицы mysql, и в последнем столбце у меня есть такой флажок :
<form method="POST" action="php/delete.php">
<thead>
<tr
<th>Nom</th>
<th>Espéce</th>
<th>Cri</th>
<th>Propiétaire</th>
<th>Age (années)</th>
<th><input type="submit" name="supprimer" value="Supprimer" /></th>
</tr>
</thead>
<tbody>
<?php
$connexion = mysql_connect($hote, $login, $mdp);
mysql_select_db($bd, $connexion);
$req = "Select * from animaux;";
$resultat = mysql_query($req, $connexion);
while (list($id, $nom, $esp, $cri, $prop, $age) = mysql_fetch_row($resultat)) {
?>
<tr>
<td><?= $nom ?> </td>
<td><?= $esp ?></td>
<td><?= $cri ?></td>
<td><?= $prop ?></td>
<td><?= $age ?></td>
<td> <input type="checkbox" name="choix[]" value=<?= $id ?>></td>
</tr>
<?php } ?>
</form>
Я использую следующий скрипт для удаления строк :
include("../BD/bd_params.inc.php");
$connexion = mysql_connect($hote,$login,$mdp);
mysql_select_db($bd, $connexion);
$del = $_POST['choix'];
foreach ($del as $val) {
$req = "delete from `animaux` where id = '$val'";
$resultat = mysql_query($req,$connexion);
if (!resultat) {
die('Requête invalide : ' . mysql_error());
break;
}
}
Однако, когда я отправляю форму, ничего не происходит, ничего не отображается и ничего не удаляется. Кто-нибудь знает, что может быть причиной того, что мой скрипт не работает?
(о, и извините за мой английский …)
Комментарии:
1. Для меня это выглядит правильно. Попробуйте включить ошибки и посмотреть, получите ли вы какую-либо информацию.
2. в верхней части вашего скрипта добавьте
error_reporting(E_ALL);
иini_set('display_errors', 'on');
3. он ничего не печатает… Однако теперь я могу удалять только элемент за раз, даже если выбрано несколько. И когда я добавляю
var_dump($_POST);
, когда я устанавливаю несколько флажков, это показывает :array(2) { ["supprimer"]=> string(9) "Supprimer" ["choix"]=> array(1) { [0]=> string(1) "6" } }
. Итак, по-видимому, массив ‘choir’ не работает должным образом…4. Хорошо, по-видимому, это работает только с первым установленным флажком. Кроме того, в массиве единственным значением является строка, поэтому я должен привести ее перед выполнением любого sql-запроса. Есть идеи, как получить все значения в массиве POST?
5. если вы сделаете a
print_r($_POST)
, что вы увидите?
Ответ №1:
if (!resultat) {
должно быть
if (!$resultat) {
^--missing $
Вызов ‘break’ является излишним. die() убьет скрипт, поэтому разрыв будет невозможен.
Вы проверили, что на сервер что-то отправляется. Что var_dump($_POST)
показывает?
Комментарии:
1.
var_dump($_POST);
Шоуarray(2) { ["supprimer"]=> string(9) "Supprimer" ["choix"]=> array(1) { [0]=> string(1) "1" } }
. Я думаю, мне нужно преобразовать строки в целые числа?2. ОК. Итак, отправляется флажок. Итак… Добавьте некоторые выходные данные отладки:
var_dump($req); var_dump($resultat)
, etc … и посмотрите, что получится.3.
var_dump($req)
:string(36) "delete from animaux where id = '1'"
var_dump($resultat)` :bool(true)
4. В соответствии с этим операция с БД сработала. Вам нужно будет проверить, почему на самом деле ничего не удаляется.
5. Сейчас это работает, но только если
id
< 5 и если установлен только один флажок.
Ответ №2:
Я создал новую версию вашего pastebin здесь:
По сути, вы хотите открыть форму перед запуском цикла и закрыть форму после завершения цикла.
Я удалил форму hidden ( class="invisible"
) (вы не можете иметь форму внутри формы) из цикла. Я не уверен, что вам там нужно, но это не будет работать внутри другой формы.
Комментарии:
1. Спасибо, это работает! (скрытое
class="invisible"
на самом деле появляется при<th>nom</th>
нажатии. это заставляет исчезнуть первую форму и появиться эту благодаря javascript.)2. О, хорошо. Я бы сказал, чтобы создать эту форму после цикла, а затем манипулировать ею с помощью javascript, чтобы показать ее там, где она вам нужна, с правильными идентификаторами и т.д. когда вы нажимаете на этот th. Таким образом, у вас не будет нескольких форм, только одна, которую вы можете изменить в зависимости от того, что было нажато.
3. Вы имеете в виду использование функции javascript, в которой указан идентификатор нажатого элемента, и благодаря этому отображаются соответствующие значения в другой форме?