Conectar un archivo PHP a una base de datos

  Ya se ha visto que el lenguaje PHP es un lenguaje de guiones muy versátil que se emplea, en la mayoría de los casos, en los sistemas de gestión de contenidos.
  No obstante, un guión de PHP por sí solo no tiene el  potencial necesario para hacer que un gestor de contenidos funcione todo lo bien que debiera. Necesita extraer sus datos de una base de datos a una para lograrlo.
  Para poder examinar y obtener los datos con los que poder trabajar, todos o algunos, según necesite, es necesario vincular el archivo (o archivos) PHP a la mencionada base de datos, normalmente, a través de un gestor de bases de datos.


PREPARACIONES PREVIAS

  Antes de conectar el fichero PHP a una base de datos, hay que comprobar los parámetros de conexión a la misma. Generalmente, esto puede verse en el archivo de configuración o en la sección de configuración, dependiendo del sistema de gestión de bases de datos, donde se encuentre la base de datos.
  Con esta información, lo mejor es preparar un archivo PHP (normalmente llamado "config.php") con la misma. Una estructura sencilla para dicho fichero es:
<?php
// ********** Se inicializan datos de la base de datos para las consultas ***
$servidor = "<nombre del servidor>";  

$usuario = "<nombre de usuario>"; 
$contraseña = "<contraseña>";  
$bd = "<nombre de la base de datos>"; 
// ********** Fin de inicializar datos ***/
?>


  Puede vincularse al fichero PHP principal introduciendo en él require_once("<nombre del archivo>");.


CONEXIÓN 

  Conectar un archivo PHP a una base de datos es tan sencillo como añadirle una variable con los parámetros de conexión con la siguiente sintaxis:
$bdat = <nombre de gestor de bases de datos>_connect($servidor, $usuario, $contraseña, $bd);.
 Por ejemplo, para conectarse a un gestor de bases de datos MySQL, la variable sería "$bd = msqli_connect("localhost", "admin", "Lobo", "herramientas");", mientras que si fuera un SQL Server, la variable podría ser ""$bd = sqlsrv_connect("localhost", "admin", "manzano", "montañas");".
  Luego, se empleará la variable en los comandos y fórmulas que se deseen utilizar sobre la base de datos.
  Puede lograrse que se muestren las tildes correctamente (cuando sea necesario), gracias a la introducción de <nombre del gestor de bases de datos>_query($bdat, "set names 'utf8'"); en el interior de la sentencia donde se aplique la variable de conexión de base de datos (normalmente, una sentencia condicional if o de tipo parecido). Por otra parte, también es posible introducir una sentencia, dentro de la que establezca la conexión, que muestre si la conexión se ha producido correctamente o no. El modo más sencillo sería el siguiente:
if ($bdat) {
  echo "Conexión establecida con éxito.<br/>";
  <sentencia de interacción con la base de datos>
  if ($res) {
     mostrarTabla($res);

} else {
  echo "Se produjo un error en la conexión con la base de datos.<br>";

}
<cierre de la conexión con la base de datos>
}


  Al final del archivo de PHP, lo mejor es cerrar siempre la conexión con la base de datos, lo que se puede hacer mediante la siguiente sentencia (normalmente como sentencia dentro de la sentencia if tras las sentencias de interacción con la base de datos):
<nombre del gestor de bases de datos>_close($bdat);


USOS BÁSICOS

  Entre los usos en que se suele emplear el vínculo fichero PHP - base de datos, suelen estar: las consultas de datos y la inserción de datos.

  Consultas de datos
 Crear una consulta consiste en hacer una variable, generalmente dentro de una sentencia if o similar, tras la conexión con la misma, cuyo valor es una sentencia en lenguaje SQL que realice la consulta. La sintaxis más básica es:
