Pregunta:
Fecha: 09-10-2015 16:41:26
(En Español)
Lo hice en 2 paginas
1ra pagina, la consulta donde paso la informacion por GET (En realidad la voy a hacer por POST, pero para ver como van pasando las variables por la URL y controlar, la hice GET)
2da la pagina donde se ejecuta el update o el delete.
Mas abajo dejo ambos script.
LA PREGUNTA
Veo que pasan algunas variables correctamente y despues pasa cualquier cosa, independientemente tambien un error que me aroja en linea 6 pagina 556.php
Notice: Undefined index: seleccion in C:\wamp\www\afip\556.php on line 6
Warning: Invalid argument supplied for foreach() in C:\wamp\www\afip\556.php on line 6
PAGINA NOMBRE: 555.php
PAGINA NOMBRE: 556.php
Estas son las variables que pasan por la URL incluido los errores
Si ven el error, escucho sus comentarios
Un saludo
Daniel Votos: 1 - Respuestas: 11 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
MODIFICAR y ELIMINAR (update - delete)[Resuelta]
Estoy armando este Script php con el cual pretendo, modificar o eliminar varios registros, partiendo de una consulta.Lo hice en 2 paginas
1ra pagina, la consulta donde paso la informacion por GET (En realidad la voy a hacer por POST, pero para ver como van pasando las variables por la URL y controlar, la hice GET)
2da la pagina donde se ejecuta el update o el delete.
Mas abajo dejo ambos script.
LA PREGUNTA
Veo que pasan algunas variables correctamente y despues pasa cualquier cosa, independientemente tambien un error que me aroja en linea 6 pagina 556.php
Notice: Undefined index: seleccion in C:\wamp\www\afip\556.php on line 6
Warning: Invalid argument supplied for foreach() in C:\wamp\www\afip\556.php on line 6
PAGINA NOMBRE: 555.php
<!DOCTYPE html>
<html>
<head>
<title>VARIOS</title>
<link rel="stylesheet" href="">
</head>
<body>
<?php
require('funciones/conexion.php');
/**
* CONSULTA
* */
$sql = "SELECT id, apellido, nombre, ano, mes
FROM cale";
$resultado = $mysqli->query($sql);
?>
<form name='ejecuta' method='GET' action='556.php'>
<table>
<tr>
<td>Id</td>
<td>Apellido</td>
<td>Nombre</td>
<td>Ano</td>
<td>Mes</td>
<td>Modificar</td>
<td>Eliminar</td>
</tr>
<?php
$i = 0 ;
while ($row = mysqli_fetch_row($resultado)){
?>
<tbody>
<tr>
<td><input type='hidden' name="<?php echo 'id'[$i] ;?>" value="<?php echo $row[0] ;?>" /><?php echo $row[0] ;?></td>
<td><input type='text' name="<?php echo 'apellido'[$i] ;?>" value="<?php echo $row[1] ;?>" /></td>
<td><input type='text' name="<?php echo 'nombre'[$i] ;?>" value="<?php echo $row[2] ;?>" /></td>
<td><input type='text' name="<?php echo 'ano'[$i] ;?>" value="<?php echo $row[3] ;?>" /></td>
<td><input type='text' name="<?php echo 'mes'[$i] ;?>" value="<?php echo $row[4] ;?>" /></td>
<td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="<?php echo 'modifica'.$row[0].'';?>"/></td><!-- Esta línea es para saber si se modifica -->
<td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="<?php echo 'elimina'.$row[0].'';?>" /></td><!-- Esta línea es para saber si se elimina -->
</tr>
</tbody>
<?php
$i++;
}
?>
</table><input type='submit' value='Enviar'>
</form>
</body>
</html>
PAGINA NOMBRE: 556.php
<?php
require('funciones/conexion.php');
/********************************************
iniciamos el ciclo con el que obtendremos lo que envio el formulario
**************************************************************/
foreach ($_GET['seleccion'] as $indice => $valor){
//Vamos a verificar si trae la opcion de eliminar o modificar
$opcion = substr($_GET['seleccion'][$indice],0,-1); //extraemos la parte de la cadena que elimina y/o modifica
echo $opcion;
switch($opcion){
//generamos la sentencia para la modificación filtrando por el id para que solo cambie ese registro
case 'modifica':$sql="UPDATE cale SET
apellido='".$_POST['apellido'][$indice]."',
nombrea=".$_POST['nombrea'][$indice].",
ano=".$_POST['ano'][$indice].",
mes=".$_POST['mes'][$indice]."
WHERE id=".$_POST['id'][$indice];
break;
case 'elimina':$sql="DELETE FROM cale WHERE id=".$_POST['id'][$indice];break;
default: echo "<center>NO HAY NADA SELECCIONADO</center>"; break;
}
echo "Variable sql: ".$sql;
$resultado = $mysqli->query($sql);
if (Empty($resultado)){
echo "Error: " . $resultado . "<br>" . mysqli_error($mysqli);
}else{
echo "<center>FELICIDADES SENTENCIA EJECUTADA CORRECTAMENTE</center><br />
<a href='555.php'>Volver al panel</a>";
}
}
?>
Estas son las variables que pasan por la URL incluido los errores
http://localhost/afip/556.php ?i=1 &a=Garcia &n=Juan &a=2015 &m=10 &s=modifica1 &d=3 &p=Gonzalez &o=Luis &n=2015 &e=10 &e=modifica3 &%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+2+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E39%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=4&e=Lopez&m=Pedro&o=2015&s=10&l=modifica4&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+3+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E39%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=140&l=Ramirez+&b=Pedro+Pascual&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+3+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E42%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+3+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E43%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+4+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E39%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=139&l=Perez+Jos%C3%A9&r=Juan+Jose&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+4+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E42%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+4+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E43%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0&c=modifica139&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+5+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E39%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=138&i=Gonzalez&e=Ramon+Eusebio&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+5+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E42%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0&%3Cbr+%2F%3E%0D%0A%3Cb%3ENotice%3C%2Fb%3E%3A++Uninitialized+string+offset%3A+5+in+%3Cb%3EC%3A\wamp\www\afip\555.php%3C%2Fb%3E+on+line+%3Cb%3E43%3C%2Fb%3E%3Cbr+%2F%3E%0D%0A=0
Si ven el error, escucho sus comentarios
Un saludo
Daniel Votos: 1 - Respuestas: 11 - Vistas: 13 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 09-10-2015 19:22:08 Bueno gente
Le encontre la vuelta a esto, solo que use un poco de JS, cosa que no me gusta, pero no me quedo otra.
Dejo aqui mi script para otro que tal vez lo necesite como yo.
Como en el caso anterioir lo hice en 3 paginas. (Consulta - Modificar - Eliminar)
PAGINA NOMBRE: 777.php (CONSULTA)
<?php require('funciones/conexion.php'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href='' rel='shortcut icon' type='image/png'> <title>XX</title> <script type="text/javascript" id="id" name="id" > function setUpdateAction() { document.checkbox.action = "778.php"; document.checkbox.submit(); } function setDeleteAction() { if(confirm("Desea eliminar registro?")) { document.checkbox.action = "779.php"; document.checkbox.submit(); } } </script> </head> <body> <?php $sql = "SELECT id, apellido, nombre, ano, mes FROM cale "; $resultado = $mysqli->query($sql); ?> <Table> <thead> <tr> <td>ID</td> <td>Apellido</td> <td>Nombre</td> <td>Año</td> <td>Mes</td> </tr> </thead> </table> <form name="checkbox" method="post" action=""> <Table> <?php $i=0; while ($row = mysqli_fetch_array($resultado)){ ?> <tbody> <tr> <td><?php echo $row["id"] ;?></td> <td><?php echo $row['apellido'] ;?></td> <td><?php echo $row['nombre'] ;?></td> <td><?php echo $row['ano'] ;?></td> <td><?php echo $row['mes'] ;?></td> <td><input name="id[]" type="checkbox" id="id" value="<?php echo $row['id']; ?>" /></td> </tr> </tbody> <?php $i++; } ?> </table> <hr> <input type="button" class="button" name="update" value="Modificar" onClick="setUpdateAction();" /> <input type="button" class="button" name="delete" value="Eliminar" onClick="setDeleteAction();" /> </form> </body> </html>
PAGINA NOMBRE: 778.php (MODIFICAR)
<?php require('funciones/conexion.php'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href='' rel='shortcut icon' type='image/png'> <title>ss</title> </head> <body> <form name="" method="post" action=""> <Table> <thead> <tr> <td>ID</td> <td>Apellido</td> <td>Nombre</td> <td>Año</td> <td>Mes</td> </tr> </thead> </table> <Table> <?php if(isset($_POST["submit"]) && $_POST["submit"]!="") { $idCount = count($_POST["id"]); for($i=0;$i<$idCount;$i++) { $mysqli->query("UPDATE cale set id ='" .$_POST["id"][$i] . "', apellido ='" .$_POST["apellido"][$i] . "', nombre ='" .$_POST["nombre"][$i] . "', ano ='" .$_POST["ano"][$i] . "', mes ='" .$_POST["mes"][$i] . "' WHERE id ='" .$_POST["id"][$i] . "'"); } header('Location: 777.php'); } $rowCount = count($_POST["id"]); if(isset($rowCount) && ($rowCount =="")){ header('Location: 777.php'); }else{ for($i=0;$i<$rowCount;$i++) { $resultado = $mysqli->query("SELECT * FROM cale WHERE id='". $_POST["id"][$i]."'"); $row[$i]= mysqli_fetch_array($resultado) ?> <tbody> <tr> <td><input type="hidden" name="id[]" value="<?php echo $row[$i]['id'] ;?>"/></td> <td><input type="text" name="apellido[]" value="<?php echo $row[$i]['apellido'] ;?>"/></td> <td><input type="text" name="nombre[]" value="<?php echo $row[$i]['nombre'] ;?>"/></td> <td><input type="text" name="ano[]" value="<?php echo $row[$i]['ano'] ;?>"/></td> <td><input type="text" name="mes[]" value="<?php echo $row[$i]['mes'] ;?>"/></td> </tr> </tbody> <?php } } ?> </table> <hr> <input type="submit" name="submit" value="Editar" class="button"> </form> </body> <html>
PAGINA NOMBRE: 779.php (ELIMINAR)
<?php require('funciones/conexion.php'); ?> <?php $rowCount = count($_POST["id"]); if(isset($rowCount) && ($rowCount =="")) { echo "<div> <a><br> Error <br> Tilde (<img src='../img/vb.jpg' >) al menos un registro</a> <form action='777.php' method='POST' name='volver' > <div><br><br> <input cursor:pointer;' type='submit' id='' name='' value='Volver' > </div> </form> </div>"; } else { echo "<div> <a><br> Ud., a eliminado<br> ( $rowCount ) registros </a> <form action='777.php' method='POST' name='volver' > <div id='div_boton_login'><br><br> <input cursor:pointer;' type='submit' id='' name='' value='Volver' > </div> </form> </div>"; /*break; */ $rowCount = count($_POST["id"]); for($i=0;$i<$rowCount;$i++) { $mysqli->query("DELETE FROM cale WHERE id ='" . $_POST["id"][$i] . "'"); }} ?>
Si alguien puede eliminar el JS y hacerlo solo con PHP, avisen, ya que esa era mi idea
Un saludo
Daniel Votos: 2 - Link respuesta -
Fecha: 10-10-2015 02:05:56 Hola Daniel:
Hace un tiempo que realizaba lo que quieres, en una hoja y solo PHP. Como en tu caso, también mi código puede ser mejorado pero paso a explicarte la idea.
A diferencia de tu estructura, dentro del while, el que tienes en 777.php, despliego no uno sino dos <form> Uno inicial donde podré editar los cambios que quiera hacer (UPDATE) con el submit de "guardar cambios", y un segundo con campos ocultos (<input type="hidden">) donde solo veo el submit que nos enviará los valores para borrar el usuario.
Al tomar, vía post, el o los valores del id, nombre, etc de uno u otro formulario, realizará una u otra función.
En mi caso, la acción de borrar (ese segundo form del que solo veo la acción de borrar pero que contiene todos los datos que necesito) la enviaba a un tercer <form> fuera del while que reiteraba la confirmación de borrar (¿Realmente quiere Vd. borrar este registro?). La razón es muy sencilla, como es la de evitar el click "sin querer" (o si lo prefieres, el gatillo fácil).
En términos de derecho, asegurarnos que hay alevosía a la hora de borrar.
Si necesitas una muestra de código (corresponde a un complejo trabajo de logística pero te será fácil entenderlo) me lo pides en privado. Votos: 1 - Link respuesta -
Fecha: 10-10-2015 04:03:28 Artzain
Buenos dias Argentinos
En realidad el 3er script no lo publique (Eliminar), dado que comprendi que se deberia entender la referencia, pero tenes razon en que mi exposicion quedo incompleta, por lo tanto ya me pongo a construirla y publicarla.
Como siempre muchas gracias por tu acotacion y colaboracion.
Un saludo Daniel
PD.: No estaria mal que publiques tu script, por el solo hecho de observar otra LOGICA y aprender de ella. Votos: 0 - Link respuesta -
Fecha: 10-10-2015 04:40:32 Artzain
Ya agrege en los Script una 3er Pagina ELIMINAR ... asi de este modo queda completo el script
Un saludo
Daniel Votos: 0 - Link respuesta -
Fecha: 10-10-2015 05:49:08 Hola el Daniel el error que yo no encontré fue en los name no se pero según veo es esto:
name="<?php echo 'seleccion'[$i] ;?>
Por esto:
name="<?php echo 'seleccion'.[$i] ;?>
Votos: 1 - Link respuesta -
Fecha: 10-10-2015 06:32:45 Hola Daniel:
He querido trabajar sobe tu código con la estructura que te proponía.
Lo normal es que haya no uno sino varios errores (al no tener la base de datos ni su acceso no lo puedo probar), así como vacíos en los que tendrás que implementar código, como donde comento: // Tu código para modificar que concluye con , etc.
Sobra decir que no me he preocupado en la tabulación, lejos de la importancia que le doy a ello.
<?php require('funciones/conexion.php'); ?> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link href='' rel='shortcut icon' type='image/png'> <title>XX</title> </head> <body> <?php $sql = "SELECT id, apellido, nombre, ano, mes FROM cale "; $resultado = $mysqli->query($sql); ?> <?php /* MODIFICAR */ if(isset($_POST["update"]) && $_POST["update"]=="Modificar") { // Tu código para modificar que concluye con $mysqli->query("UPDATE cale set id ='" .$_POST["updateid"] . "', apellido ='" .$_POST["updateapellido"] . "', nombre ='" .$_POST["updatenombre"] . "', ano ='" .$_POST["updateano"] . "', mes ='" .$_POST["updatemes"] . "' WHERE id ='" .$_POST["updateid"][$i] . "'"); } ?> <?php /* ELIMINAR */ if(isset($_POST["delete"]) && $_POST["delete"]=="Eliminar") { // Tu código para eliminar que concluye con $mysqli->query("DELETE FROM cale WHERE id ='" . $_POST["deleteid"] . "'"); } ?> <Table> <thead> <tr> <td>ID</td> <td>Apellido</td> <td>Nombre</td> <td>Año</td> <td>Mes</td> </tr> </thead> </table> <?php $i=0; while ($row = mysqli_fetch_array($resultado)){ ?> <table> <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <tbody> <tr> <td><input type="hidden" name="updateid" value="<?php echo $row['id'] ;?>"> <input type="text" name="updateapellido" value="<?php echo $row['apellido'] ;?>"></td> <td><input type="text" name="updatenombre" value="<?php echo $row['nombre'] ;?>"></td> <td><input type="text" name="updateano" value="<?php echo $row['ano'] ;?>"></td> <td><input type="text" name="updatemes" value="<?php echo $row['mes'] ;?>"></td> <td><input type="submit" name="update" value="Modificar"> </td> </form> <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <td><input type="hidden" name="deleteid" value="<?php echo $row['id'] ;?>"> <input type="submit" name="delete" value="Eliminar"> </td> </form> </tr> </tbody> <hr> </table> <?php $i++; } ?> </body> </html>
Creo que con ello ves la OTRA LÓGICA, como tú la definías.
P.D.: Para eliminar creo que te es suficiente el campo que yo lo llamo "deleteid.
Saludos Votos: 2 - Link respuesta -
Fecha: 10-10-2015 07:02:11 Había referido anteriormente la conveniencia de confirmar la eliminación.
La parte de Eliminar quedaría así:
<?php /* PREVIO A ELIMINAR DEFINITIVAMENTE */ if(isset($_POST["delete"]) && $_POST["delete"]=="Eliminar") { ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <input type="hidden" name="confirmdeleteid" value="<?php echo $_POST['deleteid']; ?>"> <input type="submit" name="confirmdelete" value="CONFIRMAR ELIMINAR <?php echo $_POST['deleteid']; ?>"> </form> <?php } /* CONFIRMAR ELIMINAR */ if(isset($_POST["confirmdelete"]) && $_POST["confirmdelete"]!="") { // Tu código para eliminar que concluye con $mysqli->query("DELETE FROM cale WHERE id ='" . $_POST["confirmdeleteid"] . "'"); } ?>
Por cierto, me gustó mucho tu javascript. Y si existe ese lenguaje de programación, es porque tiene su mucha utilidad. Me sonó como poesía (algo como un escueto proverbio de Machado) (je je).
Saludos. Votos: 1 - Link respuesta -
Fecha: 13-10-2015 08:25:07 Hola,
Sé que es pregunta cerrada pero siempre acostumbro meter mi narizota donde nadie me llama.
Sé que tal vez es código de ejemplo pero si no lo és tengan mucho cuidado, es código sumamente vulnerable a muchos ataques y usarlo en un ambiente de producción puede causar muchos dolores de cabeza posteriormente. Votos: 1 - Link respuesta -
Fecha: 13-10-2015 08:52:38 Tranquilo Ernesto, agradezco tu advertencia, pero no es codigo de produccion, sino de prueba ... estoy experimentando con ello.
Un saludo y gracias
Daniel Votos: 2 - Link respuesta -
Fecha: 16-10-2015 06:57:19 Juan
Agradezco tu ayuda, es que la pregunta fue cerrada y resuelta (Ver debajo de mi pregunta, me autorespondi)
Un saludo
Gracia nuevamente Votos: 0 - Link respuesta -
Fecha: 16-10-2015 07:05:30 Para que funcione lo que quieres hacer
seguir estos pasos:
estas tres linea que tienes
<input type='hidden' name="<?php echo 'id'[$i] ;?>" value="<?php echo $row[0] ;?>" /> <td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="<?php echo 'modifica'.$row[0].'';?>"/></td> <td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="<?php echo 'elimina'.$row[0].'';?>" /></td>
cambialo por estas:
<td><input type='hidden' name="seleccion[]" value="<?php echo $row[0] ;?>"></td> <td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="modifica"/></td> <td><input type='radio' name="<?php echo 'seleccion'[$i] ;?>" value="elimina"/></td>
Tu codigo php quedaria asi:
<?php require('funciones/conexion.php'); /******************************************** iniciamos el ciclo con el que obtendremos lo que envio el formulario **************************************************************/ foreach ($_GET['seleccion'] as $indice){ //Vamos a verificar si trae la opcion de eliminar o modificar $opcion = $_GET['seleccion'][$indice] //extraemos la parte de la cadena que elimina y/o modifica switch($opcion){ //generamos la sentencia para la modificación filtrando por el id para que solo cambie ese registro case 'modifica':$sql="UPDATE cale SET apellido='".$_GET['apellido'][$indice]."', nombrea=".$_GET['nombre'][$indice].", ano=".$_GET['ano'][$indice].", mes=".$_GET['mes'][$indice]." WHERE id=".$indice; break; case 'elimina':$sql="DELETE FROM cale WHERE id=".$indice;break; default: echo "<center>NO HAY NADA SELECCIONADO</center>"; break; } echo "Variable sql: ".$sql; $resultado = $mysqli->query($sql); if (Empty($resultado)){ echo "Error: " . $resultado . "<br>" . mysqli_error($mysqli); }else{ echo "<center>FELICIDADES SENTENCIA EJECUTADA CORRECTAMENTE</center><br /> <a href='555.php'>Volver al panel</a>"; } } ?>Votos: 2 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
