2016-02-23 3 views
-1

Я пытаюсь вставить имя пользователя, пароль и электронную почту в базу данных mysql. База данных работает нормально, так как я могу извлечь данные из нее и использовать ее на странице входа, но я не могу создать новые строки и вставить данные. SQL-база данных построена так:PHP не входит в базу данных mysql

Table: peter 
Primary Key: user_id - Int(5), Not Null, Auto Increment 
Attributes: 
username - VarChar(35), Not Null 
password - VarChar(35), Not Null 
email - VarChar(35), Not Null 

Это мой код

<?php 
include("config.php"); 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    $mypassword = mysqli_real_escape_string($db,$_POST['password']); 
    $myemail = mysqli_real_escape_string($db,$_POST['email']); 
    $tbl_name = "peter"; 

    $sql = "INSERT INTO $tbl_name (`username`, `password`, `email`) VALUES ($username, $password, $email)"; 

    header("location: login.php"); 
} 
?> 
<html> 
    <body> 
     <form action = "" method = "post"> 
      <label>UserName: </label><input type = "text" name = "username" class = "box" required/><br /><br /> 
      <label>Password: </label><input type = "password" name = "password" class = "box" required/><br/><br /> 
      <label>Email: </label><input type = "email" name = "email" class = "box" required/><br/><br /> 
      <input type = "submit" value = " Submit "/><br /> 
     </form> 
    </body> 
</html> 

Я пробовал много исправлений, в том числе из других Q & A нитками, но ни один из них не имеют работал. Поэтому я надеюсь, что кто-то еще увидит проблему.

Edit: Это файл config.php:

<?php 
    define('DB_SERVER', 'xxx'); 
    define('DB_USERNAME', 'xxx'); 
    define('DB_PASSWORD', 'xxx'); 
    define('DB_DATABASE', 'xxx'); 
    $db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE); 
?> 
+0

Вы должны сделать больше, чем просто написать запрос в текстовом ва riable. Этот запрос должен быть выполнен, то есть выпущен в базу данных, которая будет запущена! [Читать руководство для PDO] (http://php.net/manual/en/book.pdo.php) или [MYSQLI_] (http://php.net/manual/en/book.mysqli.php) _SO не является учебным провайдером_ ** Не испытывайте соблазнов использовать расширение базы данных MYSQL_ ** – RiggsFolly

+0

Могу ли я спросить: действительно ли вы подключаетесь к базе данных где-то ранее в своем коде? – RiggsFolly

+0

Включено в: include ("config.php"); – Sirpedro

ответ

1

Это не достаточно просто код запроса в переменная. Как только это будет сделано, вы должны отправить этот запрос в базу данных для выполнения.

Как ваш запрос является ВСТАВИТЬ, что в основном все, что вам нужно будет сделать

Кроме того, необходимо использовать правильные имена переменных для данных, которые вы хотите передать в запрос, т.е. переменных из результата из mysqli_real_escape_string()

<?php 
include("config.php"); 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $myusername = mysqli_real_escape_string($db,$_POST['username']); 
    $mypassword = mysqli_real_escape_string($db,$_POST['password']); 
    $myemail = mysqli_real_escape_string($db,$_POST['email']); 
    $tbl_name = "peter"; 


    $sql = "INSERT INTO $tbl_name 
        (`username`, `password`, `email`) 
      VALUES ('$myusername', '$mypassword','$myemail')"; 

    $res = mysqli_query($db,$sql); 

    if ($res) { 
     header("location: login.php"); 
     exit; 
    } else { 
     echo mysqli_error($db); 
     exit; 
    } 
} 
?> 
<html> 
    <body> 
     <form action = "" method = "post"> 
      <label>UserName: </label><input type = "text" name = "username" class = "box" required/><br /><br /> 
      <label>Password: </label><input type = "password" name = "password" class = "box" required/><br/><br /> 
      <label>Email: </label><input type = "email" name = "email" class = "box" required/><br/><br /> 
      <input type = "submit" value = " Submit "/><br /> 
     </form> 
    </body> 
</html> 

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

<?php 
include("config.php"); 
if($_SERVER["REQUEST_METHOD"] == "POST") { 
    $tbl_name = "peter"; 

    $sql = "INSERT INTO $tbl_name 
        (`username`, `password`, `email`) 
      VALUES (?,?,?)"; 

    $stmt = mysqli_prepare($db,$sql); 

    mysqli_bind_param($stmt, 'sss', $_POST['username'], 
            $_POST['password'], 
            $_POST['email'] 
        ); 

    $res = mysqli_stmt_execute($stmt); 

    if ($res) { 
     header("location: login.php"); 
     exit; 
    } else { 
     echo mysqli_stmt_error ($stmt); 
     exit; 
    } 
} 
?> 
<html> 
    <body> 
     <form action = "" method = "post"> 
      <label>UserName: </label><input type = "text" name = "username" class = "box" required/><br /><br /> 
      <label>Password: </label><input type = "password" name = "password" class = "box" required/><br/><br /> 
      <label>Email: </label><input type = "email" name = "email" class = "box" required/><br/><br /> 
      <input type = "submit" value = " Submit "/><br /> 
     </form> 
    </body> 
</html> 
+0

Активировано для указания имен переменных в запросе;) –

+0

Решила мою проблему красиво, теперь регистрация работает отлично, спасибо! :) – Sirpedro

1

Ваши поля имеют varchar типа. Поэтому заключите их в кавычки. Также вы должны выполнить запрос, используя mysqli_query().

$sql = mysqli_query("INSERT INTO $tbl_name (`username`, `password`, `email`) VALUES ('$username', '$password', '$email')"); 
+0

Пожалуйста, не используйте расширение базы данных 'mysql_', оно устарело (ушло навсегда в PHP7) ** и, конечно же, не отвечает на вопросы, предлагающие его использование ** Особенно, если вы просто изучаете PHP, потратьте свои силы на изучение« PDO » 'или' mysqli_', [и вот некоторая помощь, чтобы решить, что использовать] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – RiggsFolly

+0

Использование параметризованного запроса также было бы хорошей идеей, поскольку этот ответ был бы приемлемым для [SQL Injection attack] (http: // stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) – RiggsFolly

+1

Пробовал это исправление, но он все равно не вставляет его в таблицу. – Sirpedro

0

RiggsFolly Как предложил в своем комментарии, вы неправильно использовали имена переменных в запросе.

Ваши имена переменных должны быть '$myusername', '$mypassword', '$myemail'

Написать свой код, как показано ниже: -

// Use single quote '' around variables in query 
$sql = "INSERT INTO $tbl_name(`username`, `password`, `email`) VALUES('$myusername', '$mypassword', '$myemail')"; 
$result = mysqli_query($db,$sql); 

// Check for query errors 
if(!$result){ 
    printf("Error: %s\n", mysqli_error($db)); 
    die; 
} 

header("location: login.php"); 
exit; // write exit after header tag to stop executuon of below code 

Надеется, что это поможет :)

+0

@downvoter: Вы должны указать ошибку. Я отредактировал свой ответ. –

+0

@RiggsFolly: Ох !! Я полностью пропустил это. Спасибо, что указали это. Я отредактировал ответ. –

+0

И я сделал джентльменскую вещь и удалил DV – RiggsFolly

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