В настоящее время я пытаюсь создать скрипт регистрации для ввода регистрационной информации в мою таблицу UserAccount. Ниже моя связь:
<?php //database preparation $usr = "username"; $pwd = "password"; //put your php password $host = "computing"; $db = $usr; $conn = mysqli_connect($host, $usr, $pwd, $db); if (!$conn){ echo "<p>server connection error: mysqli_connect_error()</p>"; } $_SESSION['conn'] = $conn; //database connection status transfer; ?>
И вот регистрация у меня с трудом.
<?php include "conn.php"; $email_address = $_POST['email_address']; $password = md5($_POST['password']); $f_name = $_POST['f_name']; $s_name = $_POST['s_name']; $insert = 'INSERT INTO UserAccount(email_address, password, f_name, s_name) VALUES("'.$email_address.'","'.$password.'","'.$f_name.'","'.$l_name.'")'; mysql_query($insert); ?>
При вводе информации я получаю пустую страницу и никаких записей данных в таблицу, мне было интересно, почему?
У вас есть опечатка
mysql_query($insert);
должен быть mysqli_query($insert);
Вы не можете делать запросы mysql на соединение mysqli.
Вы должны убедиться, что ваш запрос даже выполняется? Какова ошибка, возвращаемая вашим запросом? Пытаться
mysqli_query($conn,$insert) or die(mysqli_error($conn));
Это скажет вам, почему данных нет. Хорошее время, когда вы перешли на MYSQLI или PDO
РЕДАКТИРОВАТЬ:
Также вы используете переменную $l_name
которая ранее не была объявлена. В вашем запросе должно быть $s_name
. Скорее всего, ваша таблица настроена так, чтобы НЕ принимать пустое значение для l_name, и это не так.
Никогда не используйте функции mysql_ таким образом! Шутки в сторону!
Решение:
Из всего этого я бы предложил перейти к PDO:
try { //open connection, this is different than in the old functions $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); //***running query //**step1: create statement $stmt = $dbh->prepare('INSERT INTO UserAccount(email_address, password, f_name, s_name) VALUES( :email, :password,:f_name,:l_name)'); //notice parameters prefixed with ':' //**step2: bind values (be sure to also check out the bindParameter() function too!) $stmt->bindValue(':email', $email_address); $stmt->bindValue(':password', $password); $stmt->bindValue(':f_name', $f_name); $stmt->bindValue(':l_name', $l_name); //**step3: exexcute statement $stmt->execute(); $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); }
Попробуйте следующее, изменив одинарные и двойные кавычки:
$insert = "INSERT INTO UserAccount(email_address, password, f_name, s_name) VALUES('".$email_address."','".$password."','".$f_name."','".$l_name."')";
Это хорошая практика! Страница будет пустой, но по крайней мере вы должны получить запись в таблице.
Также проверьте, должно ли имя базы данных $db
быть таким же, как $usr
? Это верно?
$db = $usr;
Разве это не должно быть чем-то вроде
$db = "databaseName";
Заключительная мысль:
Существует переменная переменной ключевого слова transfer;
это выглядит смешно. Из-за установки отчетов / обработки ошибок php это может привести к ошибке, но не показывать / не сообщать об этом на пустой странице. Используйте echo
в определенных местах в коде, чтобы увидеть, где он остановлен.
Если это будет $transfer;
и должен ли он получить переменную?
Другая мысль состоит в том, что если у вас $_SESSION['conn']
то должен быть session_start();
сразу после открытия <?php
. Это может привести к тому, что conn.php завершится с ошибкой, нарушив INSERT
.