0

Tengo un sistema sencillo para guardar datos en una base de datos a traves del siguiente formulario:

Conexion.php

<?php
$host="localhost";
$usua="root";
$pass="";
$base="yerson"; //base de datos//
$cone = new mysqli($host,$usua,$pass,$base);

if ($cone->connect_error) 
{
    die('No se pudo conectar a la base de datos:'.$cone->connect_error);
}

?>

Formulario.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>formulario</title>
<style type="text/css">
body {
    background-image: url(1.png);
}
.yer {
    font-family: Arial Black, Gadget, sans-serif;
}
.yer {
    font-family: Arial Black, Gadget, sans-serif;
}
.ter {
    font-family: Verdana, Geneva, sans-serif;
}
.yer {
    font-family: Arial Black, Gadget, sans-serif;
}
.yer {
    font-family: Arial Black, Gadget, sans-serif;
}
.yer {
    font-family: Arial Black, Gadget, sans-serif;
}
</style>
</head>

<body>
<center>
  <h1><font color="#00FF00" class="yer">Bienvenido a Nuestro Sistema de Registro 
</font></h1></center>
<marquee>
<h2><font color="#FFFF00"> <span class="yer">REGISTRATE.. YA</span>.</font></h2></marquee>
<form action="procesar.php"method="post" name="form">
<table width"200" border="0">
<tr>
<font color="#00FF00">
<td class="yer">nombres</td></font>
<td><input type="text" name="nombres" /></td>
</tr>
<tr>
<font color="#FFFF00"><td class="yer">apellidos</td></font>
<td><input type="text" name="apellidos" /></td>
</tr>
<tr>
<font color="#00FF00"><td class="yer">telefono</td></font>
<td><input type="text" name="telefono" /></td>
</tr>
<tr>
<font color="#FFFF00"><td class="yer">correo_electronico</td></font>
<td><input type="text" name="correo_electronico" /></td>
</tr>
<tr>
<font color="#00FF00"><td class="yer">ciudad</td></font>
<td><input type="text" name="ciudad" /></td>
</tr>
<tr>
<td>&nbsp;</td>
<center><td><input type="submit" value="insertar dactos" /> <input type="reset" value="limpiar" /> </td></center>
</tr>

</table>
</form>
</body>
</html>