if ($bdat){
    $consulta = "SELECT <campo de la tabla de la base de datos> FROM <nombre de tabla de la base de datos>";
    $res = <nombre del gestor de bases de datos>_query($bdat, $consulta);
}

  Si se pretende filtrar el resultado de la consulta como una matriz secuencial con los contenidos de los campos especificados en SELECT, se debe incluir la sentencia <nombre del gestor de bases de datos>_fetch_row(<recurso>); bajo la consulta. En el caso de que no haya registro para devolver, la sentencia devolverá un valor "FALSE".
  También es posible filtar el resultado de la consulta como una matriz asociativa (cuyos índices contienen los nombres de los campos de SELECT) con los contenidos de los campos especificados en SELECT, se debe incluir la sentencia <nombre del gestor de bases de datos>_fetch_assoc(<recurso>); bajo la consulta. En el caso de que no haya registro para devolver, la sentencia devolverá un valor "FALSE".

Inserción de datos
 Otro empleo básico de un archivo en PHP vinculado a una base de datos es la inserción de datos en esta última a través del primero.
  Al igual que en el caso anterior, se trata de crear una sentencia de consulta (normalmente dentro de una sentencia if o similar) tras la conexión con la misma. Una sintaxis simple para esta sentencia de consulta sería la siguiente:
$consulta = "INSERT INTO <nombre de tabla> (<columna 1>, <columna 2>, ...) VALUES ('<valor de columna 1>', '<valor de columna 2>', ...)";
if (<nombre del gestor de bases de datos>_query($bdat, $consulta)) {
      echo "Nuevos datos introducidos correctamente";
} else {
      echo "Error: " . $consulta . "<br>" .
<nombre del gestor de bases de datos>_error($bdat);
}
<nombre del gestor de bases de datos>_close($bdat);


  Por ejemplo, hay una sencilla base de datos (en este ejemplo, de MySQL) llamada "Empresa" compuesta por dos tablas: "Tipo cliente" y "Cliente"; "Tipo cliente" tiene las columnas "id" y "tipo", mientras que a tabla "Cliente" posee las columnas "id", "cliente", "tipo" y "volume".

  Los datos en ambas tablas serían los siguientes:

  En primer lugar, se debe crear un archivo de PHP, llamado "config.php", con los datos de conexión con la base de datos, que contendrá el siguiente texto:
<?php
// ********** Inicializamos datos de MySQL para las consultas ***
$servidor = "localhost"; //se selecciona el servidor
$usuario = "root"; //se selecciona el usuario
$contraseña = "abc123."; //se selecciona la contraseña
$bd = "empresa"; //se selecciona la BD
// ********** Fin de inicializar datos ***/
?>


  A continuación, se creará un archivo de PHP, llamado "datos.php", que incluya el fichero anterior, que se conecte con la base de datos "Empresa", que seleccione a todos los clientes y los muestre en una tabla con toda su información, que seleccione a los clientes de tipo 1 y muestre su nombre y su volumen en una tabla, y que cierre la base de datos. Este fichero tendrá el siguiente texto:
<!DOCTYPE html>
<html>
  <head>
          <meta charset="UTF-8">
          <title>Consulta de Usuarios</title>
  </head>
  <body>
     <?php
              require_once("config.php");


              function mostrarTabla($res) {
                      $fila = mysqli_fetch_assoc($res);
                      echo "<table>";
                      echo "<tr>";
                      $claves = array_keys($fila);
                      for ($i = 0; $i < count($claves); $i++) {
                            echo "<th>";
                            echo $claves[$i];
                            echo "</th>";
                      }
                     do {
                            echo "<tr>";
                            foreach ($fila as $valor) {
                                 echo "<td> $valor </td>";
                            }
                            echo "<tr>";
                    } while ($fila = mysqli_fetch_assoc($res));
                    echo "<br>";
                    echo "</tr>";
                    echo "</table>";
              }


              //Se abre la conexión
             $bdat = mysqli_connect($servidor, $usuario, $contraseña, $bd);


             if ($bdat) {
                   mysqli_query($bdat, "set names 'utf8'");
                   //Para que se muestren las tildes correctamente


                  echo "La conexión se  ha establecido con éxito.<br/>";



                 $consulta = "SELECT * FROM clientes";
                 $res = mysqli_query($bdat, $consulta);


                 if ($res) {
                       mostrarTabla($res);
                 } else {
                        echo "Se ha producido un error en la consulta <br>";
                 }


                $consulta = "SELECT * FROM clientes WHERE tipo = 1";
                $res = mysqli_query($bdat, $consulta);


                if ($res) {
                      mostrarTabla($res);
                } else {
                       echo "Se ha producido un error en la consulta <br>";
                }
              //Se cierra la conexión
                mysqli_close($bdat);
             } else {
                    echo "Error al establecer la conexión con el servidor MySQL <br>";
             }
     ?>
  </body>
