#php #mysql
#php #mysql
Вопрос:
Моя проблема в том, что когда я получаю <?= $_SESSION['username'];?>
, отображается только первая буква строки, а не значение db. Моя проблема в том, что я справляюсь $sql['username']
но можете ли вы сказать мне, как сделать правильно?
<?
// Username and password sent from form
$myusername = $_POST['myusername'];
$mypassword = $_POST['mypassword'];
// Connect to DB
$con = mysqli_connect("localhost", "root", "logmeinnow", "form");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to DB". mysqli_error();
}
//Encrypt passowrd
$encrypt_password = md5($mypassword);
// Query from Database
$sql = "SELECT * FROM users WHERE username='$myusername' and password='$encrypt_password'";
$result = mysqli_query($con, $sql);
if(!$result) {
die('Sql error:'.mysqli_error($con));
}
// Counting table row
$count = mysqli_num_rows($result);
//If result matched your Username and Password table row must be 1 row.
if ($count>0) {
// Register $myusername, $mypassword and redirect to file index.php
$_SESSION['is_login'] = true;
$_SESSION['user_id'] = 0; #from db
$_SESSION['username'] = $sql['username']; #from db
$_SESSION['first_name'] = $sql['first_name'];
$_SESSION['last_name'] = $sql['last_name'];
header("Location:db.php");
die();
} else {
// Redirect user to login page
header("Location:login.php?error_id=1");
}
?>
Комментарии:
1. Ик! Вы уязвимы для SQL-инъекции !
2. Где ваша строка, извлекающая запись,
$row = mysqli_fetch_row($result)
?3.
session_start()
4. вы проверили значение в своей базе данных? Пожалуйста, проверьте это. Если все в порядке, пожалуйста, проверьте тип данных имени пользователя и его длину. Надеюсь, это поможет.
5. $_SESSION [‘username’] = $ sql [‘username’]; где ваша выборка?
Ответ №1:
этого не должно быть $sql['username'];
вместо этого я считаю, что это должно быть $result['username'];
И один из лучших способов использования mysqli — это
<?php
$sql = "SELECT * FROM users WHERE username='$myusername' and password='$encrypt_password'";
if ($result = $mysqli->query($sql)) {
while($obj = $result->fetch_object()){
$_SESSION['username'] = $obj->username;
$_SESSION['first_name'] = $obj->first_name;
$_SESSION['last_name'] = $obj->last_name;
}
}
$result->close();
unset($obj);
unset($sql);
unset($query);
?>
и также следует добавить session_start () в самом верху страницы
Комментарии:
1. Зачем оператору добавлять значения в
$line
, когда он хочет добавить их в качестве значений сеанса?….2.
$_SESSION['username'] = $sql['username'];
нужно изменить .. вместо этого используйте$_SESSION['username'] = $result['username'];
А также нужноsession_start()
вверху
Ответ №2:
я думаю, из-за этого
$_SESSION['username'] = $sql['username'];
где ваш код выборки?
попробуйте сделать это вместо
$_SESSION['username']=$_POST['myusername'];