Я хочу отображать сообщение о приветствии имени пользователя при входе в систему

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