Registrar, listar y buscar registros de MySQL con PHP VDM

Share this

  1. <?php
  2. /*
  3.  * @author  : Jose Luis Yapur Vallejos
  4.  * @date    : 09/10/08
  5.  * @company : Netmedia
  6.  * @version : 1.3
  7.  * @content : Clase conexión para manejo en MySQL
  8.  */
  9.     class Conexion
  10.     {
  11.        
  12.         /*
  13.          * Variables globales que tomarán valor
  14.          * en el método constructor de la clase
  15.          * Conexion.
  16.          *
  17.          * Ej.
  18.          * $servidor  = "Localhost";
  19.          * $usuario   = "root";
  20.          * $password  = "password";
  21.          * $bdatos    = "bdatos";
  22.          *
  23.          * Estos serán recibidos por el método
  24.          * constructor y devolverá el objeto de conexión
  25.          */
  26.        
  27.         private $servidor;
  28.         private $usuario;
  29.         private $password;
  30.         private $bdatos;
  31.         private $conexion;
  32.        
  33.         public function Conexion($servidor, $usuario, $password, $bdatos)
  34.         {
  35.             $error = "ERROR 701 -CONSTRUCTOR-
  36.            Error de conexión, parametros
  37.            incorrectos." . mysql_error();
  38.             $this->bdatos   = $bdatos;
  39.             $this->conexion = @mysql_connect($servidor, $usuario, $password,
  40.                 $bdatos) or die($error);
  41.             $error = "ERROR 702 -CONSTRUCTOR-
  42.            No se puede seleccionar la
  43.            base de datos." . mysql_error();
  44.             mysql_select_db($this->bdatos, $this->conexion) or die($error);
  45.         }
  46.        
  47.         /*
  48.          * El método mostrar sirve para hacer
  49.          * consultas del tipo SELECT que pueden
  50.          * o no devolver valores.
  51.          *
  52.          * El método recibe la consulta SQL como parametro
  53.          * y devuelve una matriz dinámica de la forma
  54.          * $resultado[indice]['nomCampo'] del tipo
  55.          * String[][]
  56.          *
  57.          * Para algoritmos de busqueda devolverá una matriz
  58.          * con longitud 0 en caso no se encuentre la selección
  59.          * y mayor que 0 en caso contrario.
  60.          */
  61.        
  62.         public function mostrar($sql)
  63.         {
  64.             $error = "ERROR 703 -MOSTRAR-
  65.            No se puede mostrar la
  66.            selección." . mysql_error();
  67.             $consulta = @mysql_query($sql, $this->conexion)
  68.             or die($error);
  69.             $consultaMAX = mysql_num_fields($consulta);
  70.             $j = 0;
  71.             for($i = 0; $i < $consultaMAX; $i++)
  72.             {
  73.                 $campos[$i] = mysql_field_name ($consulta, $i);
  74.             }
  75.             while ($row = mysql_fetch_array($consulta))
  76.             {
  77.                 for($i = 0; $i < $consultaMAX; $i++)
  78.                 {
  79.                         $datos[$j][$campos[$i]] = $row[$campos[$i]];
  80.                 }
  81.                 $j++;
  82.             }
  83.             mysql_free_result($consulta);
  84.             return $datos;
  85.         }
  86.        
  87.         /*
  88.          * El método sentencia permite realizar
  89.          * todo tipo de consulta distinta a SELECT en
  90.          * la que se devuelve el número de
  91.          * filas afectadas.
  92.          *
  93.          * El método recibe una consulta SQL como parametro
  94.          */
  95.        
  96.         public function sentencia($sql)
  97.         {
  98.             $error = "ERROR 704 -SENTENCIA-
  99.            No se puede realizar la
  100.            consulta." . mysql_error();
  101.             $consulta = @mysql_query($sql, $this->conexion)
  102.             or die($error);
  103.             return $consulta;
  104.         }
  105.        
  106.         /*
  107.          * El método eliminar permite como su nombre lo dice
  108.          * eliminar uno o más campos de una tabla, este método recibe
  109.          * como parámetros el nombre de la tabla y la condición lógica para
  110.          * la eliminación del o de los campos.
  111.          */
  112.        
  113.         public function eliminar($tabla, $condicion)
  114.         {
  115.             $error = "ERROR 705 -ELIMINAR-
  116.            No se puede eliminar la
  117.            condición." . mysql_error();
  118.             $sql = "DELETE FROM " . $tabla .
  119.             "WHERE " . $condicion;
  120.             $consulta = @mysql_query($sql, $this->conexion)
  121.             or die($error);
  122.             return $consulta;
  123.         }
  124.        
  125.         /*
  126.          * El método actualizar permite actualizar uno más campos
  127.          * de una tabla, enviarle los campos actualizados y la condición lógica
  128.          * para realizar una consulta.
  129.          *
  130.          * Devuelve el número de filas afectadas
  131.          */
  132.        
  133.         public function actualizar($tabla, $campos, $condicion)
  134.         {
  135.             $error = "ERROR 706 -ACTUALIZAR-
  136.            No se puede actualizar la
  137.            condición." . mysql_error();
  138.             $sql = "UPDATE " . $tabla .
  139.             "SET " . $condicion . "WHERE " . $condicion;
  140.             $consulta = @mysql_query($sql, $this->conexion)
  141.             or die($error);
  142.             return $consulta;
  143.         }
  144.  
  145.   public function cerrar()
  146.   {
  147.    mysql_close($this->conexion);
  148.   }
  149.        
  150.        
  151.     }
  152.    
  153. class Alumno
  154. {
  155.  /**
  156.   *calcularPromedio($alumno[0]);
  157.  */
  158.  
  159.  var $alumno;
  160.  
  161.  function Alumno($alumno)
  162.  {
  163.   $this->alumno = $alumno;
  164.  }
  165.  
  166.  function calcularPromedio()
  167.  {
  168.    $suma = $this->alumno['n1'] + $this->alumno['n2'] + $this->alumno['n3'];
  169.    return round($suma/3);
  170.  }
  171.  function darColor()
  172.  {
  173.    if($this->calcularPromedio() > 11)
  174.    {
  175.   return '<font color="blue">'.$this->calcularPromedio().'</font>';
  176.  }
  177.    return '<font color="red">'.$this->calcularPromedio().'</font>';
  178.  }
  179.  function edadMenor()
  180.  {
  181.    if($this->alumno['edad'] > 17)
  182.    {
  183.   return 'MAYOR DE EDAD';
  184.    }
  185.    return 'MENOR DE EDAD';
  186.  }
  187. }
  188. $conn = new Conexion('localhost', 'root', '', 'bd_ejemplo');
  189.  
  190. if(!isset($_GET['buscar']))
  191. {
  192.  $alumno = $conn->mostrar("SELECT * FROM t_alumno");
  193. }
  194. else
  195. {
  196.  $alumno = $conn->mostrar("SELECT * FROM t_alumno WHERE nombres
  197. LIKE '%".$_GET['buscar']."%' OR edad = '".$_GET['buscar']."'");
  198. }
  199.  
  200. //si se ha enviado el formulario
  201. if(isset($_POST['button2']))
  202. {
  203.  $nombres = $_POST[nombres];
  204.  $edad = $_POST[edad];
  205.  $n1 = $_POST[n1];
  206.  $n2 = $_POST[n2];
  207.  $n3 = $_POST[n3];
  208.  
  209.  $conn->sentencia("INSERT INTO t_alumno (nombres, edad, n1, n2, n3) VALUES ('$nombres', '$edad', '$n1', '$n2', '$n3')");
  210.  echo 'ALUMNO AGREGADO';
  211. }
  212. ?>
  213. <style>
  214. #agregar{
  215. background-color:#FFFF66;
  216. position:absolute;
  217. border: 1px solid #000000;
  218. }
  219. </style>
  220. <form name="form1" method="get" action="">
  221.   <input type="text" name="buscar" id="buscar">
  222.   <input type="submit" name="button" id="button" value="Enviar">
  223. </form>
  224. <form name="form2" method="post" action="">
  225.   <p><a href="#" onClick="document.getElementById('agregar').style.display = 'block';">Agregar alumno</a></p>
  226.   <p>
  227.   <div id="agregar" style="display:none;">
  228.     <p>
  229.       <label>Nombre
  230.         <input type="text" name="nombres" id="nombres">
  231.       </label>
  232.     </p>
  233.     <p>
  234.       <label>Edad
  235.         <input type="text" name="edad" id="edad">
  236.       </label>
  237.     </p>
  238.     <p>
  239.       <label>Nota 1
  240.         <input type="text" name="n1" id="n1">
  241.       </label>
  242.     </p>
  243.     <p>
  244.       <label>Nota 2
  245.         <input type="text" name="n2" id="n2">
  246.       </label>
  247.     </p>
  248.     <p>
  249.       <label>Nota 3
  250.         <input type="text" name="n3" id="n3">
  251.       </label>
  252.     </p>
  253.     <p>
  254.       <input type="submit" name="button2" id="button2" value="Enviar">
  255.     </p>
  256.     <a href="#" onClick="document.getElementById('agregar').style.display = 'none';">Cerrar</a>
  257.   </div>
  258. </form>
  259. <table width="100%" border="1" cellspacing="0" cellpadding="0">
  260.   <tr>
  261.     <th bgcolor="#FFFF99" scope="col">NOMBRE</th>
  262.     <th bgcolor="#FFFF99" scope="col">EDAD</th>
  263.     <th bgcolor="#FFFF99" scope="col">N1</th>
  264.     <th bgcolor="#FFFF99" scope="col">N2</th>
  265.     <th bgcolor="#FFFF99" scope="col">N3</th>
  266.     <th bgcolor="#FFFF99" scope="col">PROMEDIO</th>
  267.     <th bgcolor="#FFFF99" scope="col">CONDICION</th>
  268.     <th bgcolor="#FFFF99" scope="col">ESTADO</th>
  269.   </tr>
  270. <?php
  271. for($i = 0; $i < count($alumno); ++$i)
  272. {
  273.  $objAlumno = new Alumno($alumno[$i]);
  274. ?>
  275.   <tr>
  276.     <td align="center"><?php echo $alumno[$i]['nombres'] ?></td>
  277.     <td align="center"><?php echo $alumno[$i]['edad'] ?></td>
  278.     <td align="center"><?php echo $alumno[$i]['n1'] ?></td>
  279.     <td align="center"><?php echo $alumno[$i]['n2'] ?></td>
  280.     <td align="center"><?php echo $alumno[$i]['n3'] ?></td>
  281.     <td align="center"><?php echo $objAlumno->calcularPromedio(); ?></td>
  282.     <td align="center"><?php echo $objAlumno->darColor(); ?></td>
  283.     <td align="center"><?php echo $objAlumno->edadMenor(); ?></td>
  284.   </tr>
  285. <?php
  286. }
  287. ?>
  288. </table>
  289. <p>&nbsp;</p>

