viernes, 24 de febrero de 2012

Insertar datos en la base de datos MySql con PHP


En esta ocasión vamos a ver un ejemplo de cómo insertar datos en una base de datos Mysql con PHP,  para ellos usaremos la sentencia INSERT y el objeto mysql de PHP.

Suponiendo que tu base de datos se llama "clientes" y que tienes una tabla llamada "datosclientes" con seis campos "id_cliente", "nombre", "apellidos", "direccion", "localidad", "edad".

Bien, pues teniendo la tabla con los campos correctos, vamos a ver un ejemplo práctico en el cual habrá un formulario para agregar nuevos registros a la tabla, todos los pasos a seguir están comentados en el código, también he querido hacer mención al filtrado de datos para dar seguridad a la aplicación, ya que a la hora de trabajar con bases de datos esta es la labor más importante, el formulario será enviado, se capturará el valor de cada uno de los campos y tendrán que pasar un filtro de expresiones regulares a través de la función preg_match, si pasa todos los filtros el registro será guardado en la tabla y mostrado por pantalla, de lo contrario se mostrará un error y el registro no será guardado, ya que el filtro de seguridad no ha sido pasado.

Debajo de las imágenes se encuentra el código de ejemplo.

Imágenes del ejemplo ...

Rellenando el formulario
Cliente insertado correctamente
Error al pasar el filtro de Expresiones regulares


 
Código del ejemplo, al archivo lo puedes llamar insertar.php ...

<?php
/* By http://php-estudios.blogspot.com */

//En un principio la variable $tabla que muestra el nuevo registro debe declararse y estar en blanco.
$tabla = "";
//En un principio la variable $error que muestra el posible error al filtrar los datos debe declararse y estar en blanco.
$error = "";

/* Si el formulario es enviado */
if (isset($_POST["insertar"]))
{
//Almacenar los campos en variables
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$direccion = $_POST['direccion'];
$localidad = $_POST['localidad'];
$edad = $_POST['edad'];


//Filtrar los datos por motivos de seguridad
//Este proceso siempre hay que llevarlo a cabo al hacer consultas a la base de datos
//Para cada campo aplicaré un filtro de no pasarlo no se realizará la inserción del nuevo registro.

if (!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $nombre)) //letras latinas + espacios
{
$error = "Ha ocurrido un error, datos no permitidos.";
}
else if(!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $apellidos)) //letras latinas + espacios
{
$error = "Ha ocurrido un error, datos no permitidos.";
}
else if(!preg_match("/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s\_\-\/\º\ª\.\,\:\;]+$/", $direccion)) //letras latinas + números + espacios + algunos caracteres más
{
$error = "Ha ocurrido un error, datos no permitidos.";
}
else if(!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $localidad)) //letras latinas + espacios
{
$error = "Ha ocurrido un error, datos no permitidos.";
}
else if(!preg_match("/^[0-9]+$/", $edad)) //Sólo números
{
$error = "Ha ocurrido un error, datos no permitidos.";
}
else
{
//Datos de conexión a la base de datos.
$mysql_usuario = "root";
$mysql_password = "password";
$mysql_host = "localhost";
$mysql_database = "clientes";

//Conectar
$conexion = mysql_connect($mysql_host, $mysql_usuario, $mysql_password, true);

//Seleccionamos la base datos y la conexión, die para mostrar el error si existe algún problema.
mysql_select_db($mysql_database, $conexion) || die('No pudo conectarse: '.mysql_error());


//Preparar la consulta para insertar los datos
$consulta = "INSERT INTO datosclientes (nombre, apellidos, direccion, localidad, edad)";
$consulta .= "VALUES ('$nombre', '$apellidos', '$direccion', '$localidad', '$edad')";

//Ejecutar la consulta para guardar el registro
$resultado = mysql_query($consulta, $conexion) or die(mysql_error());

//Mostrar el registro nuevo en una tabla
$tabla = "<table border='1' cellpadding='10'>\n";
$tabla .= "<tr><th>Nombre</th><th>Apellidos</th><th>Dirección</th><th>Localidad</th><th>Edad</th></tr>\n";
$tabla .= "<tr>
          <td>$nombre</td>
          <td>$apellidos</td>
          <td>$direccion</td>
		  <td>$localidad</td>
		  <td>$edad</td>
		  </tr>\n";
$tabla .= "</tabla>\n";

//Cerrar la conexión
mysql_close($conexion);
}
}
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Insertar datos en la base de datos MySql con PHP</title>
</head>
<body>
<H3>INSERTAR CLIENTE</H3>

<!-- Para mostrar un posible error al filtrar los datos -->
<p style="color: red;"><?php echo $error; ?></p>
<!-- Para mostrar el nuevo registro -->
<p style="color: blue;"><?php echo $tabla; ?></p>

<!-- con $_SERVER["PHP_SELF"] estamos diciendo que la consulta será enviada al mismo archivo desde donde se envía el formulario, es decir éste -->
<form action="<?php $_SERVER["PHP_SELF"]; ?>" method="post">
<table border="0">
<tr>
<td>Nombre:</td>
<td><input type="text" name="nombre"></td>
</tr>
<tr>
<td>Apellidos:</td>
<td><input type="text" name="apellidos"></td>
</tr>
<tr>
<td>Dirección:</td>
<td><input type="text" name="direccion"></td>
</tr>
<tr>
<td>Localidad</td>
<td><input type="text" name="localidad"></td>
</tr>
<tr>
<td>Edad</td>
<td><input type="text" name="edad" maxlength="3"></td>
</tr>
<tr>
<td>
<!-- El envío de este campo 'insertar' será capturado por $_POST para realizar la consulta -->
<input type="hidden" name="insertar">
</td>
<td><input type="submit" value="Enviar"></td>
</tr>
</table>
</form>
</body>
</html>

4 comentarios:

Anónimo dijo...

La verdad es que tu ejemplo es el más claro, pero sigue sin funcionar algo tan simple como meter un registro en una tabla.

El error permanentemente es:

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')VALUES..."

No sé si es la versión de MySql o qué es lo que sucede, pero he probado cuanto código encontré en la web y varios libros pero resulta imposible y siempre me encuentro con el mismo error.

Te agradezco desde ya por cualquier ayuda me puedas ofrecer.

pablook@outlook.com

Manu dijo...

Puede ser la versión, prueba a instalar la última versión de xampp, el código tal cual debe de funcionar.

Anónimo dijo...

La verdad que es excelente el tutorial pase semanas viendo cosas en la web que no servian , PERO ESTO SI FUNCIONA USTED ES GENIAL SEÑOR

Manu dijo...

Bueno, estos son sólo ejemplos de como realizar consultas a la base de datos, en php un cosa muy importante es la seguridad, para ello existen funciones para validar los datos y evitar la inyección sql y los ataques xss, os aconsejo que veáis los siguientes posts ...

http://php-estudios.blogspot.com.es/2013/02/validacion-de-datos-traves-de-patrones.html

http://php-estudios.blogspot.com.es/2013/02/prevencion-de-ataques-xss-con-php.html

También funciones como htmlspecialchars() | htmlentities() | addslashes() | strip_tags() | str_replace() y algunas más que son muy útiles para crear una aplicación segura.