-3

コードに問題があります。データベースの最初の行にのみ影響します。なぜですか

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

    $query = "UPDATE databasename SET id=";
    $query .="'" .$_POST[id]. "', 1 =";
    $query .="'" .$_POST[1]. "', 2 =";
    $query .="'" .$_POST[2]. "', 3 =";
    $query .="'" .$_POST[3]. "', 4 =";
    $query .="'" .$_POST[4]. "', 5=";
    $query .="'" .$_POST[5]. "', 6=";
    $query .="'" .$_POST[6]. "', 7=";
    $query .="'" .$_POST[7]. "', 8=";
    $query .="'" .$_POST[8]. "', 9=";
    $query .="'" .$_POST[9]. "'";

    echo "USER has been modified";
    echo $query;
    echo "<br/>";
    echo "<a href='http://www.example.com/instrument.php?id=$_POST[id]'>Click This Link </a>";
    $result = mysqli_query($link, $query) or die(mysql_error());
    header ("Location: edit.php");
}
4

1 に答える 1

0

を挿入せずにテーブルを本当に更新する場合は、更新を目的の行に制限する句が必要です。現在のステートメントにはこの句がないため、テーブル内のすべての行が更新されます。例:WHERE

$query = "UPDATE tablename SET 1 =";
//$query .="'" .$_POST[id]. "', 1 =";
$query .="'" .$_POST[1]. "', 2 =";
$query .="'" .$_POST[2]. "', 3 =";
$query .="'" .$_POST[3]. "', 4 =";
$query .="'" .$_POST[4]. "', 5=";
$query .="'" .$_POST[5]. "', 6=";
$query .="'" .$_POST[6]. "', 7=";
$query .="'" .$_POST[7]. "', 8=";
$query .="'" .$_POST[8]. "', 9=";
$query .="'" .$_POST[9]. "'";
&query .="' WHERE id=" . $_POST[id];

はい、これは書かれているように SQL インジェクションに対して脆弱です。

于 2013-06-18T17:20:55.797 に答える