2015-10-06 6 views
2

Я могу читать из базы данных, но когда я вставляю данные в базу данных, он сказал «Успешно зарегистрирован!», Затем я проверяю свою базу данных, она не вставляла никаких данных.Не могу вставить в PHP в базу данных MYSQL

register.php

<!DOCTYPE HTML> 
    <html> 
<head> 
<title>Register page</title> 
<br> 
<font size="5" color="black"><b>&nbsp;Register Page<br><br></b></font> 
</head> 

<body background=" images/background.jpg"> 
<form action="index.php"> 
    <input type="submit" value="Home"> 
</form> 
<br> 
<form action="Register.php" method="POST"> 
<fieldset> 
    <legend>Enter your information</legend> 
    <table> 
     <tr> 
      <td>Username:</td> 
      <td><input type="text" name="username" required="required"/><br></td> 
     </tr> 
     <tr> 
      <td>Password:</td> 
      <td><input type="text" name="password" required="required"/><br></td> 
     </tr> 
     <tr> 
      <td>Email:</td> 
      <td><input type="text" name="email" required="required"/><br></td> 
     </tr> 
     <tr> 
      <td>First Name:</td> 
      <td><input type="text" name="firstname" required="required"/><br></td> 
     </tr> 
     <tr> 
      <td>Last Name:</td> 
      <td><input type="text" name="lastname" required="required"/><br></td> 
     </tr> 
     <tr> 
      <td>Date of Birth:</td> 
      <td><input type="date" name="dateofbirth" required="required" ><br></td> 
     </tr> 
     <tr> 
      <td><input type="submit" value="Register"/></td> 
    </tr> 

    </table> 
</fieldset> 
</form> 


</body> 
</html> 
<?php 
if($_SERVER["REQUEST_METHOD"] == "POST") 
    { 
     $username = mysql_real_escape_string($_POST['username']); 
     $password = mysql_real_escape_string($_POST['password']); 
     $firstname = $_POST['firstname']; 
     $lastname = $_POST['lastname']; 
     $email  = mysql_real_escape_string($_POST['email']); 
     $dateofbirth= $_POST['dateofbirth']; 
     echo "user is :".$username; 
     $bool = true; 
     mysql_connect("localhost", "root", "") or die(mysql_error()); 
     mysql_select_db("userdata") or die(mysql_error("Cannot Connect to Database")); 
     $query = mysql_query("SELECT * FROM users"); 
     while($row = mysql_fetch_array($query)) 
       { 
        $table_users = $row['username']; 
        if($username == $table_users) 
         { 
          $bool = false; 
          Print '<script>alert("username is used!");</script>'; 
          Print '<script>window.location.assign("Register.php");</script>'; 

         } 
       } 
     if($bool) 
     { 
     mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"); 
     Print '<script>alert("Successfully Registered!");</script>'; 
     Print '<script>window.location.assign("Register.php");</script>'; 
     } 


} 
?> 

РЕШИТЬ: Я использовал PDO вместо mysql_ и mysqli_.

+5

Вы получили недостающее одиночные кавычки перед ' 'username'' (и вы на самом деле не нужно инкапсулировать имена столбцов, и в любом случае использовать обратные элементы) в запросе на ввод. Вы не проверяете, была ли вставка успешной. Вы используете устаревшие ** mysql _ ** функции вместо ** mysqli _ ** –

+2

Почему вы все еще используете mysql_connect, он уже устарел, используйте PDO вместо этого. –

+0

Я не знаю, как использовать PDO, надеюсь, если вы поможете мне, если это будет лучше – w3000cpu

ответ

2

Исправьте SQL:

mysql_query("INSERT INTO users (username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"); 

К

mysql_query("INSERT INTO users (username,password,email,firstname,lastname,dateofbirth) VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"); 

Объяснение:

