Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wysyłanie formularza, mysql i php

Jest tu kilka rzeczy nie tak.

Używasz niewłaściwych identyfikatorów dla Twoich kolumn w (i będących cudzysłowami):

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

usuń je

(id, username, password, email)

lub użyj backticków

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

mysql_error() powinien był rzucić Ci błąd, ale nie z powodu:

  • Mieszasz interfejsy API MySQL z mysqli_ do połączenia, a następnie mysql_ w zapytaniu.

Te dwa różne interfejsy API nie mieszają się ze sobą.

Użyj mysqli_ wyłącznie i zmień obecne zapytanie na:

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

i zmień mysql_error() do mysqli_error($connect)

jako przeróbkę tego bloku:

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

Wystarczy przetestować błąd, wprowadź zmiany, jak opisałem powyżej, zachowując cytaty wokół swoich kolumn tak, jak masz je teraz. Zobaczysz wtedy błąd, który zgłosi MySQL. Następnie możesz zrobić to, co już opisałem powyżej i usunąć cudzysłowy wokół nazw kolumn lub zastąpić je backtickami.

W samouczku, który widziałeś, mogły być używane znaki wsteczne, ale prawdopodobnie nie były wystarczająco rozpoznawalne, abyś mógł stwierdzić, że rzeczywiście były to znaki wsteczne, a nie pojedyncze cudzysłowy.

Jednak Twój obecny kod jest otwarty na wstrzyknięcie SQL . Użyj mysqli z przygotowanymi zestawieniami lub PDO z przygotowanymi oświadczeniami , są znacznie bezpieczniejsze .

Zauważyłem, że możesz przechowywać hasła w postaci zwykłego tekstu. Jeśli tak jest, jest to wysoce odradzane.

Zalecam użycie CRYPT_BLOWFISH lub PHP 5.5 password_hash() funkcjonować. Dla PHP <5.5 użyj password_hash() compatibility pack .

Ponadto zamiast robić:

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

Zamiast tego powinieneś sprawdzać błędy, tak jak stwierdza instrukcja

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

Więc w twoim przypadku:

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

Edytuj: i zmieniłem action="register.php" do action="" ponieważ używasz całego kodu na tej samej stronie.

<!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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączenie się z MySQL za pomocą Groovy

  2. Format daty i godziny Mysql dodaje 10 minut

  3. Jak pobrać każdy N-ty rekord z tabeli?

  4. CakePHP używający wielu baz danych dla modeli

  5. Zapisz pliki CSV w bazie danych mysql