sql >> Database teknologi >  >> RDS >> Mysql

Indsendelse af formular, mysql og php

Der er et par ting galt her.

Du bruger de forkerte identifikatorer for dine kolonner i (og er anførselstegn):

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

fjerne dem

(id, username, password, email)

eller brug backticks

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

mysql_error() skulle have givet dig en fejl, men det gjorde den ikke på grund af:

  • Du blander MySQL API'er med mysqli_ at oprette forbindelse til, derefter mysql_ i din forespørgsel.

Disse to forskellige API'er blander sig ikke med hinanden.

Brug mysqli_ udelukkende og ændre din nuværende forespørgsel til:

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

og ændre mysql_error() til mysqli_error($connect)

som en omskrivning for den 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);
    }
}

Bare for at teste fejlen, foretag ændringerne, som jeg skitserede lige ovenfor, mens du beholder citaterne omkring dine kolonner, som du har det nu. Du vil derefter se fejlen, som MySQL vil kaste. Du kan derefter gøre, som jeg allerede har skitseret ovenfor, og fjerne anførselstegnene omkring kolonnenavnene, eller erstatte dem med backticks.

Den tutorial, du så, kan meget vel bruge backticks, men var sandsynligvis ikke skelnelig nok til, at du kunne fortælle, at de faktisk var backticks og ikke enkelte anførselstegn.

Din nuværende kode er dog åben for SQL-injektion . Brug mysqli med udarbejdede udtalelser , eller BOB med forberedte erklæringer , de er meget sikrere .

Jeg har bemærket, at du muligvis gemmer adgangskoder i almindelig tekst. Hvis dette er tilfældet, frarådes det stærkt.

Jeg anbefaler, at du bruger CRYPT_BLOWFISH eller PHP 5.5's password_hash() fungere. Til PHP <5.5 skal du bruge password_hash() compatibility pack .

Også i stedet for at gøre:

$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 i stedet tjekke for fejl, ligesom manualen siger

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

Så i dit tilfælde:

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

Rediger: og jeg ændrede action="register.php" til action="" da du bruger hele koden på samme side.

<!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. Hvordan biner man vilkårligt i MySQL?

  2. Brug af boolesk udtryk i rækkefølge efter klausul

  3. Magento-produkter importeres fra databasen ved hjælp af SQL-forespørgsel

  4. SQLite trigger