В MySQL имена полей не заключаются в одинарные кавычки. Скорее они могут быть заключены с backticks (`), чтобы избежать конфликтов с зарезервированными ключевыми словами.

Примечание: Не использовать функции mysql_*. Они устарели, вы вместо этого используете mysqli_* или PDO.

+0

Я исправляю ее, она все та же проблема – w3000cpu

+0

PDO решить мою проблему спасибо – w3000cpu

-1

Обновите нижний код

if($bool) 
    { 
     mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"); 
     Print '<script>alert("Successfully Registered!");</script>'; 
     Print '<script>window.location.assign("Register.php");</script>'; 
    } 
+0

По-прежнему такая же проблема – w3000cpu

+0

@WaleedWalaaAldeanAbuZaid отредактируйте ваш вопрос и напишите, какой код вы используете сейчас –

+0

Done I put al my code – w3000cpu

0

Вы пропустили открытие 'перед именем в вашем MySQL Query. Не уверен, что это проблема, но это вызовет проблемы.

+0

Я исправляю эту проблему еще – w3000cpu

0

Это не относится к самой проблеме ВСТАВИТЬ, а к процедуре для проверки, если имя пользователя существует в базе данных:

... 
$bool = true; 
$query = mysql_query("SELECT * FROM users"); 
while($row = mysql_fetch_array($query)) 
{ 
    $table_users = $row['username']; 
    if($username == $table_users) 
    { 
     $bool = false; 
     Print '<script>alert("username is used!");</script>'; 
    } 
} 
if($bool) 
{ 
... 

Вместо переборе в коде через все записи из таблицы пользователей, вы можете используйте SQL, чтобы сделать для вас работу:

... 
$username_esc = mysql_real_escape_string($username); 
$query = mysql_query("SELECT * FROM users where username = '$username_esc'"); 
... 

, а затем только проверьте, возвращает ли запрос какую-либо строку или нет.

Надеюсь, это поможет.

+0

Я проверил, я могу читать строки из базы данных, но я не могу вставить, он сказал «успешно зарегистрировать», но когда я проверить базу данных, без изменений – w3000cpu

0

Я проверил ваш код и обнаружил, что соединение было неправильным, а во-вторых, вы используете цитату в имени поля, которое является неправильным синтаксисом, поэтому запрос не выполнялся. И мое мнение заключается в использовании mysqli_connect вместо mysql_connect, оно устарело и устарело. Я обновил свой код, надеюсь, это поможет вам:

<?php 
//your values from post I just assign test for all 
$username = 'test';//mysql_real_escape_string($_POST['username']); 
$password = 'test';//mysql_real_escape_string($_POST['password']); 
$firstname = 'test';//mysql_real_escape_string($_POST['firstname']); 
$lastname = 'test';//mysql_real_escape_string($_POST['lastname']); 
$email  = 'test';//mysql_real_escape_string($_POST['email']); 
$dateofbirth= 'test';//mysql_real_escape_string($_POST['dateofbirth']); 
$bool = true; 

//database connection 
$servername = "localhost"; 
$username1 = "root"; 
$password1 = ""; 
$db = 'test_001'; 

// Create connection 
$conn = new mysqli($servername, $username1, $password1, $db); 

$result = $conn->query("SELECT * FROM users"); 

while($row = $result->fetch_assoc()) 
{ 
    $table_users = $row['username']; 
    if($username == $table_users) 
    { 
     $bool = false; 
     Print '<script>alert("username is used!");</script>'; 
     //Print '<script>window.location.assign("Register.php");</script>'; 

    } 
} 

if($bool) 
{ 
    //mysql_query("INSERT INTO users ('username','password','email','firstname','lastname','dateofbirth') VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"); 

    $query = "INSERT INTO users (username,password,email,firstname,lastname,dateofbirth) VALUES ('$username','$password','$email','$firstname','$lastname','$dateofbirth')"; 
    $x = $conn->query($query); 
    if ($x) 
     Print '<script>alert("Successfully Registered!");</script>'; 
    Print '<script>window.location.assign("Register.php");</script>'; 
} 
+0

спасибо, но когда я использую этот код, он не печатает «Успешно зарегистрированный» и ту же проблему – w3000cpu

+0

сначала проверить, что mysql - это состояние соединения, связано оно или нет, используя ** connection_status() **, если connection_status() возвращает 1, значит, правильно подключен, затем повторяет ваш запрос и пытается запустить его в sql или комментировать здесь (после эхо-копирования и вставки как комментарий) – hvs9

+0

PDO решить эту проблему – w3000cpu

0

Вы должны удалить кавычки вокруг имен полей, поэтому ваши поиски должны быть

INSERT INTO пользователей (имя пользователя, пароль, адрес электронной почты, ПгвЬЫате , lastname, dateofbirth) VALUES ('$ username', '$ password', '$ email', '$ firstname', '$ lastname', '$ dateofbirth')

Я бы также рекомендовал использовать обертку DB чтобы автоматически избежать ваших переменных.

http://www.chris-shaw.com/b/How-to-connect-to-a-database-using-a-class

+0

спасибо за ссылку, это поможет:) – w3000cpu

0

PDO решить эту проблему MYSQL сделал много проблем, но когда я использовал PDO он решил проблему

Смежные вопросы