1

データベースへの接続を試みました データベースへの接続は成功しましたが、ユーザー情報をデータベースと照合しようとすると、エラーが発生します データベースが選択されていません 別の方法を使用してデータベースに接続しようとしましたが、何も機能しませんでした

<?php
//CREATING CONNECTION TO DATABASE
$con= new mysqli("localhost", "****", "***", "*****");
$con->select_db("lel_server_user_db_secured");
if(mysqli_connect_errno())
    {
        echo "Problem With connection to database Please contact administrator regarding this error";
    }
/* RETURNS NAME OF DEFAULT DATABASE
if ($result = $con->query("SELECT DATABASE()")) {
    $row = $result->fetch_row();
    printf("Default database is %s.\n", $row[0]);
    $result->close();
}
*/
/*
$host="localhost";
$db_user="sky.xpert";
$db_pass="havefun344";
$database="lel_server_user_db_secured";
mysqli_connect($host,$db_user,$db_pass,$database) or die ("Failed to connect");
mysqli_select_db($database) ;
*/

session_start();

//GATHERING DATA FROM USER FORM
$email=$_POST["login"];
$pass=$_POST["pwd"];

//COMMANDING WHERE TO FIND MATCH FOR LGOIN INFORMATION
$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$query=mysql_query($veryfy) or die ( mysql_error() );

$match=0;
$match=mysql_num_rows($query);

//IF MATCH FOUND THEN SETTING SESSION AND REDIRECTING IT TO LOGGED PAGE
if($match==1)
    {
        $_SESSION['loggedin'] = "true";
        header ("Location: logged.php"); //REDIRECTING USER TO ITS HOMEPAGE
    }
else //IF MATCH NOT FOUND THEN REDIRECTING IT BACK TO LOGIN PAGE
    {
        $_SESSION['loggedin'] = "false";
        header ("Location: index.php");
    }
//PERSONAL COMMENTS OR DETIALED COMMENTS
//PROBLEM WITH THIS SCRIPT GIVING OUTPUT ON LOGIN "NO DATABASE SELECTED"
//REFRENCE from http://www.dreamincode.net/forums/topic/52783-basic-login-script-with-php/

?>
4

4 に答える 4

2

でデータベースへの接続を初期化していますmysqli。次に、でクエリを実行しようとしますmysql。明らかに、そのライブラリを介して確立されたデータベースとの接続がないため、エラーで失敗します。に変更mysql_querymysqli_queryます。

一般的な注意事項

現在のコードは、ユーザーからの入力をクエリに入れる前にサニタイズしていないため、SQL インジェクション攻撃に対して脆弱です。準備されたクエリの使用を検討してください。

于 2013-09-22T05:48:11.917 に答える
0

データベースlel_server_user_db_securedが存在しない可能性があります。

あなたのmysqlへのコンテンツ:

 mysql -hlocalhost -uusername -p

パスワードを入力します。ログイン後、次のコマンドを入力します。

show databases;

が結果にあるかどうかを確認lel_server_user_db_securedします。

アップデート1*

以下のコードを変更します。

$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$query=mysql_query($veryfy) or die ( mysql_error() );

$match=0;
$match=mysql_num_rows($query);

に:

$veryfy="SELECT * FROM users WHERE Email='$email' Password='$pass'";
$result = mysqli_query($con, $veryfy) or die ( mysqli_connect_errno() );

$match=0;
$match=mysqli_num_rows($result);
var_dump($match);
于 2013-09-22T05:45:08.167 に答える
-1

プログラムの前半ではmysqliを使用し、後半ではmysqlを使用しました。mysqliまたはmysqlを使用します。SQL インジェクションに対して脆弱にならないように、プログラム全体でmysqliを使用することをお勧めします。

于 2013-09-22T05:49:48.737 に答える
-2

あなたは単にそれを行うことができます

$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

$con->select_db("lel_server_user_db_secured");再度行う必要はありません

mysqli を使用しても、コードが安全であるとは言えません...コードはSQL インジェクションに対して依然として脆弱です代わりに、または少なくとも準備されたステートメントを使用してくださいmysqli_real_escape_string

すべてのリクエストを適切にエスケープする必要があります

データベースが存在しない可能性があるため、最初に存在することを確認してください

そして、あなたは2つの異なるAPIを混合しています

MySQLi関数でMySQL_*関数を使用することはできません

于 2013-09-22T05:47:15.237 に答える