-1

これがコードです!データがすでにデータベースにある場合、PHP はデータベースからユーザー データを取得しません。私を助けてください、私は立ち往生しています。login.php に詳細を入力すると、login.php?invalid=1 にリダイレクトされ、誤った情報またはセッションの期限切れのエラーが表示されます。情報は同じなのに!

<?php 
    session_start();
    include_once("include\config.php");
    $login = $_POST["textfield1"];
    $pwd = $_POST["textfield2"];
    $recordset = mysql_query("select * from users");
    while($record = mysql_fetch_array($recordset)){
    if($login == $record["ulogin"] && $pwd == $record["upassword"]) {
        $_SESSION["ulogin"] = $record["ulogin"];
        $_SESSION["uid"] = $record["uid"];  
        if($record["utype"] == 1){
                $_SESSION["utype"] = $record["utype"];
                header("Location:admin.php?uid=".$record["uid"]);
                exit;
        }else{
                header("Location:home.php");
                exit;
            }
        }
    }
    header("Location:login.php?invalid=1");
?>
4

7 に答える 7

1
 <?php
    session_start();
    // http://stackoverflow.com/questions/15408037/php-not-getting-user-data-from-database-when-data-is-already-in-database
    include_once("include/config.php");
    $login = $_POST["textfield1"];
    $pwd = $_POST["textfield2"];
    $recordset = mysql_query("select * from users WHERE ulogin = "'.$login.'" AND upassword = "'.$pwd.'"" ");
    $num_row_user =mysql_num_rows($recordset);
    if($num_row_user>0)
    {
       while($record = mysql_fetch_array($recordset))
       {
         if($record["utype"] == 1) 
         {
            $_SESSION["ulogin"] = $record["ulogin"];
            $_SESSION["uid"] = $record["uid"];
            $_SESSION["utype"] = $record["utype"];
            header("Location:admin.php?uid=".$record["uid"]);
            exit;
         }
         else
         {
            header("Location:home.php");
            exit;
         }
       }
    }
    else
    {
       if (mysql_errno()) 
       { 
          header("Location:login.php?invalid=1&message=QueryError");
       }
       else
       {
          header("Location:login.php?invalid=1&message=invalid username and password");
       } 

    }
  1. 「include\config」に変更された構成ファイル「include\config」のファイル パスを確認する必要があります。
  2. include/configでdb接続を確認する必要があります。
  3. session_start() の前にスペースがありません
  4. より多くのパフォーマンスの問題が発生するため、コーディングスタイルを変更してください。次のコーディング スタイルを使用して、パフォーマンスの問題を軽減します。
于 2013-03-14T12:40:15.403 に答える
1

から変更しました:

include_once("include\config.php");

に :

include_once("include/config.php");

から :

><?php 
session_start();

に :

<?php 
    session_start();

から :

$recordset = mysql_query("select * from users");

に :

$recordset = mysql_query("select * from users WHERE username = "'.$login.'" AND password = "'.$pwd.'");

コードをこのコードに置き換えて試してください。これがあなたを助けることを願っています。

<?php 
session_start();
include_once("include/config.php");
$login = $_POST["textfield1"];
$pwd = $_POST["textfield2"];
$recordset = mysql_query("select * from users WHERE username = "'.$login.'" AND password = "'.$pwd.'"");
while($record = mysql_fetch_array($recordset)){
if($login == $record["ulogin"] && $pwd == $record["upassword"]) {

$_SESSION["ulogin"] = $record["ulogin"];
$_SESSION["uid"] = $record["uid"];  
        if($record["utype"] == 1){
        $_SESSION["utype"] = $record["utype"];
        header("Location:admin.php?uid=".$record["uid"]);
        exit;
        }else{
    header("Location:home.php");
    exit;
    }
 }
} 

       header("Location:login.php?invalid=1");  
   ?>
于 2013-03-14T11:33:30.593 に答える
0

以下のクエリを使用

select * from users WHERE username = "'.$login.'" AND password = "'.$pwd.'"

その後、すべてのレコードを何度もループする必要はありません。

データベーステーブルにレコードがあることを確認してください。

于 2013-03-14T11:36:55.893 に答える
0

データベース構成ファイルのインクルードに問題があります。

交換する

include_once("include\config.php");

include_once("include/config.php");
于 2013-03-14T11:37:01.387 に答える
0

config.php次のようにファイルを含めます。

include_once("include/config.php");

次のようにはなりません:

include_once("include\config.php");
于 2013-03-14T11:34:17.997 に答える
0
  1. mysql_ ライブラリは使用しないでください - 非推奨です。mysqli_ または PDO に変換してください
  2. include_once("include\config.php");する必要がありますinclude_once("include/config.php");
  3. クエリselect * from usersは、膨大な数のレコードを返す可能性があります。より良いクエリは次のようになります。

    mysql_query("select * from users where ulogin = '" . mysql_real_escape($login) . "' AND "uppassword = '" . $pwd . "'");

これにより、行が返されるか、行がまったく返されません。users テーブル全体のスキャンを保存

于 2013-03-14T11:40:18.307 に答える
0

include_once("include\config.php");に変更include_once("include/config.php");

于 2013-03-14T11:34:06.397 に答える