Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   script para editar registros de una bbdd como lo hace phpmyadmin (http://www.forosdelweb.com/f18/script-para-editar-registros-bbdd-como-hace-phpmyadmin-616732/)

mgo3 20/08/2008 06:03

script para editar registros de una bbdd como lo hace phpmyadmin
 
Hola, estoy diseñando un panel de control web en el que quiero mostrar todos los registros de una bbdd con un checkbox al lado para que el usuario pueda seleccionar los que quiera y editarlos como lo hace phpmyadmin.
Lo tengo todo menos la parte final, creo el formulario con todos los checbox y luego según los checkbox que haya seleccionados creo otro form con todos los campos para modificar los registros, pero luego no sé cómo hacer para procesar los datos del segundo form ya que no sé cuántos hay y estarían repetidos en un bucle, no sé como nombrarlos para identificarlos, me explico? Ahí va algo de código a ver si se ve...

index.php
Código PHP:

<form action="accion.php" method="post">
        <?php
        
while($fila mysql_fetch_assoc($ejecucion)){
<
td><input type="checkbox" name="borrar[]" value="<?php echo $fila['id_usuario'];?>"></td>echo "<td>".$fila['nombre']."</td>";
            echo 
"<td>".$fila['apellidos']."</td>";
            echo 
"<td>".$fila['email']."</td>";
            echo 
"<td>".$fila['telefono']."</td>";
            echo 
"<td>".$fila['direccion']."</td>";
            echo 
"<td>".$fila['cod_postal']."</td>";
(...)

accion.php
Código PHP:

<form action="editar.php" method="post" name="Registrar_usuario" onSubmit="return validar_formulario(this)">
            <?php
            
for($i=0$i<count($_POST['borrar']);$i++){
            
$sentencia "select * from usuarios where id_usuario = ".$_POST['borrar'][$i];
            
$ejecucion mysql_query($sentencia);
            
$fila mysql_fetch_assoc($ejecucion);
            
?>
            <h2>Usuario <?php echo $_POST['borrar'][$i]; ?></h2>
            <p>Nombre:&nbsp;<font color="#FF0000">*</font>&nbsp;
            <input name="nombre<?php echo $i?>" type="text" size="30" value="<?php echo $fila['nombre'];?>" /></p>
            <p>Apellidos:&nbsp;<font color="#FF0000">*</font>&nbsp;
            <input name="apellidos<?php echo $i?>" type="text" size="50" value="<?php echo $fila['apellidos'];?>" /></p>
            <p>Dirección:&nbsp;
            <input name="direccion<?php echo $i?>" type="text" size="40" value="<?php echo $fila['direccion'];?>" />
            &nbsp;&nbsp;Código postal:&nbsp;
            <input name="cod_postal<?php echo $i?>" type="text" size="6" maxlength="5" value="<?php echo $fila['cod_postal'];?>" /></p>
            
            <div id="demo" style="width:600px;">
                <div id="demoDer">
                    Municipio:&nbsp;
                    <select disabled="disabled" name="municipios<?php echo $i?>" id="municipios<?php echo $_POST['borrar'][$i]; ?>">
                        <option value="0">Selecciona opci&oacute;n...</option>
                    </select>
                </div>
                <div id="demoIzq">Provincia:&nbsp;<?php generaProvincias($i); ?></div>
            </div>
            
            <p>Teléfono:&nbsp;
            <input name="telefono<?php echo $i?>" type="text" size="10" value="<?php echo $fila['telefono'];?>" />
            Email:&nbsp;<font color="#FF0000">*</font>&nbsp;
            <input name="email<?php echo $i?>" type="text" size="40" value="<?php echo $fila['email'];?>" /></p>
            <p>Nombre de usuario:&nbsp;<font color="#FF0000">*</font>
            &nbsp <input name="login<?php echo $i?>" type="text" size="20" value="<?php echo $fila['login'];?>" />
            Contraseña:&nbsp;<font color="#FF0000">*</font>
            &nbsp <input name="pass<?php echo $i?>" type="password" size="20" value="<?php echo $fila['pass'];?>" /></p>
            <input type="hidden" name="id_usuario<?php echo $i?>" value="<?php echo $_POST['borrar'][$i];?>" />
            <p><font color="#FF0000">*</font>&nbsp;Campos obligatorios.</p>
                        
            <?php
            
}
            
?>
            <input type="hidden" name="count" value="<?php echo count($_POST['borrar']);?>" />
            <p><input name="Enviar" type="submit" value="Actualizar"/></p>
            </form>

editar.php
Código PHP:

<?php
$cont 
$HTTP_POST_VARS["count$i"];
for(
$i=0;$i<$cont;$i++){
// Recogida de variables
$nombre($i)=$HTTP_POST_VARS["nombre$i"];
$apellidos($i)=$HTTP_POST_VARS["apellidos$i"];
$direccion($i)=$HTTP_POST_VARS["direccion$i"];
$cod_postal($i)=$HTTP_POST_VARS["cod_postal$i"];
if(isset(
$HTTP_POST_VARS["municipios$i"])){
    
$municipio($i)=$HTTP_POST_VARS["municipios$i"];
}else{
    
$municipio($i)=0;
}
$provincia($i)=$HTTP_POST_VARS["provincias$i"];
$telefono($i)=$HTTP_POST_VARS["telefono$i"];
$email($i)=$HTTP_POST_VARS["email$i"];
$login($i)=$HTTP_POST_VARS["login$i"];
$pass($i)=$HTTP_POST_VARS["pass$i"];
$id_usuario($i)=$HTTP_POST_VARS["id_usuario$i"];

// Conexión y selección de la BBDD 
$link mysql_connect("localhost","elitebags","Sa5679") or die(mysql_error());
mysql_select_db("carpetas_abadias_nuevo");

// Sentencia de inserción de datos
$sentencia "update usuarios set nombre='$nombre($i)',
                                apellidos='$apellidos($i)',
                                direccion='$direccion($i)',
                                cod_postal='$cod_postal($i)',
                                id_municipio='$municipio($i)',
                                id_provincia='$provincia($i)',
                                telefono='$telefono($i)',
                                email='$email($i)',
                                login='$login($i)',
                                pass='$pass($i)'
                    where id_usuario = '$id_usuario($i)';"
;

// Ejecución de la sentencia                                
$ejecuta mysql_query($sentencia,$link);

// Comprobar resultados
if($ejecuta){
    echo 
"<font color=\"green\">Usuario actualizado correctamente</font><br>";
}
else{
    echo 
"<font color=\"red\"><b>Error al actualizar el usuario<b></font><br>".mysql_error();
}
?>

¿Alguien tiene alguna idea?

Muchas gracias y un saludo!

ilie 21/08/2008 05:39

Respuesta: script para editar registros de una bbdd como lo hace phpmyadmin
 
No me he leido el código pero te doy una idea de como hacerlo, luego tú añádela donde veas más oportuno.
Lo mejor es que crees sólo uno y con el nombre del input identifiques los valores:

form1input1, form1input2....
...
...
formXinput1, ... , formXinputY

los valores guárdalos en un array de arrays con un foreach (así puedes obtener fácilmente la key de cada $_POST[]).
foreach($_POST as $key->$valor){
//de la $key obten el nº de form y el nombre del input;
$array[nºform][input] = $valor; //un ejemplo: $array[0][nombre] = $valor;
}

donde input será el nombre que le hayas dado a cada input en el formulario (obtenido del $key)

una vez rellenado sólo tienes con un for ir recorriendo cada fila del array de arrays e ir asignando los valores a las querys de actualización, da igual que sean los mismos, el código será mas sencillo.

for($i=0; $i < sizeof($array); $i++){
$campo = array{$array[i][0], $array[i][1],...,$array[i][X]}
$sql = "UPDATE tabla SET campo1 = '.$campo[0], .... WHERE id = '.$id.'";
if(mysql_query($sql, $conexion)){
//campo actualizado
}
else{
//campo no actualizado -> error
}
}

donde
$array es el array de arrays.
$campo será un array con los datos de la fila a guardar.
$id será el campo con la PK para SOLO modificar ese registro.
tabla será la tabla a actualizar.

//-> sustitúyelo por el código correspondiente.

mgo3 25/08/2008 03:13

Respuesta: script para editar registros de una bbdd como lo hace phpmyadmin
 
Muchas gracias Ilie pero creo que, o no he entendido bien tu solución, o no me sirve.
La idea básica es generar formularios dinámicamente con un bucle a partir de unos checkbox que se hayan seleccionado de otro formulario de otro archivo. Pero en realidad no habría un formulario para cada iteración del bucle, y por tanto para cada registro de la bbdd, sino que todos los inputs de todos los registros irían en el mismo form (ésto es para poder actualizar todos los registros de una vez). Para que los inputs tengan distinto nombre le he concatenado al nombre normal ('nombre', 'apellidos', etc.) el id del usuario (como se ve en los inputs del accion.php), pero no sé cómo recoger esos inputs con esos nombres ni como crear la sentencia update sin saber cuántos inputs hay ni qué nombres tienen, porque en editar.php ya no tengo los id de usuario.
En fin, es un jaleo, por eso preguntaba también si alguien sabía cómo hacerlo más sencillo.

¿Alguna idea o ayuda para terminarlo como está?

Un saludo y muchas gracias.

ilie 25/08/2008 05:56

Respuesta: script para editar registros de una bbdd como lo hace phpmyadmin
 
bueno....

puedes referenciar cada checkbox con el usuario y añadirlo al nombre de las inputs:


<input name="usuario_nombre".../>, por ejemplo.

así te aseguras a quien pertenece ese input concreto y obtener sus datos para ser actualizados. eso lo puedes hacer con un foreach(). (en el antiguo comentario viene explicado). Con esta función asignas a $key el nombre del input y a $valor el valor introducido
realiza un explode() a $key para separar el usuario y el nombre del input:

//ejemplo: $key = usuario1_nombre;
list($usuario, $input) = explode('_',$key);
//$usuario = usuario1; $input = nombre;

una vez generes los "formularios" (aunque se trate de uno) de cada uno de los usuarios, como los nombres de los inputs los tienes que generar una estructura con la cual puedas obtener el nº de usuarios y los datos. Eso lo puedes hacer con un array de arrays, es decir:

$array=[usuario1][usuario2][usuario3] ... [usuarioN]
donde: $array[usuarioX] = [nombre][apellidos][cod_postal] ...

y asi por ejemplo tenemos:

$array [usuario1][nombre] = Pepe;

con un count($array) obtengo el nº de usuarios, por lo tanto tienes el nº de updates a realizar. Con el for que te indico en el comentario anterior puedes realizar los UPDATES a partir del usuario.

solo tienes que adaptar 'un poco' el código a tu script editar.php y ya está.

si tienes dudas sobre alguno de los pasos no dudes en consultar. Espero que ya lo consigas resolverlo y te haya servido de ayuda. Un saludo

mgo3 26/08/2008 02:52

Respuesta: script para editar registros de una bbdd como lo hace phpmyadmin
 
Gracias, ya lo he resuelto, era más sencillo que todo eso, símplemente he recogido el nombre del campo en una variable como texto y luego lo he pasado al $_HTTP_POST_VARS[]:

Código PHP:

<?php
$cont 
$HTTP_POST_VARS["count"];

for(
$i=0;$i<$cont;$i++){
$nombre "nombre".$i;
$apellidos "apellidos".$i;
$direccion "direccion".$i;
$cod_postal "cod_postal".$i;
$municipio "municipios".$i;
$provincia "provincias".$i;
$telefono "telefono".$i;
$email "email".$i;
$login "login".$i;
$pass "pass".$i;
$id_usuario "id_usuario".$i;
// Recogida de variables
$reg_nombre=$HTTP_POST_VARS[$nombre];
$reg_apellidos=$HTTP_POST_VARS[$apellidos];
$reg_direccion=$HTTP_POST_VARS[$direccion];
$reg_cod_postal=$HTTP_POST_VARS[$cod_postal];


Mi problema ahora es que no puedo validar el formulario porque los nombres de los inputs los tengo como <input name="nombre<?php echo $i; ?>" y claro fuera del bucle no tengo esa $i y menos aún en javascript, no sé cómo hacerlo, he intentado poner un bucle en la función de validación tal que así:

Código:

function validar_formulario(formulario, i){
                var cont;
                for(cont=0;cont<i;cont++){
                        if(formulario.(nombre + cont).value==""){
                                alert('Es necesario introducir el nombre.');
                                formulario.nombre + cont.focus();
                                return false;
                        }

pero no me va... no sé si el javascript está bien así. ¿Alguna ayuda por favor?

Un saludo y gracias.


La zona horaria es GMT -6. Ahora son las 11:05.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2014, Jelsoft Enterprises Ltd.

SEO by vBSEO 3.3.2