#php #mysql
#php #mysql
Вопрос:
Как мне получить fname
результат SQL-запроса и сохранить его $_SESSION['fname']
.
<?php
include('init.php');
session_start();
if(isset($_POST))
{
$loginemail=$_POST["loginemail"];
$loginpassword=$_POST["loginpassword"];
$fname="";
$sql = "select count(*),fname from users where password='$loginpassword' and email='$loginemail'";
$result=mysqli_query($con,$sql);
if($result){
$response =array();
while($row=mysqli_fetch_array($result))
{
array_push($response,array("Count"=>$row[0],"name"=>$row[1]));
}
$_SESSION["fname"]=$fname;
echo json_encode(array("server_response"=>$response),JSON_FORCE_OBJECT);
}
else{
echo "error";
}
mysqli_close($con);
}
?>
Это мой php-код для получения count и fname (username) из базы данных с помощью sql-запроса
init.php имеет сведения о подключении
моя цель здесь получить fname используя emailid и пароль
я получаю счетчик который всегда равен 1 в соответствии с моими ограничениями базы данных и fname я хочу объявить переменную сеанса следующим образомfname
как мне декодировать массив, чтобы получить fname
заранее спасибо
Комментарии:
1. ПРЕДУПРЕЖДЕНИЕ : написать свой собственный уровень управления доступом непросто, и есть много возможностей сделать это неправильно. Пожалуйста, не пишите свою собственную систему аутентификации, когда любая современная платформа разработки , такая как Laravel , поставляется со встроенной надежной системой аутентификации . По крайней мере, следуйте рекомендуемым рекомендациям по безопасности и никогда не храните пароли в виде обычного текста .
2. ПРЕДУПРЕЖДЕНИЕ : при использовании
mysqli
вы должны использовать параметризованные запросы иbind_param
добавлять пользовательские данные в свой запрос. НЕ используйте для этого интерполяцию или конкатенацию строк, поскольку вы создали серьезную ошибку SQL-инъекции . НИКОГДА не помещайте$_POST
$_GET
данные или непосредственно в запрос, это может быть очень вредно, если кто-то попытается использовать вашу ошибку.
Ответ №1:
Кажется, вы не присваиваете значение $fname
<?php
include('init.php');
session_start();
if(isset($_POST))
{
$loginemail=$_POST["loginemail"];
$loginpassword=$_POST["loginpassword"];
$fname="";
$sql = "select count(*),fname from users where password='$loginpassword' and email='$loginemail'";
$result=mysqli_query($con,$sql);
if($result){
$response =array();
while($row=mysqli_fetch_array($result))
{
array_push($response,array("Count"=>$row[0],"name"=>$row[1]));
//
// try assign $fname here if you want the first you can
//
if($fname ==""){
$fname = $row[1];
}
//
}
$_SESSION["fname"]=$fname;
echo json_encode(array("server_response"=>$response),JSON_FORCE_OBJECT);
}
else{
echo "error";
}
mysqli_close($con);
}
?>
Ответ №2:
Поскольку вы создаете ассоциативный массив, вам необходимо получить доступ к Count и name в качестве ключей. Нравится:
foreach($response as $key => $value) {
echo "Key=" . $key . ", Value=" . $value;
echo "<br/>";
}
Но если вы уверены, что всегда будете получать одну строку, почему бы вам просто не сохранить их в скалярных переменных, таких как $count и $ fname, и внутри вашего кода сделать это:
$count; $fname = "";
while($row=mysqli_fetch_array($result))
{
$count = $row[0];
$fname = $row[1];
}