Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Enviando formulário, mysql e php


Há algumas coisas erradas aqui.

Você está usando os identificadores errados> para suas colunas em (e sendo aspas):
('id', 'username', 'password', 'email')

Remova eles
(id, username, password, email)

ou use backticks
(`id`, `username`, `password`, `email`)

mysql_error() deveria ter gerado um erro, mas não aconteceu por causa de:
  • Você está misturando APIs MySQL com mysqli_ para se conectar, então mysql_ em sua consulta.

Essas duas APIs diferentes não se misturam.

Use mysqli_ exclusivamente e altere sua consulta atual para:
if($query = mysqli_query($connect, "INSERT...

e altere mysql_error() para mysqli_error($connect)

como uma reescrita para esse bloco:
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);
    }
}

Só para testar o erro, faça as alterações conforme descrevi acima, mantendo as aspas em torno de suas colunas do jeito que você tem agora. Você verá então o erro que o MySQL lançará. Você pode fazer como já descrevi acima e remover as aspas em torno dos nomes das colunas ou substituí-las por acentos graves.

O tutorial que você viu pode muito bem usar acentos graves, mas provavelmente não eram distinguíveis o suficiente para você dizer que eles eram realmente acentos graves e não aspas simples.

No entanto, seu código atual está aberto para injeção de SQL . Use mysqli com declarações preparadas , ou PDO com declarações preparadas , são muito mais seguros .

Percebi que você pode estar armazenando senhas em texto simples. Se este for o caso, é altamente desencorajado.

Eu recomendo que você use CRYPT_BLOWFISH ou password_hash() do PHP 5.5 função. Para PHP <5.5, use o password_hash() compatibility pack .

Além disso, em vez de fazer:
$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!");

Em vez disso, você deve verificar se há erros, assim como o manual afirma
$link = mysqli_connect("myhost","myuser","mypassw","mybd") 
or die("Error " . mysqli_error($link)); 

Então no seu caso:
$connect = mysqli_connect("localhost", "root", "","php_forum") 
or die("Error " . mysqli_error($connect)); 

Editar: e alterei action="register.php" para action="" já que você está usando o código inteiro dentro da mesma 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);
        }
    }
?>