sql >> Base de Datos >  >> RDS >> Mysql

Envío de formulario, mysql y php

Hay algunas cosas mal aquí.

Estás usando los identificadores para sus columnas en (y siendo comillas):

('id', 'username', 'password', 'email')

eliminarlos

(id, username, password, email)

o usar acentos graves

(`id`, `username`, `password`, `email`)

mysql_error() Debería haberte arrojado un error, pero no lo hizo debido a:

  • Está mezclando las API de MySQL con mysqli_ para conectarse, entonces mysql_ en su consulta.

Esas dos API diferentes no se mezclan entre sí.

Usa mysqli_ exclusivamente y cambie su consulta actual a:

if($query = mysqli_query($connect, "INSERT...

y cambiar mysql_error() a mysqli_error($connect)

como una reescritura para ese bloque:

if(isset($_POST["submit"])){
    if($query = mysqli_query($connect,"INSERT INTO users ('id', 'username', 'password', 'email') VALUES('', '".$username."', '".$password."', '".$email."')")){
        echo "Success";
    }else{
        echo "Failure" . mysqli_error($connect);
    }
}

Solo para probar el error, realice los cambios como se describió anteriormente, mientras mantiene las comillas alrededor de sus columnas como las tiene ahora. Luego verá el error que arrojará MySQL. Luego puede hacer lo que ya describí anteriormente y eliminar las comillas alrededor de los nombres de las columnas, o reemplazarlas con acentos graves.

El tutorial que vio puede muy bien usar acentos graves, pero probablemente no se distinguían lo suficiente como para que pudiera decir que eran realmente acentos graves y no comillas simples.

Sin embargo, su código actual está abierto a inyección de SQL . Use mysqli con declaraciones preparadas , o PDO con declaraciones preparadas , son mucho más seguros .

Me di cuenta de que puede estar almacenando contraseñas en texto sin formato. Si este es el caso, se desaconseja encarecidamente.

Te recomiendo que uses CRYPT_BLOWFISH o password_hash() de PHP 5.5 función. Para PHP <5.5 use el password_hash() compatibility pack .

Además, en lugar de hacer:

$connect = mysqli_connect("localhost", "root", "") or die("Could not connect to server!");
mysqli_select_db($connect, "php_forum") or die("Could not connect to database!");

En su lugar, debería comprobar si hay errores, tal como indica el manual

$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link)); 

Así que en tu caso:

$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect)); 

Editar: y cambié action="register.php" a action="" ya que estás usando el código completo dentro de la misma página.

<!DOCTYPE HTML>
<html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <form action="" method="POST">
            Username: <input type="text" name="username">
            <br/>
            Password: <input type="password" name="password">
            <br/>
            Confirm Password: <input type="password" name="confirmPassword">
            <br/>
            Email: <input type="text" name="email">
            <br/>
            <input type="submit" name="submit" value="Register"> or <a href="login.php">Log in</a>
        </form>
    </body>
</html>
<?php
    require('connect.php');
    $username = $_POST['username'];
    $password = $_POST['password'];
    $confirmPassword = $_POST['confirmPassword'];
    $email = $_POST['email'];

    if(isset($_POST["submit"])){
        if($query = mysqli_query($connect,"INSERT INTO users (`id`, `username`, `password`, `email`) VALUES ('', '".$username."', '".$password."', '".$email."')")){
            echo "Success";
        }else{
            echo "Failure" . mysqli_error($connect);
        }
    }
?>