PHP uyarısı sorunu?

3 Cevap php

Possible Duplicate:
PHP warning help?

Ben () 3. hatta aşağıdaki uyarıyı almaya devam ben mysqli_real_escape_string yanlış düşünüyorum PHP ve MySQL için yeni.

Uyarı: mysqli_real_escape_string () verilen tam olarak 2 parametre, 1 bekliyor

İşte php kodudur.

<?php

$page = mysqli_real_escape_string($_SERVER['SCRIPT_FILENAME']); 

// Query member data from the database and ready it for display
$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT id page FROM mysql_counter_logs WHERE page = '$page'");

if (mysqli_num_rows($dbc) == 0) {
        $mysqli = new mysqli("localhost", "root", "", "sitename");
        $dbc = mysqli_query($mysqli,"INSERT INTO mysql_counter_logs (page) VALUES ('$page')");
} 

if ($dbc == 1) {
        $dbc = mysqli_query($mysqli,"UPDATE mysql_counter_logs SET hits = hits + 1 WHERE page = '$page'");
}

//Retreives the current count
$count = mysqli_fetch_row(mysqli_query($mysqli,"SELECT hits FROM mysql_counter_logs"));

if (!$dbc) {
        // There was an error...do something about it here...
        print mysqli_error();
} 


//Displays the count on your site
print "$count[0]";

?>

Ayrıca ben XSS saldırıları, bu kodu daha güvenlik kanıtı yapabilirsiniz bir yolu yoktur. Teşekkürler

3 Cevap

Senin kod örneği ile yanlış olan birkaç şey vardır.

Firstly mysqli_real_escape_string needs a connection to be established before you call it. Secondly, you need to pass that connection to mysqli_real_escape_string. Thirdly, you're mixing the object version of the mysqli api with the procedural version. You need to choose one and stick to it.

Eğer nesne sürümü kullanmak için gidiyoruz, o zaman aşağıdaki gibi bir şey yapmanız gerekir:

$con = new mysqli(...);
$clean_data = $con->real_escape_string($your_string);
$con->query("SELECT ... FROM ... WHERE .. ='$clean_data'");

Ve benzeri.

Eğer usul rota gitmek için gidiyoruz, o zaman yapmanız gereken:

$con = mysqli_connect(...);
$clean_data = mysqli_real_escape_string($con, $your_string);
$result = mysqli_query($con, "SELECT ... FROM ... WHERE ... = '$clean_data');

http://php.net/mysqli

Sen $mysqli->real_escape_string OO tarzı değil, prosedürel stil kullanarak gerektiğini zaten bir örneğini yaratıyor.

İlk argüman (Eğer usul sürümünü kullanıyorsanız) mysqli_connect() ile oluşturulan bağlantıdır. Nesne yönelimli ve http://www.php.net/manual/en/mysqli.real-escape-string.php de usul tarzı hem de bir örnek vardır.