</html>


  Seguidamente, se creará un fichero de PHP, denominado "insercion.php", donde se mostrará un formulario que inserte datos en la tabla de clientes. Para el tipo de cliente se mostrará una lista desplegable cpn los nombres de los tipos de cliente posible. Dicho archivo tendrá el siguiente texto:
<!DOCTYPE html>
<html>
  <head>
         <meta charset="UTF-8">
         <title>Inserción de Usuarios</title>
  </head>
  <body>
    <?php


             require_once("config.php");
             //Se abre la conexión
             $bdat = mysqli_connect($servidor, $usuario, $contrasinal, $bd);


             $select = "";
             $primero = true;
             if ($bdat) {
                   mysqli_query($bdat, "set names 'utf8'"); //Para que se muesstren las tildes correctamente


                        $consulta = "SELECT id,tipo FROM tipocliente";
                        $res = mysqli_query($bdat, $consulta);


                        if ($res) {
                             while ($fila = mysqli_fetch_array($res,MYSQLI_NUM)) {
                                   //echo $valor;
                                  if ($primero) {
                                          $select .= "<option selected value='".$fila[0]."' >".$fila[1]."</option>";
                                                     $primero = false;
                                  } else {
                                                     $select .= "<option value='".$fila[0]."'>".$fila[1]."</option>";
                                            }
                             }
                            echo "<form action='$_SERVER[PHP_SELF]' method='post' enctype='application/x-www-form-urlencoded'>";
                           echo "Cliente: <input type='text' size='30' name='cliente' required/> <br />";
                           echo "Tipo: <select name='tipo'>";
                           echo $select;
                           echo "</select> <br />";
                           echo "Volume: <input type='number' name='volume' required/><br />";
                           echo "<input type='submit' name ='insertar' value='InsertarDatos'>";
                           echo "</form>";


                           if (!empty($_POST['insertar'])) {
                              $consulta = "INSERT INTO clientes (cliente,tipo,volume)('".$_POST['cliente']."',".$_POST['tipo'].",".$_POST['volume'].")";
                              echo $consulta;
                             $res = mysqli_query($bdat, $consulta);
                             if (!$res) {
                                    echo "Se ha producido un error en la consulta <br>";
                             }
                           }
              } else {
                     echo "Se ha producido un error en la consulta <br>";
              }
              //Se cierra la conexión
                           mysqli_close($bdat);
              } else {
                     echo "Error al establecer la conexión con el servidor MySQL <br>";
              }
    ?>


  Acto seguido, se programará un archivo en HTML con el nombre de "indice.html". En dicho fichero se mostrará un formulario con dos botones, uno para ver los datos y otro para insertarlos. El formulario estará enlazado an archivo "gestion.php". El texto de esta página web será como el siguiente:

<!DOCTYPE html>
<html>
  <head>
          <meta charset="UTF-8">
          <title>Gestión de clientes</title>
  </head>
  <body>
          <form action="gestion.php" method="POST">
                 <input type="submit" name ="ver" value="Ver Datos">
                 <input type="submit" name ="insertar" value="Insertar Datos">
         </form>
  </body>
