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

0

Я пытаюсь сделать страницу входа для своего сайта, и он работал на 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();
?>'

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

  • 0
    Никогда не храните простые текстовые пароли! Пожалуйста, используйте встроенные функции PHP для обеспечения безопасности пароля. Если вы используете версию PHP ниже 5.5, вы можете использовать пакет совместимости password_hash (). Убедитесь, что вы не экранировали пароли или не использовали какой-либо другой механизм их очистки перед хэшированием. Это меняет пароль и вызывает ненужное дополнительное кодирование.
  • 1
    Какую фактическую ошибку вы получаете? Что вы сделали, чтобы устранить это? Вы убедились, что ваше имя базы данных является правильным и база данных действительно существует?
Показать ещё 3 комментария
Теги:

3 ответа

2
Лучший ответ

Существует четыре способа выбора базы данных:

  • в вызове 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()

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

И, пожалуйста, узнайте, как солить и хэш-пароли.

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

Здесь исправление:

<?php

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

...
0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню