декодирование массива php для получения переменной

#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];
}