</html>


  Finalmente, se creará el archivo "gestion.php" a partir de "datos.php". Este fichero de PHP debe relizar las siguientes acciones:
  •   Si se pulsa el botón "Ver Datos", mostrará los datos tal y como ya lo hacía.
  •   Si se pulsa el botón "Insertar Datos", mostrará un formulario con loss campos necesarios para insertar un nuevo cliente. En lugar de mostrar el tipo de cliente como un número, deberá mostrarse el tipo de cliente en texto (contenido de la tabla "Cliente").
  Este fichero tendrá el siguiente texto:
<!DOCTYPE html>
<html>
  <head>
          <meta charset="UTF-8">
          <title>Consulta de Usuarios</title>
  </head>
  <body>
    <?php
            require_once("config.php");
             function mostrarTabla($res) {
                    $fila = mysqli_fetch_assoc($res);
                    echo "<table>";
                    echo "<tr>";
                    $claves = array_keys($fila);
                    for ($i = 0; $i < count($claves); $i++) {
                          echo "<th>";
                          echo $claves[$i];
                          echo "</th>";
                    }
                    do {
                           echo "<tr>";
                           foreach ($fila as $valor) {
                                 echo "<td> $valor </td>";
                           }
                          echo "<tr>";
                   } while ($fila = mysqli_fetch_assoc($res));
                   echo "<br>";
                   echo "</tr>";
                   echo "</table>";
              }

             //Se abre la conexión
             $bdat = mysqli_connect($servidor, $usuario, $contrasinal, $bd);

             if ($bdat) {
                 mysqli_query($bdat, "set names 'utf8'"); //Para que se muestren las tildes correctamente.

                  echo "
La conexión se ha establecido con éxito .<br/>";

                  if (!empty($_POST['ver'])) {
                        $consulta = "SELECT * FROM clientes";
                        $res = mysqli_query($bdat, $consulta);

                        if ($res) {
                             mostrarTabla($res);
                        } else {
                               echo "Se ha producido un error en la consulta <br>";
                        }

                        $consulta = "SELECT * FROM clientes WHERE tipo = 1";
                        $res = mysqli_query($bdat, $consulta);

                        if ($res) {
                             mostrarTabla($res);
                        } else {
                              echo "
Se ha producido un error en la consulta <br>";
                        }
                  } else if (!empty($_POST['insertar'])) {
                         $select = "";
                         $primero = true;

                         $consulta = "SELECT id,tipo FROM tipocliente";
                         $res = mysqli_query($bdat, $consulta);

                         if ($res) {
                             while ($fila = mysqli_fetch_array($res,MYSQLI_NUM)) {
                                  //echo $valor;
                                  if ($primero) {
                                         $select .= "<option selected value='".$fila[0]."' >".$fila[1]."</option>";
                                         $primero = false;
                                  } else {
                                            $select .= "<option value='".$fila[0]."'>".$fila[1]."</option>";
                                  }
                               }

                               echo "<form action='$_SERVER[PHP_SELF]' method='post'
enctype='application/x-www-form-urlencoded'>";
                               echo "Cliente: <input type='text' size='30' name='cliente' required/> <br />";
                                 echo "Tipo: <select name='tipo'>";
                                 echo $select;
                                 echo "</select> <br />";
                                 echo "Volume: <input type='number' name='volume' required/><br />";
                                 echo "<input type='submit' name ='insertar' value='Insertar Datos'>";
                                 echo "</form>";
                                 } else {
                                        echo "
Se ha producido un error en la consulta <br>";
                                 }
                  } else if (!empty($_POST['insertar'])) {
       $consulta = "INSERT INTO clientes (cliente,tipo,volume) values('".$_POST['cliente']."',".$_POST['tipo'].",".$_POST['volume'].")";
                               $res = mysqli_query($bdat, $consulta);

                               if ($res) {
                                   echo "Se ha insertado correctamente el cliente".$_POST['cliente'];
                               } else {
                                     echo "Se ha producido un error en la consulta <br>";
                               }
                  }
        } else {
               echo "Error al establecer la conexión con el servidor MySQL <br>";
        }
    ?>
  </body>
</html>

  Aguardo que la presente entrada haya sido del gusto del lector. De ser así, espero que éste la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.