Votación

-----

Comentarios

Se agradecen los comentarios.

Se agradecen los comentarios. Acabo de aprender 2 cosas .. muchas gracias. Recien conoci esta pagina y es un hecho que empezare a seguirla. Saludos.

Bienvenido, mañana

Bienvenido, mañana publicaremos la actulización de la clase presentada.

José Luis Yapur Vallejos
Presidente PHPLux

Buen intento, pero como

Buen intento, pero como mencionan arriba, esto parece php4, otro mal punto es mostrar los errores de mysql, deberías tener una estado de depuración; un sitio en producción no debe mostrar información detallada a posibles atacantes.

Waldo, Muchas gracias por la

Waldo,

Muchas gracias por la sugerencia, definitivamente la podremos en práctica.

Saludos,

José Luis Yapur Vallejos
Presidente PHPLux

Saludos tan solo para hacer

Saludos tan solo para hacer unas acotaciones:

En PHP5 la funcion constructora debe de ser __construct y no el nombre de la clase (Eso se estilaba en PHP4). Evitar el uso del supresor de errores @ pues ralentiza el script, lo mismo para las comillas dobles si solo se va a almacenar una cadena. El "manejador" de errores que usan para cada funcion nunca va a devolever el contenido de mysql_error pues es invocado antes de que el error ocurra si se desea mostrar talvez deberian de usar algo como : $error = 'ERROR 706 -ACTUALIZAR- No se puede actualizar la condición. (%s)' $consulta = mysql_query($sql, $this->conexion) or die( sprintf( $error, mysql_error( ) ) );

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Saltos automáticos de líneas y de párrafos.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <p>
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.

Más información sobre opciones de formato

Mollom CAPTCHA (escuchar código de audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.