0

後で関数として呼び出すことができるように、すべてのSQLステートメントが別のPHPファイル内に格納されるコードを作成しようとしています。

いろいろ試してみましたが、うまく動かないようです。

これが私のコードです(ここにログインページを作成しようとしています)

login.php

<?php
     include('sql.php');
     $sql = new sql();
?>

<form class = "form-inline" method = "post" style="color: #FFF; position: absolute; margin-top:100px; margin-left:500px;">
            <table width="100%" border="0">
  <tr>
    <td>Username</td>
    <td><input type="text" id = "username" name = "username" class="large" placeholder=""></td>
  </tr>
  <tr>
    <td>Password</td>
    <td><input type="password" id = "password" name = "password" class="large" placeholder=""></td>
  </tr>
</table>
<br />
<center><button type="submit" id = "submit" name = "submit" class="btn btn-primary">Log in</button></center>
</form>
<?php
//echo $sql->admin();
?>


<?php
    if(isset($_POST['submit'])) {
        // username and password sent from form
        $username=$_POST['username'];
        $password=$_POST['password'];

        // To protect MySQL injection (more detail about MySQL injection)
        $username = stripslashes($username);
        $password = stripslashes($password);
        $username = mysql_real_escape_string($username);
        $password = mysql_real_escape_string($password);

        //THIS IS THE PART WHERE I CALL THE SQL STATEMENT FROM A SEPARATE PHP FILE
                            echo $sql->admin($username,$password);

        // Mysql_num_row is counting table row
        $count=mysql_num_rows($sql);

        // If result matched $username and $password, table row must be 1 row               
        if($count==1)
        {
            //unset($_SESSION);
            $row = mysql_fetch_assoc($sql);
            $_SESSION[logged] = $row[logged];
            // Register $username, $password and redirect to file "index.php"
            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;
            $_SESSION['submitted'] = $row[submitted];
            $_SESSION['date_submitted'] = $row[date_submitted];
            session_register($_SESSION['username']);
            session_register($_SESSION['password']);
            ?>
                                     <script>window.location="index.php";</script>
            <?php
        }
        else 
        { ?>
            <center><span style="color:white;">Wrong Username or Password</span></center>
        <?php

        }
    }
?>

sql.php

<?php
  include('connect.php');
  class sql{
    function sql()
    {

    }

    function admin($username,$password)
    {
        echo $sql=mysql_query("SELECT * FROM admin WHERE admin_username= '$username' and admin_password= '$password' ");
    } 
}
?>

このコードで表示されるエラーは

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in login.php on line 40

私の40行目は

$count=mysql_num_rows($sql);

私はついにそれを手に入れました。あなたが言ったように、私は私のsql.phpに次の行を追加しました

    return $result; 

コードが機能しなかったもう1つの理由は、コードを配置しなかったためです。

 $sql->admin($username,$password);

変数内。今はこんな感じ

$a = $result->admin($username,$password);

そしてそれは今働いています。

4

5 に答える 5

2

GBDが言ったように、mysqlクエリから結果セットを返す必要があります。さらに、ログインページからの送信を処理するには、スクリプトで結果を使用する必要があります。

$result = admin($username,$password)

// Mysql_num_row is counting table row
$count = mysql_num_rows($result)
于 2012-11-01T08:36:38.813 に答える
1

関数に結果セットを返す必要があります

function admin($username,$password)
{
    $result=mysql_query("SELECT * FROM admin WHERE admin_username= '$username' and admin_password= '$password' ");

   return $result; // return result set back
}
于 2012-11-01T08:30:36.250 に答える
1

管理関数は、データの結果セットを返す必要があります。

function admin($username,$password)
{
  $result = mysql_query("SELECT * FROM admin WHERE admin_username= '$username' and admin_password= '$password' ");
  return $result;
}

そのようにそれを呼び出すことによって:

$resultset = admin($username, $password);

次に、この結果セット(SQLではない)をmysql_num_rowsに渡すことができます。

$count = mysql_num_rows($resultset);
于 2012-11-01T08:34:20.487 に答える
0

login.phpで使用した

//THIS IS THE PART WHERE I CALL THE SQL STATEMENT FROM A SEPARATE PHP FILE
 echo $sql->admin($username,$password);

パラメータは正しく送信されますが、SQLの結果は関数から返される必要があります。

login.phpだけでなくsql.phpでもechoを使用しました

returnステートメントを追加する

function admin($username,$password)
{
$sql=mysql_query("SELECT * FROM admin WHERE admin_username= '$username' and admin_password= '$password' ");
return $sql;
}

sql.phpで

$result=$sql->admin($username,$password);

次に、変数$ resultを使用します。これは、$sqlがすでにCLASSに使用されているためです。

これは機能するはずです。

于 2012-11-01T08:37:31.867 に答える
0

私の前任者が言ったように、あなたは管理関数から値を返す必要があります。

また、なぜDBテーブルを「admin」と呼ぶのですか?複数の管理者を配置する予定はありますか?異なるタイプのユーザー用に個別のテーブルを作成しないでください。彼が管理者であるか通常のユーザーであるかを指定する列'type'を持つ1つのテーブル'users'を作成し、この値に基づいて彼の特権を設定することができます。

于 2012-11-01T08:50:37.070 に答える