1. Las funciones de leer, eliminar, editar, insertar y conectar están en un archivo aparte. Se incluye además una función para obtener la lista de departamentos. De esta manera no se hacen llamadas a la DB por ahí, todo está agrupado.
2. Después de conectar, se comprueba si el usuario ha seleccionado una opción y se ejecuta.
3. Se muestran los resultados.
NOTAS:
0. Este ejemplo tiene unicamente fines DIDACTICOS, se entiende que se puede mejorar de muchas maneras. Tomar como un ejemplo en cuanto a técnica y no en cuanto a diseño.
1. Está en MYSQL, quién tenga ganas que lo actualice y mysqli,
2. Esta es una implementación que tiene por objeto mostrar la parte de las funciones, lo demás es indispensable pero se puede hacer mejor.
3. Si aún con los comentarios no se entiende, postear en cualquier momento.
Ahí va, saludos:
1. Dos tablas:
Código MySQL:
Ver original
2. Un par de funciones:
Código PHP:
Ver original
<?php // Algunas constantes // La definicion de constante se encuentra aquí: //http://www.php.net/manual/es/language.constants.php // Conexión a la db // Wrapper para mysql_connect //No encuentro ningún articulo que explique que es un wrapper, que alguien aporte //por fa function conectar($host, $user, $pass, $db) { // Si no hay conexión fin del script // Si no se puede seleccionar la db, fin del script return $link; } // Devuelve un elemento si se especifica $id o toda la tabla caso contrario function select($link, $id = null) { // Tabla users $sql = "SELECT * FROM demo_users "; // Join con deptos, se hace siempre $sql .= "LEFT JOIN demo_depts on demo_depts.depid = demo_users.userdep"; if ($id) $sql .= " WHERE demo_users.userid = $id"; return $query; } // inserta id con values function insert($link, $values) { // Inicio de la sentencia $sql = "INSERT INTO demo_users ( "; // Por cada par de clave, valor, concatenar al string sql // Primero las claves foreach ( $values as $property => $value ) { $sql .= $property . ","; } // Quito la ultima coma $sql .= ") VALUES ("; // Ahora los valores foreach ( $values as $property => $value ) { $sql .= "'$value',"; } $sql .= ");"; // Insertar } // actualiza id con values function update($link, $id, $values) { $sql = "UPDATE demo_users SET "; foreach ( $values as $property => $value ) { $sql .= $property . " = '$value', "; } // Quito la ultima coma } // elimina id function delete($link, $id) { $sql = "DELETE FROM demo_users WHERE userid = '$id';"; return true; } //select con los departamentos function getDepSelect($link, $id = null) { $sql = "SELECT * FROM demo_depts"; $output = "<select name='depid' id='depid'>"; $output .= "<option value='-1' selected='selected'>Seleccione....</option>"; { //mostrar los registros, pero si hay un $id, entonces ese registro debe seleccionarse $output .= "<option ".($id && $id == $deps['depid']?'selected="selected"':'')." value='{$deps['depid']}'>{$deps['depname']}</option>"; } $output .= "</select>"; return $output; } // Un die un poco mas detallado
3. Un controlador
Código PHP:
Ver original
<?php // Mostrar errores // Incluir funciones include_once 'funciones.php'; // Conectar $conexion = conectar ( DBHOST, DBUSER, DBPASS, DBNAME ); // Un mensaje $msg = 'Esto es un ejemplo, selecciona una opción o utiliza el form para insertar un registro'; // Variables por defecto para el form // el formulario es de insercion $form_action = "?insert"; // obtener los departamentos $form_select = getDepSelect ( $conexion ); // El usuario a clickeado en insertar // Leer valores pasador por $_POST 'username' => $_POST ['username'], 'userdep' => $_POST ['depid'] ); // Insert contiene un die() dentro, no hace falta hacerlo aquí $id = insert ( $conexion, $datos ); // Setear el mensaje $msg = "Registro $id insertado ok..."; // registro // la proxima accion del form serßa // doedit, o sea, hacer la edicion $form_action = "?DOedit={$_GET['edit']}"; // Para editar, necesitamos recuperar el registro $query = select ( $conexion, $_GET ['edit'] ); // Asignar valores $reg ['userid'] = $d ['userid']; $reg ['userdep'] = $d ['userdep']; $reg ['username'] = $d ['username']; } // La select del form debe tener el elemento correcto seleccionado $form_select = getDepSelect ( $conexion, $reg ['userdep'] ); // lo está enviando 'username' => $_POST ['username'], 'userdep' => $_POST ['depid'] ); // Proxima acción sera insertar $action = "?insert"; // Obtener los departamentos $form_select = getDepSelect ( $conexion, $_GET ['DOedit'] ); update ( $conexion, $_GET ['DOedit'], $datos ); $msg = "Registro {$_GET['DOedit']} actualizado ok..."; // Eliminar registro delete ( $conexion, $_GET ['delete'] ); $msg = "Registro {$_GET['delete']} eliminado ok..."; } else { // Ninguna opción seleccionada, hacer algo.... $msg = "Ninguna opción seleccionada..."; } // Mostrar datos, le falta un poco de onda pero se entiende, no? $query = select ( $conexion ); echo "ELEMENTOS EN LA TABLA USERS<br>"; $tabla = "<table>"; $tabla .= "<tr>"; $tabla .= "<td>{$datos['userid']} {$datos['username']} {$datos['depname']} <a href='?edit={$datos['userid']}'>Editar</a> <a onclick='return confirm(\"Seguro?\");' href='?delete={$datos['userid']}'>Eliminar</a> </td>"; $tabla .= "</tr>"; } $tabla .= "</table>"; } // Si no hay datos, mostrar mensaje // Un formulario, las variables vienen de más arriba // Si es un modo edicion, mostrar los valores ?> <form method='post' action='<?=$form_action?>'> <table width='300' border='0'> <tr> <td>Nombre</td> <td><input type='text' name='username' </tr> <tr> <td>Departamento</td> <td><?=$form_select?></td> </tr> <tr> <td colspan='2'><input type='submit' name='Submit' value='Enviar' /> </td> </tr> </table> </form> <!-- Si hay mensaje , mostrarlo --> <h5><?=$msg?></h5>