Foros del Web » Programando para Internet » PHP »

[APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultra básico)

Estas en el tema de [APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultra básico) en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 08/07/2013, 10:41
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
[APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultra básico)

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:

Código MySQL:
Ver original
  1. CREATE TABLE `demo_depts` (
  2.   `depid` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `depname` VARCHAR(32) DEFAULT NULL,
  4.   PRIMARY KEY (`depid`)
  5.  
  6. CREATE TABLE `demo_users` (
  7.   `userid` INT(11) NOT NULL AUTO_INCREMENT,
  8.   `username` VARCHAR(32) DEFAULT NULL,
  9.   `userdep` INT(11) DEFAULT NULL,
  10.   PRIMARY KEY (`userid`),
  11.   KEY `FK_users` (`userdep`)

2. Un par de funciones:

Código PHP:
Ver original
  1. <?php
  2.  
  3. // Algunas constantes
  4. // La definicion de constante se encuentra aquí:
  5. //http://www.php.net/manual/es/language.constants.php
  6. // Conexión a la db
  7. define ( 'DBHOST', 'localhost' );
  8. define ( 'DBUSER', 'xxx' );
  9. define ( 'DBPASS', 'xxx' );
  10. define ( 'DBNAME', 'xxx' );
  11.  
  12.  
  13. // Wrapper para mysql_connect
  14. //No encuentro ningún articulo que explique que es un wrapper, que alguien aporte //por fa
  15. function conectar($host, $user, $pass, $db) {
  16.  
  17.     // Si no hay conexión fin del script
  18.     if(!$link = mysql_connect ( $host, $user, $pass )) die(mysql_error());
  19.     // Si no se puede seleccionar la db, fin del script
  20.     if(!$dbase = mysql_select_db ( $db, $link )) die(mysql_error());
  21.     return $link;
  22. }
  23.  
  24. // Devuelve un elemento si se especifica $id o toda la tabla caso contrario
  25. function select($link, $id = null) {
  26.     // Tabla users
  27.     $sql = "SELECT * FROM demo_users ";
  28.         // Join con deptos, se hace siempre
  29.     $sql .= "LEFT JOIN demo_depts on demo_depts.depid = demo_users.userdep";
  30.     if ($id)
  31.         $sql .= " WHERE  demo_users.userid = $id";
  32.     if(!$query = mysql_query ( $sql, $link )) die(mysql_error());
  33.     return $query;
  34. }
  35.  
  36. // inserta id con values
  37. function insert($link, $values) {
  38.     // Inicio de la sentencia
  39.     $sql = "INSERT INTO demo_users ( ";
  40.     // Por cada par de clave, valor, concatenar al string sql
  41.     // Primero las claves
  42.     foreach ( $values as $property => $value ) {
  43.        
  44.         $sql .= $property . ",";
  45.     }
  46.     // Quito la ultima coma
  47.     $sql = substr ( $sql, 0, - 1 );
  48.     $sql .= ") VALUES (";
  49.     // Ahora los valores
  50.     foreach ( $values as $property => $value ) {
  51.        
  52.         $sql .= "'$value',";
  53.     }
  54.     $sql = substr ( $sql, 0, - 1 );
  55.     $sql .= ");";
  56.     // Insertar
  57.     if(!$query = mysql_query ( $sql, $link )) die(mysql_error());
  58.     return mysql_insert_id($link);
  59. }
  60.  
  61. // actualiza id con values
  62. function update($link, $id, $values) {
  63.     $sql = "UPDATE demo_users SET ";
  64.    
  65.     foreach ( $values as $property => $value ) {
  66.        
  67.         $sql .= $property . " = '$value', ";
  68.     }
  69.     // Quito la ultima coma
  70.     $sql = substr ( $sql, 0, - 2 ) . " WHERE userid = '$id';";
  71.     if (!$query =  mysql_query ( $sql, $link )) die(mysql_error());
  72.    
  73.     return mysql_affected_rows($link);
  74. }
  75.  
  76. // elimina id
  77. function delete($link, $id) {
  78.     $sql = "DELETE FROM demo_users WHERE userid = '$id';";
  79.     if (!$query = mysql_query ( $sql, $link )) die(mysql_error());
  80.     return true;
  81. }
  82.  
  83. //select con los departamentos
  84. function getDepSelect($link, $id = null)
  85. {
  86.     $sql = "SELECT * FROM demo_depts";
  87.     if(!$query = mysql_query($sql, $link)) die(mysql_error());
  88.     $output = "<select name='depid' id='depid'>";
  89.     $output .= "<option value='-1' selected='selected'>Seleccione....</option>";
  90.     while($deps = mysql_fetch_assoc($query))
  91.     {
  92.         //mostrar los registros, pero si hay un $id, entonces ese registro debe seleccionarse
  93.         $output .= "<option ".($id && $id == $deps['depid']?'selected="selected"':'')." value='{$deps['depid']}'>{$deps['depname']}</option>";
  94.        
  95.     }
  96.     $output .= "</select>";
  97.     return $output;
  98. }
  99. // Un die un poco mas detallado

3. Un controlador

Código PHP:
Ver original
  1. <?php
  2. // Mostrar errores
  3. error_reporting ( E_ALL );
  4. ini_set ( 'display_errors', 1 );
  5. // Incluir funciones
  6. include_once 'funciones.php';
  7.  
  8. // Conectar
  9. $conexion = conectar ( DBHOST, DBUSER, DBPASS, DBNAME );
  10. // Un mensaje
  11. $msg = 'Esto es un ejemplo, selecciona una opción o utiliza el form para insertar un registro';
  12. // Variables por defecto para el form
  13. $reg = array ();
  14. // el formulario es de insercion
  15. $form_action = "?insert";
  16. // obtener los departamentos
  17. $form_select = getDepSelect ( $conexion );
  18. // El usuario a clickeado en insertar
  19. if (isset ( $_GET ['insert'] )) {
  20.     // Leer valores pasador por $_POST
  21.     $datos = array (
  22.             'username' => $_POST ['username'],
  23.             'userdep' => $_POST ['depid']
  24.     );
  25.     // Insert contiene un die() dentro, no hace falta hacerlo aquí
  26.     $id = insert ( $conexion, $datos );
  27.     // Setear el mensaje
  28.     $msg = "Registro $id insertado ok...";
  29. } elseif (isset ( $_GET ['edit'] )) { // El usuario ha clickeado editar un
  30.                                       // registro
  31.                                       // la proxima accion del form serßa
  32.                                       // doedit, o sea, hacer la edicion
  33.     $form_action = "?DOedit={$_GET['edit']}";
  34.     // Para editar, necesitamos recuperar el registro
  35.     $query = select ( $conexion, $_GET ['edit'] );
  36.     // Asignar valores
  37.     while ( $d = mysql_fetch_assoc ( $query ) ) {
  38.         $reg ['userid'] = $d ['userid'];
  39.         $reg ['userdep'] = $d ['userdep'];
  40.         $reg ['username'] = $d ['username'];
  41.     }
  42.    
  43.     // La select del form debe tener el elemento correcto seleccionado
  44.     $form_select = getDepSelect ( $conexion, $reg ['userdep'] );
  45. } elseif (isset ( $_GET ['DOedit'] )) { // El usuario ha llenado el form y ahora
  46.                                         // lo está enviando
  47.     $datos = array (
  48.             'username' => $_POST ['username'],
  49.             'userdep' => $_POST ['depid']
  50.     );
  51.     // Proxima acción sera insertar
  52.     $action = "?insert";
  53.     // Obtener los departamentos
  54.     $form_select = getDepSelect ( $conexion, $_GET ['DOedit'] );
  55.     update ( $conexion, $_GET ['DOedit'], $datos );
  56.     $msg = "Registro {$_GET['DOedit']} actualizado ok...";
  57. } elseif (isset ( $_GET ['delete'] )) {
  58.     // Eliminar registro
  59.     delete ( $conexion, $_GET ['delete'] );
  60.     $msg = "Registro {$_GET['delete']} eliminado ok...";
  61. } else { // Ninguna opción seleccionada, hacer algo....
  62.     $msg = "Ninguna opción seleccionada...";
  63. }
  64.  
  65. // Mostrar datos, le falta un poco de onda pero se entiende, no?
  66. $query = select ( $conexion );
  67. echo "ELEMENTOS EN LA TABLA USERS<br>";
  68. if (mysql_num_rows ( $query )) {
  69.     $tabla = "<table>";
  70.     while ( $datos = mysql_fetch_assoc ( $query ) ) {
  71.         $tabla .= "<tr>";
  72.         $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>";
  73.         $tabla .= "</tr>";
  74.     }
  75.     $tabla .= "</table>";
  76. }
  77. // Si no hay datos, mostrar mensaje
  78. echo isset ( $tabla ) ? $tabla : 'No hay datos.';
  79.  
  80. // Un formulario, las variables vienen de más arriba
  81. // Si es un modo edicion, mostrar los valores
  82. ?>
  83. <form method='post' action='<?=$form_action?>'>
  84.     <table width='300' border='0'>
  85.         <tr>
  86.             <td>Nombre</td>
  87.             <td><input type='text' name='username'
  88.                 value='<?=(count($reg)?$reg['username']:'')?>' /></td>
  89.         </tr>
  90.         <tr>
  91.             <td>Departamento</td>
  92.             <td><?=$form_select?></td>
  93.         </tr>
  94.         <tr>
  95.             <td colspan='2'><input type='submit' name='Submit' value='Enviar' />
  96.             </td>
  97.         </tr>
  98.     </table>
  99. </form>
  100. <!--  Si hay mensaje , mostrarlo -->
  101. <h5><?=$msg?></h5>
__________________
Fere libenter homines, id quod volunt, credunt.
  #2 (permalink)  
Antiguo 08/07/2013, 10:58
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 8 meses
Puntos: 1532
Respuesta: [APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultr

sin ánimos de ofender al igual de que las criticas constructivas son buenas, me parece que hubiese sido más acertado usar PDO o MySQLi al menos.

estoy claro que para un principiante es más fácil digerir las funciones nativas, pero el hecho es que están depreciadas, por el cual los usuarios con más experiencia (no solo colaboradores o mods) debemos insistir y presionar a los demás integrantes de la comunidad del foro a dejar de lado la obsolecencia, claro eśta que será bien recibido todo aporte valioso, pero debemos dejar de lado la necesidad de aportar sólo por la satisfacción de ayudar a otros y enfocarnos a ofrecer aportes de calidad que realmente alimenten el espíritu del foro.

es sólo una recomendación personal para que la tengas en cuenta en futuros aportes
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 08/07/2013, 11:03
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: [APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultr

El aporte viene a cuento de que muchísimos usuarios del foro están tan lejos de PDO e incluso de programación estructurada que cualquier ejemplo, incluso este, debería ser útil. Supongo que los miles de post donde se preguntan estos temas se deben a la falta de información en Internet o bien, a la falta de experiencia y conocimientos para interpretarla. Imagino que tal vez a alguno le pueda servir, por lo demás, 100% de acuerdo, salu2!
__________________
Fere libenter homines, id quod volunt, credunt.
  #4 (permalink)  
Antiguo 08/07/2013, 11:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: [APORTE] Leer, insertar, editar y eliminar registros con PHP / MySQL (ultr

mysqli, tiene una interfaz orientada a funciones al igual que mysql, por lo que hacerlo no es nada complicado y sin embargo le ayuda al usuario a ver algo bien hecho.

No digo que te brinques luego a PDO (interfaz OO), pero MySQLi tiene esa ventaja una interfaz orientada a funciones que hacen mucho más sencillo que un usuario novato pueda tomarla sin problema.

Eso es a lo que se refiere @maycolalvarez, realmente ese pequeño esfuerzo extra es lo que hace un verdadero aporte de calidad.

Es como si haces un muy buen tutorial de Windows, pero lo haces sobre Windows95, llega un momento que se vuelve una piedra de tropiezo en lugar de un buen aporte de calidad.

Saludos.

Etiquetas: formulario, mysql, registro, registros, select, sql, tabla, ultra, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:25.