Procesar.php

    <?php
        include ("conexion.php"); 
        if (isset($_POST ['nombres'] ) && !empty ($db_POST ['nombres']) &&
        isset($_POST ['apellidos'] ) && !empty ($db_POST ['apellidos'] ) &&
        isset($_POST ['telefono'] ) && !empty ($db_POST ['telefono'] ) &&
        isset($_POST ['correo_electronico'] ) && !empty ($db_POST ['correo_electronico'] ) &&
        isset($_POST ['ciudad'] ) && !empty ($db_POST ['ciudad'] ))
        {

        $nomb=$_REQUEST['nombres'];
        $apel=$_REQUEST['apellidos'];
        $tele=$_REQUEST['telefonos'];
        $corr=$_REQUEST['correo_electronico'];
        $ciud=$_REQUEST['ciudad'];
        mysqli_query("INSERT INTO datos (nombres,apellidos,correo_electronico,telefonos,ciudad) 
        VALUES ('$nomb','$apel','$tele','$corr','$ciud') ") or die (mysql_error()); 
echo "datos insertados correctamente";
}else{
    echo "problemas al insertar los datos";
}

        ?>

El problema: luego de procesar la informacion la pagina da el error de datos y no guarda nada en la base de datos

  • 1
    Creas dos veces una conexión a la base de datos... luego haces en el fichero `conexion.php` dos returns... mmm... usas `mysql`... creo que deberías replantearte todo el código otra vez y leerte bien la documentación (HTML, PHP, CSS) y aprender: [mysqli](http://php.net/manual/es/mysqli.prepare.php) o mejor [PDO](http://php.net/manual/es/pdo.prepared-statements.php) con sentencias preparadas y como evitar [Inyección SQL](https://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL)... – Black Sheep Nov 10 '16 at 00:53
  • muchas gracias, lo que ocurre es que es un programa de un amigo de mi universidad, pero no tengo el como probarlo todavia, deberia borrar borrar el connect del procesar y dejar solo el include, verdad? – Victor Alejandro Alvarado Vilo Nov 10 '16 at 01:04
  • Tienes que eliminar los dos returns en el fichero `conexion.php` y eliminar en el fichero `procesar.php` eliminas toda la fila `$conexion = ....;` y `mysql_select_db( ......);` y cambia lo al menos todo a `mysqli`... – Black Sheep Nov 10 '16 at 01:20
  • ya cambie eso, ahora para lograr guardar los datos, uso un get y guardo cada valor de las cajas de texto en variables y se la paso a esta sentencia: mysqli_query("INSERT INTO datos (nombres,apellidos,telefono,correo_electronico,ciudad) VALUES $nombres, $apellidos,$numero. – Victor Alejandro Alvarado Vilo Nov 10 '16 at 01:46

2 Answers2

1

Como ya te han mencionado estas mezclando un poco tu código.

El primer error que veo en procesar.php es que no pasas correctamente el valor por la función empty().

//Tu código.
!empty ($db_POST['nombres'])
        ^^^^^^^^

//Actualizado
!empty($_POST['nombres'])

Segundo error, tu sentencia nunca va insertar los datos, ya que se te ha olvidado añadir el parámetro de tu conexión a la función mysqli_query(), y en die() utilizas de uno mysql*

//Tu código
mysqli_query("INSERT INTO datos nombres,apellidos,correo_electronico,telefonos,ciudad) VALUES
           ^^^^
'$nomb','$apel','$tele','$corr','$ciud') ") or die (mysql_error());
                                                      ^^^^^^ ^^^^

Otra cosa tener en cuenta es que creas correctamente tu conexión por estilo por procedimientos, que es la que estas usando.

Podrías mejorar y optimizar tu código de la siguiente manera:

conexion.php (Estilo por procedimientos).

<?php
$cone = @mysqli_connect('localhost', 'root', '', 'yerson');

if (!$cone) {
    exit('Error de conexión: ' . mysqli_connect_error());
}
?>

Formulario HTML

<form method="POST" action="procesar.php">

   <input type="text" name="nombres" placeholder="Nombre" />
   <input type="text" name="apellidos" placeholder="Apellidos" />
   <input type="text" name="telefono"  placeholder="Telefono" />
   <input type="text" name="correo_electronico" placeholder="Correo electronico" />
   <input type="text" name="ciudad" placeholder="Cuidad" />

   <input type="submit" name="insertar_datos" value="insertar dactos" /> 
   <input type="reset" value="limpiar" /> 

</form>

procesar.php

<?php
//Reseteamos variables.
$mensaje = $nombres = $apellidos = $telefono = $correo_electronico = $ciudad = NULL;

//Comprobamos si nuestro formulario está definido y no es NULL (mediante el identificador de nuestro botón de envió).
if (isset($_POST['insertar_datos'])) {

    //Comprobamos que nuestros inputs no estén vacíos.
    if (empty($_POST['nombres']) && empty($_POST['apellidos']) && empty($_POST['telefono']) && empty($_POST['correo_electronico']) && empty($_POST['ciudad'])) {
        $mensaje = 'Por favor todos los campos son obligatorios.'
    } else {
        //Requeremos conexión.
        require_once'conexion.php';

        //Obtenemos datos, para mayor seguridad utiliza la función mysqli_real_escape_string.
        $nombres = mysqli_real_escape_string($cone,$_POST['nombres']);
        $apellidos = mysqli_real_escape_string($cone,$_POST['apellidos']);
        $telefono = mysqli_real_escape_string($cone,$_POST['telefono']);
        $correo_electronico = mysqli_real_escape_string($cone,$_POST['correo_electronico']);
        $ciudad = mysqli_real_escape_string($cone,$_POST['cuidad']);

        //Si nuestras variables estan definidas, continuamos...
        if ($nombres && $apellidos && $telefono && $correo_electronico && $ciudad) {
            //Insertamos nuestros datos a la Base de datos.
            $sentencia = mysqli_query($cone, "INSERT INTO datos (nombres,apellidos,correo_electronico,telefonos,ciudad) VALUES ('$nombres','$apellidos','$telefono','$correo_electronico','$ciudad')"); 

            //Comprobamos que se ejecuto correctamente.
            if(!$sentencia) { #falso.
               printf("Error en ejecutar sentencia: %s\n", mysqli_error($cone));
            } else { #verdadero.
                //Cierra la conexión
                mysqli_close($cone);
                $mensaje = 'Los datos se insertaron correctamente.'
            }

        }
    }
} else { unset($_POST); }

//Alertas.
echo $mensaje;

?>

Aun así, te aconsejo que utilices sentencias preparadas o PDO, para tener mayor seguridad ante ataques de inyección SQL.

¡Un saludo!

Diablo
  • 6,417
  • 2
  • 21
  • 40
0

Lo que pasa es que estas usando la interfaz MySQLi orientado a objetos, es decir estás usando $cone = new mysqli($host,$usua,$pass,$base); y para guardar estás usando la otra interfaz MySQLi procedimental mysqli_query("INSERT INTO datos ...)

Para guardar los datos debes usar la forma orientada a objetos, es decir, debes cambiar mysqli_query() por:

$sql = "INSERT INTO datos (nombres,apellidos,correo_electronico,telefonos,ciudad) 
    VALUES ('{$nomb}','{$apel}','{$tele}','{$corr}','{$ciud}')";
$insertar = $cone->query($sql);
if($insertar === TRUE){
    echo "Datos insertados";
}else{
    echo $cone->error;
}
$cone->close();

Además tienes otro error en la validación de los datos, ya que estás usando !empty($db_POST['nombres']. Tiene que corregirlo, debería ser !empty($_POST['nombres']). Ya que la variable $db_POST no existe