この問題$_GET['id']
に等しいのですか$var
の値に横たわる小さな追放システムの一部であるが、私はコードをテストしようとしたときに発生し、[」 (試行)がAUTO-INCREMENTまたは特別なプロパティなしでテーブル内のint(11)であることを知り、 だから、試行値を1だけインクリメントします。私はこのようなテーブルの行が見つかりました:
番号:1、IP:192.168.1.X、試行:2
id:1、ip:192.168.1.X、試み:4($ _GET ['id']の偽値の第2の実行で)
id:1、ip:192.168.1.X、試み:6
など($ _GET [「ID」]の偽の値の3回目の実行では)、そのは常に2
<?php
$ip="192.168.1.11";
$var=1;
if(isset($var))
{
if(is_numeric($var) AND $var >=1)
{
$var=$var;
}
else
{
$var=null;
$msg[]="::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";
$query="SELECT * FROM table WHERE ip = '$ip'";
if(($result=$mysql_link->query($query)) AND ($result->num_rows > 0))
{
$row = $result->fetch_assoc();
$current_score_of_attmpt=$row['attempt'];
$new_score_of_attmpt=$current_score_of_attmpt+1;
$result->free();
$query = "UPDATE table SET attempt = attempt +1 WHERE ip = '$ip'";
if($mysql_link->query($query)===TRUE) {
$msg[]="We have Updated your score of attempt to $new_score_of_attmpt";
$msg[]="::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::";
}
else
{
echo "Update Error: ".$query."<br>".$mysql_link->error;
}
}
elseif(!($mysql_link->error))
{
$query ="INSERT INTO table (ip, attempt) VALUES ('$ip', 1)";
if($mysqli_link->query($query)===TRUE)
{
$msg[]="Its Your First Attempt";
}
else
{
echo "Update Error: ".$query."<br>".$mysql_link->error;
}
}
else
{
echo "SELECT Error: ".$query."<br>".$mysql_link->error;
}
}
}
else
{
$var=null;
}
echo "<br> the value of var = ".$var;
if(isset($msg))
{
for($i=1; $i<=sizeof($msg); $i++)
{
echo "<br>".$i.") ".$msg[$i];
}
}
「私のPHPコードでのエラーです?」空白のまま* - エラーをチェックして、自分で見つけます。 –
[Little Bobby](http://bobby-tables.com/)によると*** [あなたのスクリプトはSQLインジェクション攻撃の危険にさらされています。](http://stackoverflow.com/questions/60174/how-can- i-prevent-sql-injection-in-php)*** [MySQLi](http://php.net/manual)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)ステートメントについて学びます。 /en/mysqli.quickstart.prepared-statements.php)。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! –
私はテーブルの名前で変数を使用しているので、私は準備されたステートメントを使用することはできません –