0

ログインスクリプトを書き直しています。この演習の要点は、接続ハンドラをページから切り離しておくことでした。私が話しているのはこれです。

var= mysqli_connect(xxxx)

これを関数に移動してみました。

 function openDB() {
include("/assets/configs/db_config.php");
$conn = mysqli_connect('x', 'x', 'x', 'x');

//$conn = mysqli_connect($config["host"] , $config["username"], $config["password"],$config["dbname"]);

// 1. Create a database connection
//$conn = mysqli_connect("x" , "x", "","x");
if (!$conn)
{
    $this->error_msg = "connection error could not connect to the database:! ";  
    return false;
}
$this->conn = $conn;
return true;
}

ただし、別の質問でこれについて言及したことを知っているので、特にこの機能について戻るように誰にも求めません。基本的に何を試しても、mysqli_real_escape_string プロトコルがエラー (接続ではなくオブジェクト) を取得していたため、行き詰まりました。

先に進むと、使用法を含む他の関数がいくつかあるmysqli_real_escape_stringので、ログイン関数の使用に適応させたいと思いました。これが機能するものです。アップデート機能です。

function member_update($mid, $name, $address, $postcode, $photo)
{
$esc_mid = mysqli_real_escape_string($this->conn, $mid);
$esc_name = mysqli_real_escape_string($this->conn, $name);
$esc_address = mysqli_real_escape_string($this->conn, $address);
$esc_postcode = mysqli_real_escape_string($this->conn, $postcode);
$esc_photo = mysqli_real_escape_string($this->conn, $photo);

$sql = "UPDATE member SET
mid='{$esc_mid}',
name='{$esc_name}',
address='{$esc_address}',
postcode='{$esc_postcode}',
photo='{$esc_photo}'
WHERE mid='{$esc_mid}'";


 $result = mysqli_query($this->conn, $sql);

            if ($result) {
             $numofrows = mysqli_affected_rows($this->conn);

            echo("$esc_mid, {$esc_name}, $esc_address, {$esc_postcode}, $esc_photo"); /*see id*/
$numofrows = mysqli_affected_rows($this->conn);
return $numofrows;


            }
            else
                $this->error_msg = "could not connect for some wierd reason";
    return false ;

}

今、それは立っています、これは私が立ち往生しているところです。上記の関数を、ログインの処理に使用できる関数に変更しようとしました。ここにあります。

function logcon($user, $password )
{

   $esc_user = mysqli_real_escape_string($this->conn, $user);
   $esc_password = mysqli_real_escape_string($this->conn,$password);  
$sql = "select * all from users where username  ='{$user}' AND password='{$password}'";
 $result = mysqli_query($this->conn, $sql);

  if ($result) {
             $numofrows = mysqli_affected_rows($this->conn);
            return $numofrows;
            }
            else
                $this->error_msg = "could not connect for some wierd reason";
                        return false ;

 }

私が知る限り、ロジックは十分に近いので、うまくいくはずです。しかし、そうではありません。mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean givenこのコードのスライスのページ側に 悩まされています。$row=mysqli_fetch_array($result, $sqL);

これは現状のログイン スクリプトです (CSS とフォームを除く)。

if(isset($_POST['submit'])){

$user=$_POST['user']; 
$password=$_POST['password'];


//To ensure that none of the fields are blank when submitting the form if
if(isset($_POST['user']) && isset($_POST['password'])) 
    {    


$user = stripslashes($user);
$password = stripslashes($password);

$db1=new dbmember();
$db1->openDB();                 
$sql="SELECT * FROM users WHERE username='{$user}' AND password='{$password}'";


$result=$db1->logcon($user, $password);
$row=mysqli_fetch_array($result, $sqL);


if($row[0]==1)
{
    session_start();
    $_SESSION['user'] = $user;
    $_SESSION['password'] = $password;
    $_SESSION['loggedin'] = "true";
    header("location:index.php");
}
        else
        {
            print ('<div id="error">Acess denied, wrong username or password?</div>');
        }
        }
        else
            {
            print ('<div id="error">Enter something!</div>');
        }

}

    ?>
4

2 に答える 2

0

あなたの機能で

if ($result) {
    $numofrows = mysqli_affected_rows($this->conn);
    return $numofrows; << returns a number
} else {
    $this->error_msg = "could not connect for some wierd reason";
    return false ; << returns a boolean
}

数値またはブール値のいずれかを返します。

mysqli_fetch_array(result,resulttype)

mysqli_result オブジェクトが必要です ( http://at1.php.net/manual/de/mysqli-result.fetch-array.phpを参照)。それに加えて、あなたのコードには多くの中括弧がありません。

また、問題が数行だけで発生する場合は、それほど多くのコードをアップロードする必要はありません。

于 2013-08-01T13:43:57.600 に答える
-1

だから私は私のコメントが答えを提供すると確信しています:

$sql = "select * all from users where.. 

* all??? その間違ったクエリが原因である可能性があります。関数logcon内のSQLです

さらに、mysqli の結果セットは返されませんが、失敗した場合はカウントまたは FALSE が返されます。FALSE を返す場合は、返されたエラーを確認する必要があります。

if(($result = $db1->logcon($user, $password)) !== FALSE) 
{
   // do stuff 
} 
else 
{ 
    //error handling 
}

そしてfunction logcon、次のようなものが含まれている必要があります

if ($result) 
{
    return $result;
}

結果を使用したい場合。

于 2013-08-01T13:45:40.077 に答える