Php не может выбрать базу данных на mysql для страницы входа

Я пытаюсь создать страницу входа для своего веб-сайта, и она работала на xampp, но когда я переключился на сервер, он не выбрал базу данных. Я также использую хостинг namecheaps. Вот мой код php: https://pastebin.com/tSBxJpy9 `

<?php

ob_start();
$host = "localhost";  
$username = "username";
$password = "password";  
$db_name = "suffix_login";
$tbl_name = "members";
$link = mysqli_connect("localhost", "username", "password", "suffix_login");


mysqli_connect("$host", "$username", "$password", "login")or die("cannot connect");
mysqli_select_db("$link" ,"$db_name")or die("cannot select DB");


$myusername=$_POST['myusernamea'];
$mypassword=$_POST['mypassworda'];


$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysqli_real_escape_string($link ,$myusername);
$mypassword = mysqli_real_escape_string($link ,$mypassword);

$sql = "SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($link ,$sql);


$count=mysqli_num_rows($result);



if ($count==1){


$_SESSION['myusername'] = $myusername;
$_SESSION['mypassword'] = $mypassword;
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}

ob_end_flush();
?>`

заранее спасибо

Никогда не храните пароли в виде обычного текста! Используйте Встроенные функции PHP для защиты паролем. Если вы используете версию PHP ниже 5.5, вы можете использовать password_hash () пакет совместимости. Убедитесь, что вы используете не избегайте паролей или используете какой-либо другой механизм очистки перед хешированием. Это приводит к изменению пароля и ненужному дополнительному кодированию.
John Conde 07.06.2018 13:44

Какую фактическую ошибку вы получаете? Что вы сделали для устранения этой проблемы? Вы проверили правильность имени вашей базы данных и действительно ли она существует?

John Conde 07.06.2018 13:44

Перепишите mysqli_connect("localhost", "username", "password", "suffix_login"); как mysqli_connect("localhost", "username", "password", "suffix_login") or die(mysqli_error()) и проверьте вывод ..

Romeo Sierra 07.06.2018 13:46

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

Michael 07.06.2018 13:47

Извините за поздний ответ, но я попытался добавить 'or die (mysqli_error ())', и он показал мне пустой экран, и перед его добавлением он сказал бы 'не могу выбрать db'

Slavsquat 07.06.2018 14:56
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы передаете строки, а не свои переменные, посмотрите:

$link = mysqli_connect("localhost", "username", "password", "suffix_login");

Также присутствует обычная уязвимость атаки SQL Injection. Попробуйте переключиться на использование подготовленных операторов и связанных параметров. Смотрите здесь https://phpdelusions.net/pdo#prepared

Ответ принят как подходящий

Выбрать базу данных можно четырьмя способами:

  • в вызове mysqli_connect () (который вы уже делаете)
  • через mysqli_select_db (), который не работает
  • внутри SQL - mysqli_query($link, "use $dbname");
  • или просто сославшись на имя базы данных в качестве префикса к таблице: SELECT * FROM my_db.a_table

Таким образом, в приведенном выше коде mysqli_select_db несколько избыточен. Но причина неудачи в том, что вы указали $link в своем вызове mysqli_select_db (), который преобразует объект $ link в виде строки и разбивает ее в процессе. Измените свой код на:

 mysqli_select_db($link,"$db_name")or die("cannot select DB");

и удалите второй вызов mysqli_connect ()

И, пожалуйста, НЕ ИСПОЛЬЗУЙТЕ здесь косые черты ().

И научитесь, пожалуйста, солить и хешировать пароли.

Извините, я не выспался, поэтому я пропустил некоторые вещи, и прямо сейчас он пытается сделать его работоспособным, а затем сделать его максимально безопасным.

Slavsquat 07.06.2018 16:37

Вот исправление:

<?php

ob_start();
$host = "localhost";  
$username = "username";
$password = "password";  
$db_name = "suffix_login";
$tbl_name = "members";
$link = mysqli_connect($host, $username, $password, $db_name);

...

Другие вопросы по теме