Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Formular einreichen, mysql und php

Hier stimmt einiges nicht.

Sie verwenden die falschen Identifikatoren für Ihre Spalten in (und Anführungszeichen):

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

entfernen

(id, username, password, email)

oder Backticks verwenden

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

mysql_error() hätte Ihnen einen Fehler ausgeben sollen, aber das war nicht der Fall, weil:

  • Sie mischen MySQL-APIs mit mysqli_ zu verbinden, dann mysql_ in Ihrer Anfrage.

Diese beiden unterschiedlichen APIs vermischen sich nicht miteinander.

Verwenden Sie mysqli_ ausschließlich und ändern Sie Ihre aktuelle Abfrage in:

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

und ändern Sie mysql_error() zu mysqli_error($connect)

als Umschreibung für diesen Block:

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);
    }
}

Nur um den Fehler zu testen, Nehmen Sie die Änderungen vor, wie ich sie oben beschrieben habe, und behalten Sie dabei die Anführungszeichen um Ihre Spalten herum so bei, wie Sie sie jetzt haben. Sie sehen dann den Fehler, den MySQL auswirft. Sie können dann wie oben beschrieben vorgehen und die Anführungszeichen um die Spaltennamen entfernen oder sie durch Backticks ersetzen.

Das Tutorial, das Sie gesehen haben, hat möglicherweise Backticks verwendet, war aber wahrscheinlich nicht deutlich genug, um zu erkennen, dass es sich tatsächlich um Backticks und nicht um einfache Anführungszeichen handelt.

Ihr aktueller Code ist jedoch offen für SQL-Injection . Verwenden Sie mysqli mit vorbereiteten Statements , oder PDO mit vorbereiteten Anweisungen , sie sind viel sicherer .

Mir ist aufgefallen, dass Sie Passwörter möglicherweise im Klartext speichern. Wenn dies der Fall ist, wird dringend davon abgeraten.

Ich empfehle Ihnen, CRYPT_BLOWFISH zu verwenden oder password_hash() von PHP 5.5 Funktion. Verwenden Sie für PHP <5.5 das password_hash() compatibility pack .

Anstatt Folgendes zu tun:

$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!");

Sie sollten stattdessen nach Fehlern suchen, genau wie im Handbuch angegeben

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

Also in deinem Fall:

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

Bearbeiten: und ich habe action="register.php" geändert zu action="" da Sie den gesamten Code innerhalb derselben Seite verwenden.

<!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);
        }
    }
?>