Проблема при удалении с помощью php в базе данных mysqli
я делаю форму, в которой вы уже можете отлично сохранить в базе данных mysqli, и я уже получаю данные в html. Теперь я хочу удалить с помощью кнопки.
Дело в том, что он очищает, но всегда последнюю запись, а не ту, которую я выбираю из списка независимо. Если я выбираю первый или второй, он всегда очищает последний, и я хочу посмотреть, что не так.
Здесь я оставляю вам код, из которого я получаю список, а также имеет кнопку удаления.
<?php
$consultabla = mysqli_query($conexion, "SELECT * from 001_agendacentral") or die("Error al leer Agenda");
while ($extraido = mysqli_fetch_assoc($consultabla)) {
echo '<tr>
<td>'.$extraido['nombre'].'</td>
<td>'.$extraido['departamento'].'</td>
<td>'.$extraido['puesto'].'</td>
<td>'.$extraido['correo'].'</td>
<td>'.$extraido['telefono'].'</td>
<td>
<form action="admdelete.php?id='.$extraido['id'].'" method="POST">
<input name="id" type="hidden" value="' . $extraido['id'].'"/>
<input type="submit" class="btn btn-warning" value="Borrar"/></td>
</tr>';
}
mysqli_close($conexion);
?>
здесь файл, который выполняет процедуру удаления.
<?php
require_once('../connect.php');
$conexion = mysqli_connect($host,$user,$pass,$db) or die ("Error al conectar");
$conexion->set_charset("utf8");
$id = $_REQUEST['id'];
echo $id;
//Borrado de tabla con el Campo Nombre
$borrar = "DELETE from 001_agendacentral where nombre='$id'" or die("Error al Borrar");
$resultado = mysqli_query($conexion, $borrar) or die ("Error al Borrar");
if ($resultado) {
mysqli_close($conexion);
echo "Borrado Correctamente";
# code...
}
?>
уже столбец id существует в базе данных. Если вам интересно, почему я не показываю его, это не обязательно.
2 answers
Уважаемый, вы должны закрыть форму:
while ($extraido = mysqli_fetch_assoc($consultabla)) {
echo '<tr>
<td>'.$extraido['nombre'].'</td>
<td>'.$extraido['departamento'].'</td>
<td>'.$extraido['puesto'].'</td>
<td>'.$extraido['correo'].'</td>
<td>'.$extraido['telefono'].'</td>
<td>
<form action="admdelete.php?id='.$extraido['id'].'" method="POST">
<input name="id" type="hidden" value="' . $extraido['id'].'"/>
<input type="submit" class="btn btn-warning" value="Borrar"/>
</form>
</td>
</tr>';
}
Это связано с тем, что все input
, в которых вы сохраняете идентификатор, имеют одинаковый name
.
Я рекомендую вам дать им динамическое имя (например, с номером идентификатора или итераций цикла):
<input name="id' . $extraido['id']. '" type="hidden" value="' . $extraido['id'].'"/>
Так что это будет выглядеть так:
echo '<tr>
<td>'.$extraido['nombre'].'</td>
<td>'.$extraido['departamento'].'</td>
<td>'.$extraido['puesto'].'</td>
<td>'.$extraido['correo'].'</td>
<td>'.$extraido['telefono'].'</td>
<td>
<form action="admdelete.php?id='.$extraido['id'].'" method="POST">
<input name="id' . $extraido['id']. '" type="hidden" value="' . $extraido['id'].'"/>
<input type="submit" class="btn btn-warning" value="Borrar"/></td>
</tr>';
Имея все input
одинаковые name
Когда вы делаете $id = $_REQUEST['id'];
, Вы получаете только последнее значение, потому что это перезаписывает все предыдущие.