3

Estoy haciendo un formulario en el cual ya puede guardar perfectamente en la base de datos mysqli, y ya obtengo los datos en un html. Ahora lo que quiero es borrar mediante un botón.

La cosa es que borra, pero siempre el último registro, y no el cual yo selecciono de la lista independientemente. Si selecciono el primero o el segundo, siempre me borra el último, y quiero ver qué esta mal.

Aquí les dejo el código de donde obtengo la lista, y también tiene el botón de borrar.

<?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);
                 ?>

Aquí el archivo que realiza el procedimiento de borrado.

<?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...
}


?>

Ya la columna id existe en la base de datos. Por si se preguntan por qué no la muestro, es que no es necesario.

Yunier Garcia
  • 35
  • 1
  • 4
  • 1
    Lee sobre [inyección SQL](http://es.stackoverflow.com/q/10518/250) y [cómo evitarla en PHP](http://es.stackoverflow.com/q/18232/250) con MySQLi. Este código es vulnerable a ataques de inyección SQL y no debería usarse en un entorno de producción de cara al público. – Alvaro Montoro Oct 25 '16 at 22:19
  • gracias por el comentario debo leer sobre eso – Yunier Garcia Oct 26 '16 at 14:31

2 Answers2

2

Esto se debe a que todos los input en los que guardas el id tienen el mismo name.

Te recomiendo que les pongas un nombre dinámico (por ejemplo con el número del id o de iteraciones del bucle):

<input name="id' . $extraido['id']. '" type="hidden" value="' . $extraido['id'].'"/>

Por lo que quedaría así:

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>';

Al tener todos los input el mismo name cuando haces $id = $_REQUEST['id']; solo obtienes el último valor porque este sobreescribe todos los anteriores.

Francisco Romero
  • 16,194
  • 5
  • 30
  • 61
0

Estimado, tienes que cerrar el formulario:

    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>';
    }
Carlos AC
  • 81
  • 3
  • si ya esta cerrado mas abajo solo que ese codigo no lo muestro aqui – Yunier Garcia Oct 26 '16 at 14:31
  • Tienes que cerrarlo dentro del tag td, tal como aparece en el código que puse y ahi va a funcionar, rescatando el id desde el array $_REQUEST['id']. – Carlos AC Oct 26 '16 at 14:46
  • Gracias al final me sirvio tu ayuda era lo que mencionabas no me habia percatado tenia una form contenida dentro de otra pero solo había un – Yunier Garcia Oct 26 '16 at 14:55