2014-08-30 4 views
0

Смущающий вопрос здесь, поскольку это, очевидно, что-то настолько простое, что все идет не так. (Также для тех, кто претендует на «дубликат», я потратил 3 часа на то, чтобы посмотреть соответствующие вопросы и направить многочисленные ответы на практике, но безрезультатно, отсюда и возник вопрос.)запрос не отправляется в базу данных

Я нахожусь в процесс создания регистрационной формы пользователя с использованием PHP и MySQL, все прекрасно передает, однако я не вижу значений в моей базе данных? Таким образом, очевидно, что он не представляет штраф.

ВОПРОС

Почему не подает?

Я сделал var_dump ($ _ POST); и результат:

array(4) { ["name"]=> string(14) "Foo Bar" ["email"]=> string(18) "[email protected]" ["password"]=> string(8) "foobar123" ["submit"]=> string(8) "Register" } 

Я также сделал print_r ($ query); на запросе, чтобы увидеть, что передается и результат:

INSERT INTO user_info (name, email, password) VALUES ('Foo Bar', '[email protected]', '$2y$10$36UQIGc6OwFrNs/TBfc6letRlrrdRGGoj.lh65puJElDJER08ozQe') 

Таблица user_info уже существует, и мое подключение к базе данных в порядке. Я попытался использовать обратные запятые для имен столбцов, я также пытался не использовать запятые для значений, но ничего, кажется, не отправляет.

Вот код:

HTML -

<form method="post" name="register-form" action="database.php"> 
    Name:  <input type="text" name="name"><br> 
    Email:  <input type="email" name="email"><br> 
    Password: <input type="password" name="password"> 
      <input type="submit" name="submit" value="Register" /> 
</form> 

PHP -

<?php 

require 'dbconnect.php'; 

function registerUser() { 
    $username = $_POST['name']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $hash = password_hash($password, PASSWORD_BCRYPT); 


    $mysqli = mysqli_init(); 
    $query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
    $mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

    var_dump($_POST); 
    print_r($query); 
} 

if(isset($_POST['submit']) === TRUE){ 
    registerUser(); 
} 

?> 

dbconnect.php

<?php 

$dbserver = 'localhost'; 
$dbusername = 'foo'; 
$dbpassword = 'bar'; 
$dbdatabase = 'usersdb'; 

$con = mysqli_connect($dbserver, $dbusername, $dbpassword, $dbdatabase); 

// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
?> 

Я начинаю думать, что это может быть разрешение но это на моем локальном хосте, используя XAMPP, так неуверенно это не может быть? Любая помощь будет принята с благодарностью! Спасибо.

+0

Используйте 'mysql_real_escape_string', чтобы не стать мишенью SQL инъекций. –

+0

Можно ли запустить тот же запрос из Workbench (с теми же учетными данными)? – thebjorn

+0

@KeVin Я знал, что это всплыло, я забыл упомянуть в вопросе, что у меня изначально была mysql_real_escape_string, но я взял его, чтобы я мог сделать его как можно более простым. –

ответ

1

Внутри вашей функции registerUser нет $con. создайте соединение, и ваши данные будут вставлены.

function registerUser($con) { 
    $username = $_POST['name']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $hash = password_hash($password, PASSWORD_BCRYPT); 


    $mysqli = mysqli_init(); 
    $query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
    $mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

    var_dump($_POST); 
    print_r($query); 
} 
+0

Прочитать комментарий в коде, $ con is in dbconnect .php –

+0

Почему downvote объясните, пожалуйста, –

+0

, вы должны знать переменную область до начала downvoting. чтобы использовать $ con из dbconnect.php, вы должны использовать глобальную переменную –

0

Проблема заключается здесь:

$mysqli = mysqli_init(); 
$query = "INSERT INTO user_info (name, email, password) VALUES ('$username', '$email', '$hash')"; 
$mysqli->query($con, $query); //$con referenced in dbconnect to connect to db 

Вам необходимо установить соединение с помощью mysqli_real_connect после mysqli_init или использовать конструктор new mysqli() вместо этих двух. Также $mysqli->query использует объект $mysqli и принимает только один параметр, ваш запрос. Если вы указали подключение в другом месте, вам необходимо использовать mysqli_query. См http://php.net/manual/de/mysqli.query.php

0

Это решение:

в вашем БДСВЯЗЬ.php reaplace this line

$ con = mysqli_connect ($ dbserver, $ dbusername, $ dbpassword, $ dbdatabase);

с

$ MySQLi = новый MySQLi ($ DbServer, $ dbusername, $ пароль_базы_данных, $ dbdatabase);

и reaplace содержания database.php с этим:

требует 'dbconnect.php';

$username = $_POST['name']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$hash = password_hash($password, PASSWORD_BCRYPT); 

если (Исеть ($ _ POST [ 'отправить']) === TRUE) {// $ MySQLi = mysqli_init(); $ query = "INSERT INTO user_info (имя, адрес электронной почты, пароль) VALUES ('$ username', '$ email', '$ hash')"; $ mysqli-> query ($ query); // $ жулик ссылки в БДСВЯЗЬ для подключения к БД

var_dump($_POST); 
print_r($query); 

}

это должно работать

+0

Предупреждение: mysqli :: query(): недопустимый объект или ресурс mysqli в строке 30 - строка 30 - это $ mysqli-> query ($ query); // $ con ссылается на dbconnect для подключения к db –

+0

требует 'dbconnect.php'; $ username = $ _POST ['name']; $ email = $ _POST ['email']; $ password = $ _POST ['password']; $ hash = password_hash ($ password, PASSWORD_BCRYPT); Если (isset ($ _ POST ['submit']) === TRUE) { $ query = "INSERT INTO user_info (имя, адрес электронной почты, пароль) VALUES ('$ username', '$ email', '$ хэш ")"; $ mysqli-> query ($ query); var_dump ($ _ POST); print_r ($ query); } –

+0

Попробуйте этот код, пожалуйста, и перепрыгните линию после; –

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