sql >> Database >  >> RDS >> Mysql

Formulier indienen, mysql en php

Er zijn een paar dingen mis hier.

Je gebruikt de verkeerde identifiers voor uw kolommen in (en zijnde aanhalingstekens):

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

verwijder ze

(id, username, password, email)

of gebruik backticks

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

mysql_error() had je een fout moeten geven, maar dat gebeurde niet vanwege:

  • Je mixt MySQL API's met mysqli_ om verbinding mee te maken, dan mysql_ in uw zoekopdracht.

Die twee verschillende API's vermengen zich niet met elkaar.

Gebruik mysqli_ exclusief en verander uw huidige vraag in:

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

en verander mysql_error() naar mysqli_error($connect)

als een herschrijving voor dat blok:

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

Alleen om de fout te testen, breng de wijzigingen aan zoals ik net hierboven heb geschetst, terwijl u de aanhalingstekens rond uw kolommen houdt zoals u die nu hebt. U zult dan de fout zien die MySQL zal veroorzaken. Je kunt dan doen wat ik hierboven al heb uiteengezet en de aanhalingstekens rond de kolomnamen verwijderen of ze vervangen door backticks.

De tutorial die je zag, gebruikte misschien backticks, maar was waarschijnlijk niet duidelijk genoeg om te zien dat het inderdaad backticks waren en geen enkele aanhalingstekens.

Uw huidige code staat echter open voor SQL-injectie . Gebruik mysqli met voorbereide verklaringen , of BOB met voorbereide verklaringen , ze zijn veel veiliger .

Ik heb gemerkt dat u wachtwoorden in platte tekst opslaat. Als dit het geval is, wordt dit ten zeerste afgeraden.

Ik raad je aan om CRYPT_BLOWFISH te gebruiken of PHP 5.5's password_hash() functie. Gebruik voor PHP <5.5 het password_hash() compatibility pack .

Ook, in plaats van te doen:

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

U zou in plaats daarvan op fouten moeten controleren, net zoals in de handleiding staat

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

Dus in jouw geval:

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

Bewerken: en ik heb action="register.php" changed gewijzigd naar action="" omdat je de hele code op dezelfde pagina gebruikt.

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


  1. Selecteer gegevens tussen een datum/tijdbereik

  2. .NET MySqlCommand @ placeholder conflicteert met MySQL-variabele

  3. Waarschuwing:mysqli_connect():(HY000/1049):Onbekende database alleen in mac-terminal

  4. Gebruikerswaarschuwingen beheren