0

セッションを作成しましたが、「login.php」に電子メールとパスワードを入力した後、ページは再び「login.php」にリダイレクトされます。次のコードは、電子メールとパスワードの検証をチェックする「login.php」の次のページです。

<?php
    $con = mysql_connect("localhost","Rahul","");

    if (!$con) {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("ebusiness", $con);
    $result=mysql_query("select * from members where Email='$_POST[login]' and Password='$_POST[pwd]' ") or die(mysql_error());

    while($row=mysql_fetch_array($result)) {
        if(strcmp("trim($_POST[login])","trim($row[Email])"==0 ) && strcmp("trim($_POST[pwd])","trim($row[Password])")==0) {
            echo "<meta http-equiv='refresh' content='0.5;url=home.php'/>";
            session_start();
            $_SESSION['email']=$_POST['login'];
            $_SESSION['id']=$row['id'];
            echo "<br><br><br>";
            echo "<table align='center' border='0' cellspacing='0' cellpadding='0' bgcolor='#F0F0F0'><tr></tr><tr align='center'><td><h3>Please wait...</td></tr></table>";
            return;
        }
    }
    mysql_close($con);
?>

「home.php」ページは、検証が成功したときに情報を表示するページです。home.php のコード:

 <?php
   session_start();

    if (!isset($_SESSION['email'])) {
        header("Location: login.php");
        return;
   } else {
        $con = mysql_connect("localhost","Rahul","");
        mysql_select_db("ebusiness", $con);
        $result = mysql_query("SELECT * FROM members WHERE id = $_SESSION[id]") or die(mysql_error());

        while($row = mysql_fetch_array($result)) {
            echo "<table height=100% width=100% border='0' cellspacing='0'><tr height=20%><td colspan=2>";
            include 'header.php';
            echo "</td></tr>";
        }
   }
?>

セッションは最初に「welcome.php」で作成され、「home.php」でセッションが存在するかどうかを確認します。次に、「login.php」にリダイレクトします。しかし、私はすでにセッションを作成しているので、home.php が読み込まれない理由がわかりません。助けてください..

4

3 に答える 3

0

session_start();login.phpページにありません。これをページの上部に追加してください。

于 2013-02-21T07:07:31.713 に答える
0

試す

ログイン.php

<?php
    ob_start();
    session_start();
    $con = mysql_connect("localhost","Rahul","")or die(mysql_error());
    mysql_select_db("ebusiness", $con)or die(mysql_error());;

    $result = mysql_query("select * from members where Email = '".$_POST['login']."' and Password = '".$_POST['pwd']."' LIMIT 1") or die(mysql_error());

    if(mysql_num_rows($result) > 0)
    {
        while($row = mysql_fetch_array($result))
        {
            echo "<meta http-equiv='refresh' content='0.5;url=home.php'/>";
            $_SESSION['email'] = $_POST['login'];
            $_SESSION['id'] = $row['id'];
            echo "<br /><br /><br />";
            echo "<table align='center' border='0' cellspacing='0' cellpadding='0' bgcolor='#F0F0F0'><tr></tr><tr align='center'><td><h3>Please wait...</td></tr></table>";
            return;
        }
    }

    mysql_close($con);
    flush();
?>
于 2013-02-21T06:56:34.483 に答える
0

置く

session_start();

各ページの先頭。ただし、以下に表示される内容は、質問に対する回答ではありません。この行を確認してください:

if(strcmp("trim($_POST[login])","trim($row[Email])"==0 ) && strcmp("trim($_POST[pwd])","trim($row[Password])")==0)
{

strcmp("trim($_POST[login])","trim($row[Email])"==0 ) これを見てください。

strcmp("sometext","someothertext"==0 ) 

つまり

strcmp("sometext",true)

だからあなたのライン

if(strcmp("trim($_POST[login])","trim($row[Email])"==0 ) && strcmp("trim($_POST[pwd])","trim($row[Password])")==0)
    {

と同じです

if(true && strcmp("evenmoretext","evenevenevenmoremoretext")==0)
    {

これは

if(true && 0==0)

これは

if(true && true)

変数echo "<meta http-equiv='refresh' content='0.5;url=home.php'/>";のため、これに到達しますが、関数(この場合はトリム) は解析されません!When a string is specified in double quotes or with heredoc, are parsed within it.

いくつかのテスト:

$_POST['login'] = 'postemail';
$_POST['pwd'] = 'posttest';
$row['Email'] = 'postemail';
$row['Password'] = 'posttest';

var_dump("trim($_POST[login])"); // string(15) "trim(postemail)"
var_dump("trim($row[Email])"); // string(15) "trim(postemail)"
var_dump("trim($row[Email])"==0); // bool(true)
var_dump(strcmp("trim($_POST[login])","trim($row[Email])"==0 )); //int(1)

私の意見では、コードをクリアして修正する必要があります。たとえば、最初の if ステートメントは次のようになります。

if(strcmp(trim($_POST["login]"),trim($row["Email"]))==0 && strcmp(trim($_POST["pwd]"),trim($row["Password"]))==0)
于 2013-02-21T06:57:08.060 に答える