Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengirimkan formulir, mysql dan php

Ada beberapa hal yang salah di sini.

Anda menggunakan pengenal untuk kolom Anda di (dan menjadi tanda kutip):

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

hapus mereka

(id, username, password, email)

atau gunakan backtick

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

mysql_error() seharusnya memberi Anda kesalahan, tetapi itu bukan karena:

  • Anda menggabungkan API MySQL dengan mysqli_ untuk terhubung, lalu mysql_ dalam kueri Anda.

Kedua API yang berbeda tersebut tidak saling bercampur.

Gunakan mysqli_ secara eksklusif dan ubah kueri Anda saat ini menjadi:

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

dan ubah mysql_error() ke mysqli_error($connect)

sebagai penulisan ulang untuk blok itu:

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

Hanya untuk menguji kesalahan, buat perubahan seperti yang saya uraikan di atas, sambil menjaga tanda kutip di sekitar kolom Anda seperti yang Anda miliki sekarang. Anda kemudian akan melihat kesalahan yang akan dilontarkan MySQL. Anda kemudian dapat melakukan seperti yang telah saya uraikan di atas dan menghapus tanda kutip di sekitar nama kolom, atau menggantinya dengan backticks.

Tutorial yang Anda lihat mungkin menggunakan backtick dengan sangat baik, tetapi mungkin tidak cukup dapat dibedakan sehingga Anda dapat mengatakan bahwa itu benar-benar backtick dan bukan tanda kutip tunggal.

Namun, kode Anda saat ini terbuka untuk injeksi SQL . Gunakan mysqli dengan pernyataan yang telah disiapkan , atau PDO dengan pernyataan yang disiapkan , mereka jauh lebih aman .

Saya perhatikan Anda mungkin menyimpan kata sandi dalam teks biasa. Jika ini masalahnya, sangat tidak disarankan.

Saya sarankan Anda menggunakan CRYPT_BLOWFISH atau PHP 5.5 password_hash() fungsi. Untuk PHP <5.5 gunakan password_hash() compatibility pack .

Selain itu, alih-alih melakukan:

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

Anda harus memeriksa kesalahan sebagai gantinya, seperti yang dinyatakan manual

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

Jadi dalam kasus Anda:

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

Sunting: dan saya mengubah action="register.php" ke action="" karena Anda menggunakan seluruh kode di dalam halaman yang sama.

<!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. bagaimana cara memeriksa nol atau tidak jika tipe data mysql adalah stempel waktu dengan nilai default 0000-00-00 00:00?

  2. Bagaimana cara mencegah logout otomatis di codeigniter?

  3. KESALAHAN! Manajer MySQL atau file PID server tidak dapat ditemukan! QNAP

  4. cara menggunakan LIKE dengan nama kolom

  5. Koneksi MySQL tidak berfungsi:2002 Tidak ada file atau direktori seperti itu