Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Gửi biểu mẫu, mysql và php

Có một số điều sai ở đây.

Bạn đang sử dụng sai số nhận dạng > cho các cột của bạn trong (và được trích dẫn):

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

loại bỏ chúng

(id, username, password, email)

hoặc sử dụng dấu nền

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

mysql_error() lẽ ra bạn phải gặp lỗi, nhưng không phải vì:

  • Bạn đang trộn các API MySQL với mysqli_ để kết nối với mysql_ trong truy vấn của bạn.

Hai API khác nhau đó không trộn lẫn với nhau.

Sử dụng mysqli_ độc quyền và thay đổi truy vấn hiện tại của bạn thành:

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

và thay đổi mysql_error() tới mysqli_error($connect)

như một bản viết lại cho khối đó:

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

Chỉ để kiểm tra lỗi, thực hiện các thay đổi như tôi đã nêu ở trên, trong khi vẫn giữ các dấu ngoặc kép xung quanh các cột của bạn theo cách bạn có hiện tại. Sau đó, bạn sẽ thấy lỗi mà MySQL sẽ ném ra. Sau đó, bạn có thể làm như tôi đã nêu ở trên và xóa dấu ngoặc kép xung quanh tên cột hoặc thay thế chúng bằng dấu gạch ngược.

Hướng dẫn mà bạn đã xem có thể sử dụng rất tốt các dấu ngoặc kép, nhưng có lẽ không đủ phân biệt để bạn nói rằng chúng thực sự là dấu ngoặc kép chứ không phải dấu ngoặc kép.

Tuy nhiên, mã hiện tại của bạn được mở cho SQL injection . Sử dụng mysqli với các tuyên bố được chuẩn bị sẵn hoặc PDO với các báo cáo đã chuẩn bị sẵn , chúng an toàn hơn nhiều .

Tôi nhận thấy rằng bạn có thể đang lưu trữ mật khẩu ở dạng văn bản thuần túy. Nếu đúng như vậy, rất không khuyến khích.

Tôi khuyên bạn nên sử dụng CRYPT_BLOWFISH hoặc password_hash() của PHP 5.5 hàm số. Đối với PHP <5.5, hãy sử dụng password_hash() compatibility pack .

Ngoài ra, thay vì làm:

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

Thay vào đó, bạn nên kiểm tra lỗi, giống như trạng thái thủ công

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

Vì vậy, trong trường hợp của bạn:

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

Chỉnh sửa: và tôi đã thay đổi action="register.php" thành action="" vì bạn đang sử dụng toàn bộ mã bên trong cùng một trang.

<!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. Cách thay thế mẫu regex trong MySQL

  2. Lưu trữ dữ liệu được mã hóa base64 dưới dạng kiểu dữ liệu BLOB hoặc TEXT

  3. CHỌN các giá trị DISTINCT sau một JOIN

  4. Bộ kết quả tham gia MYSQL kết quả bị xóa trong IN () trong mệnh đề where?

  5. MySQL có thể sử dụng Chỉ mục khi có OR giữa các điều kiện không?