Рейтинг:
20
Jochen Arndt
Видеть PHP: mysqli::select_db - руководство пользователя[^]. Первый аргумент-это связь, а второй-имя, но вы передаете их в обратном порядке.
Так и должно быть
$db=mysqli_select_db($con,DB_NAME) or die("Failed to connect to database: " . mysqli_error());
[РЕДАКТИРОВАТЬ]
Поскольку вы используете процедурный стиль, вы должны использовать его также и для функции ошибки. Заметьте также, что
mysqli_error()
не может быть использован при сбое подключения. Вы должны использовать
mysqli_connect_error()
вместо:
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysqli_connect_error());
$db=mysqli_select_db($con,DB_NAME) or die("Failed to connect to database: " . mysqli_error($con));
[/РЕДАКТИРОВАТЬ]
[EDIT2]
И то же самое для всех других операций SQL, где вы не передали соединение/ссылку
$con
.
[/EDIT2]
lookwhosback
Большое вам спасибо за это, это так хорошо, когда кто-то впервые решил мою проблему в интернете :D Я действительно не знал, что это была проблема, которая исправила подключение к базе данных, но теперь я не знаю, почему я не получаю никакого сообщения для добавления пользователя в базу данных.
Jochen Arndt
Спасибо Вам за обратную связь и принятие моего решения.
Смотрите мой обновленный ответ. Это объясняет, почему вы не получили сообщения об ошибках PHP, а также почему запросы не работали: та же причина; вы должны использовать процедурный стиль передачи ссылки/соединения.
lookwhosback
Сэр Йохен, я решил предыдущую проблему, то есть связал базу данных с файлом php с вашей помощью. Тем не менее запросы не выполняются и пользователь не добавляется в базу данных
Jochen Arndt
См. обновление 2.
Вы должны использовать процедурный стиль везде, потому что вы изначально решили использовать этот стиль.
Так и должно быть
$data = mysqli_query($con, $query) or die(mysqli_error($con));
и тому подобное ($con
как первый/единственный параметр) для все вызовы функций mysqli.
Если затем вызов завершится неудачно, вы получите по крайней мере осмысленное сообщение об ошибке, которое поможет найти проблему, например, передать неправильные параметры или опечатки в именах таблиц или полей.
lookwhosback
Я заменил, как вы сказали, но запись все еще не добавляется, и я не получаю никакого сообщения. вот как выглядит мой код после изменения его на процедурный стиль.
<?php
define('DB_HOST', 'localhost');
define('DB_NAME', 'alabdouli_users');
define('DB_USER','safeer123');
define('DB_PASSWORD','3333333');
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysqli_connect_error());
$db=mysqli_select_db($con, DB_NAME) or die("Failed to connect to database: " . mysqli_error($con));
function NewUser()
{
$fullname = $_POST['name'];
$userName = $_POST['user'];
$email = $_POST['email'];
$password = $_POST['pass'];
$query = "INSERT INTO websiteusers (fullname,userName,email,pass) VALUES ('$fullname','$userName','$email','$password')";
$data = mysqli_query ($con, $query)or die(mysqli_error($con));
if($data)
{
echo "YOUR REGISTRATION IS COMPLETED...";
} }
function SignUp()
{
if(!empty($_POST['user'])) //checking the 'user' name which is from Sign-Up.html, is it empty or have some text
{
$query = mysqli_query($con,"SELECT * FROM websiteusers WHERE userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysqli_error($con));
if(!$row = mysqil_fetch_array($con, $query) or die(mysqli_error($con)))
{
NewUser();
}
else
{
echo "SORRY...YOU ARE ALREADY REGISTERED USER...";
} } }
if(isset($_POST['submit']))
{
SignUp();
}
?>
Jochen Arndt
Видишь ли http://php.net/manual/en/language.variables.scope.php
У вас есть функции, которые не "видят" глобальную переменную $con, но используют локальный (пустой) экземпляр.
lookwhosback
я вас не понял, не могли бы Вы уточнить?
Jochen Arndt
Переменная $con, используемая для подключения к базе данных, не видна внутри функций. Которые используют другую (локальную) переменную с тем же именем, но другим содержимым (это пустая переменная). Вы должны объявить его глобальным, как описано в ссылке, или передать в качестве параметра функции.
lookwhosback
я знаю, что прошу слишком многого, но не могли бы вы привести мне пример из моего кода, пожалуйста?
<? php
function SignUp($con)
{
if(!empty($_POST['user'])) //checking the 'user' name which is from Sign-Up.html, is it empty or have some text
{
$query = mysqli_query("SELECT * FROM websiteusers WHERE userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysqli_error($con));
if(!$row = mysqil_fetch_array($con, $query) or die(mysqli_error($con)))
{
NewUser($con);
}
else
{
echo "SORRY...YOU ARE ALREADY REGISTERED USER...";
} } }
if(isset($_POST['submit']))
{
SignUp();
}
?>
Jochen Arndt
Проверьте это шаг за шагом. Сначала поместите код ниже кода настройки вне любой функции. Если это работает, поместите его в функцию.
Эта строка подозрительна:
if(!$row = mysqil_fetch_array($con, $query) or die(mysqli_error($con)))
Это и есть "если" и "или". Что проверяется в первую очередь? Выполняется ли когда-нибудь блок if?
Я не знаю ответа, потому что никогда не использовал бы такую конструкцию.
Использовать если то вместо (успех, ошибка).
Существует также опечатка: mysqil.