0

`introducir la descripción de la imagen aquí

INSERTO IMAGEN DEL ERROR: esto me aparece cuando intento guardar los datos del usuario en la bd que está creando una cuenta este error me sale en casi todos los formularios, cualquier comentario que sea de utilidad será bien recibido, muchas gracias, abajo está el código de conection.php

    // CÓDIGO DE PHP
<?php 

include('conection.php'); 

$nombre = $_POST['nombre'];
$apellido = $_POST['apellido'];
$email = $_POST['email'];
$clave = $_POST['clave'];

$insert = "INSERT INTO registrar(nombre, apellido, email, clave) VALUES ('$nombre', '$apellido', '$email','$clave')";

$re = mysqli_query($con, $insert) or die ("Problemas al insertar".mysqli_error($con)); 
mysqli_close($con);

if ($re) {
    echo "<script>alert('Datos insertados con exito'); window.location='/VET/servicio.php'</script>";
}else {
    echo "<script>alert('Error, no se pudo hacer el registro'); window.history.go (-1);</script>";
}
//error or die (mysqli_error());
//error or die ("Problemas al insertar".mysqli_error($con));
?>

    // código html
    <h3>REGISTRATE</h3>
    <form action="crear.php" method="post">
    <input type="text" name="nombre" class="campos" placeholder="Ingresa tu nombre">
    <input type="text" name="apellido" class="campos" placeholder="Ingresa tu apellido">
    <input type="email" name="email" class="campos" placeholder="Ingresa tu email">
    <input type="password" name="clave" class="campos" placeholder="Ingresa tu clave">
    <input type="submit" value="registrar" class="boton">
        <p><a href="index.html">Ya tengo cuenta</a></p>
    </form>

//Código de conection.php

    <?php 
/*$servername = "localhost"; // Nombre/IP del servidor
$database = "veterinaria"; // Nombre de la BBDD
$username = "root"; // Nombre del usuario
$password = ""; // Contraseña del usuario*/

$con = mysqli_connect("localhost", "root", "", "vet");

if (!$con) {
    die("La conexión ha fallado: " . mysqli_connect_error());
}
//echo "Conexión satisfactoria";
mysqli_close($con);


?>
BetaM
  • 30,571
  • 7
  • 32
  • 50
  • eso usé, mira las capturas... – ManuelSuarez Aug 02 '21 at 14:56
  • Sí, también hice eso pero sale el mismo error – ManuelSuarez Aug 02 '21 at 15:39
  • Muéstranos el contenido de tu archivo `conection.php` pulsando en [edit]. Por otra parte, NADA que tenga que ver con la conexión puede ser usado una vez ésta se haya cerrado. Significa que es erróneo intentar esto: `if ($re) {` después de haber cerrado la conexión. Los resultados de `mysqli` son recursos que necesitan de la conexión para usarlos. Si quieres usarlos a posteriori deberás leerlos/guardarlos en un objeto de PHP (variable). – A. Cedano Aug 02 '21 at 15:41
  • ya inserté el código de la conexión – ManuelSuarez Aug 02 '21 at 15:47
  • Exacto, estás cerrando la conexión en el archivo `conection.php`, debes quitar esta línea: `mysqli_close($con);` de lo contrario la conexión no existirá nunca. – A. Cedano Aug 02 '21 at 15:48
  • ¡Gracias, si funcionó! – ManuelSuarez Aug 02 '21 at 15:51

1 Answers1

0

Primeramente, debes quitar esta línea del archivo conection.php:

//echo "Conexión satisfactoria";
mysqli_close($con);  #BORRA esta línea

Los archivos que incluyes se ejecutan completos, por lo tanto la conexión estará SIEMPRE cerrada.

En segundo lugar, mysqli_query devuelve por lo general un recurso (aunque en consultas de tipo INSERT sólo devuelve TRUE o FALSE), acostumbra siempre a cerrar la conexión cuando hayas terminado de trabajar con los datos (a no ser que guardes los resultados en otra variable/objeto de PHP).

Además, el éxito de una consulta INSERT no indica necesariamente que se hayan insertado datos, debes verificar las filas afectadas.

Puedes mejorar el código así:

$insert = "INSERT INTO registrar(nombre, apellido, email, clave) VALUES ('$nombre', '$apellido', '$email','$clave')";

if ( mysqli_query($con, $insert) && mysqli_affected_rows($con) > 0 ) {
    $outPut =  "<script>alert('Datos insertados con exito'); window.location='/VET/servicio.php'</script>";
} else {
    $outPut = "<script>alert('Error, no se pudo hacer el registro'); window.history.go (-1);</script>";
}
#Ya terminamos, cerramos la conexión
mysqli_close($con);
echo $outPut;

Algunas recomendaciones:

  1. Tu código es altamente vulnerable a ataques de Inyección SQL. Considera usar consultas preparadas para dar seguridad a tu código. La Inyección SQL supone un problema gravísimo de seguridad.

  2. En una fase más avanzada de tu código deberías evitar la mezcla de código PHP con Javascript, optando por el uso de Ajax por ejemplo.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221