Como este tema sigue saliendo ahí va otro ejemplo para los que están aprendiendo. Funciona así:
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:
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
define ( 'DBHOST', 'localhost' );
// 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 = substr ( $sql, 0, - 1 ); $sql .= ") VALUES (";
// Ahora los valores
foreach ( $values as $property => $value ) {
$sql .= "'$value',";
}
$sql = substr ( $sql, 0, - 1 ); $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
$sql = substr ( $sql, 0, - 2 ) . " WHERE userid = '$id';";
}
// 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
if (isset ( $_GET ['insert'] )) { // 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...";
} elseif (isset ( $_GET ['edit'] )) { // El usuario ha clickeado editar un // 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'] );
} elseif (isset ( $_GET ['DOedit'] )) { // El usuario ha llenado el form y ahora // 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...";
} elseif (isset ( $_GET ['delete'] )) { // 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
echo isset ( $tabla ) ?
$tabla : 'No hay datos.';
// 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'
value='
<?=(count($reg)?
$reg['username']:'')?>' /></td>
</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>