lookwhosback Ответов: 2

Как подключить базу данных phpmyadmin к моему сайту с помощью PHP


Я создал базу данных в phpmyadmin, но когда я устанавливаю соединение с этой базой данных через php, я получаю ошибку подключения. Я перепроверил код и не думаю, что есть какие-то проблемы с кодом в php.

Что я уже пробовал:

<?php 
define('DB_HOST', 'localhost'); 
define('DB_NAME', 'alabdouli_users'); 
define('DB_USER','safeer123'); 
define('DB_PASSWORD','******'); 
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("Failed to connect to MySQL: " . mysqli_error()); 
$db=mysqli_select_db(DB_NAME,$con) or die("Failed to connect to database: " . mysqli_error()); 
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 ($query)or die(mysqli_error()); 
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("SELECT * FROM websiteusers WHERE userName = '$_POST[user]' AND pass = '$_POST[pass]'") or die(mysqli_error()); 
if(!$row = mysqil_fetch_array($query) or die(mysqli_error())) { newuser(); 
} 
else 
{ 
echo "SORRY...YOU ARE ALREADY REGISTERED USER..."; 
} } } 
if(isset($_POST['submit'])) 
{ 
SignUp(); 
} 
?>

[no name]

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

lookwhosback

не удалось подключиться к базе данных

Jochen Arndt

Где он терпит неудачу и что такое сообщение об ошибке?

[no name]

lookwhosback,пожалуйста, не публикуйте Вопросы/Проблемы в качестве решения

[no name]

Не могли бы вы предоставить трассировку стека?

2 Ответов

Рейтинг:
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.

Рейтинг:
1

lookwhosback

<div id="Sign-Up"> 
<fieldset style="width:30%">
<legend>Registration Form</legend> 
<table border="0"> 
<tr> 
<form method="POST" action="signup.php"> 
<td>Name</td>
<td> <input type="text" name="name"></td> 
</tr> 
<tr> <td>Email</td>
<td> <input type="text" name="email"></td> 
</tr> 
<tr> 
<td>UserName</td>
<td> <input type="text" name="user"></td> 
</tr> 
<tr> <td>Password</td>
<td> <input type="password" name="pass"></td> 
</tr> 
<tr> 
<td>Confirm Password </td>
<td><input type="password" name="cpass"></td> 
</tr> 
<tr> 
<td><input id="button" type="submit" name="submit" value="Sign-Up"></td> 
</tr> 
</form> 
</table> 
</fieldset> 
</div>

это мой html код в котором когда я нажимаю кнопку регистрации и он должен выполнить signup.php, но я получаю ошибку из моего php-кода, говорящую: "не удалось подключиться к базе данных"


[no name]

Пожалуйста, не публикуйте свои проблемы в качестве решения.