sql >> Databasteknik >  >> RDS >> Mysql

Skicka formulär, mysql och php

Det är några saker som är fel här.

Du använder fel identifierare för dina kolumner i (och är citattecken):

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

ta bort dem

(id, username, password, email)

eller använd backticks

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

mysql_error() borde ha gett dig ett fel, men det gjorde det inte på grund av:

  • Du blandar MySQL API:er med mysqli_ att ansluta till, sedan mysql_ i din fråga.

Dessa två olika API:er blandas inte med varandra.

Använd mysqli_ exklusivt och ändra din nuvarande fråga till:

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

och ändra mysql_error() till mysqli_error($connect)

som en omskrivning för det blocket:

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

Bara för att testa felet, gör ändringarna som jag beskrev precis ovan, samtidigt som du behåller citattecken runt dina kolumner som du har det nu. Du kommer då att se felet som MySQL kommer att ge. Du kan sedan göra som jag redan har beskrivit ovan och ta bort citattecken runt kolumnnamnen, eller ersätta dem med backticks.

Handledningen du såg kan mycket väl använda backticks, men var förmodligen inte tillräckligt särskiljbar för att du skulle säga att de verkligen var backticks och inte enstaka citattecken.

Din nuvarande kod är dock öppen för SQL-injektion . Använd mysqli med förberedda utlåtanden , eller PDO med förberedda uttalanden , de är mycket säkrare .

Jag märkte att du kanske lagrar lösenord i vanlig text. Om så är fallet är det starkt avskräckt.

Jag rekommenderar att du använder CRYPT_BLOWFISH eller PHP 5.5:s password_hash() fungera. För PHP <5.5 använd password_hash() compatibility pack .

Dessutom, istället för att göra:

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

Du bör leta efter fel istället, precis som manualen säger

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

Så i ditt fall:

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

Redigera: och jag ändrade action="register.php" till action="" eftersom du använder hela koden på samma sida.

<!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. Vad är syftet med att använda OPTION(MAXDOP 1) i SQL Server?

  2. Varför fungerar inte samtalssessionen? (kodantändare 3)

  3. mysqldump-fel:Fick paket större än max_allowed_packet'

  4. Storlek för lagring av IPv4, IPv6-adresser som en sträng