0

こんにちは、私は Web ページで作業していますが、データベースの値を更新して表示できない理由がわかりません。

これは、リンクを表示するための PHP ページのコードです。クリックすると、別の PHP プログラムが呼び出されて更新が行われ、表示用の PHP プログラムに再表示されます。

echo "<td class='text pad center'>".$row['deleted']."&nbsp;&nbsp;</td>";
if ( $row['deleted'] == 'y' ) {
    echo '<td class="text center"><a href="delete.php?id='.$row["id"].'">Restore</a>;&nbsp;&nbsp;</td>';
} else {
    echo '<td class="text center"><a href="delete.php?id='.$row["id"].'">Delete</a>;&nbsp;&nbsp;</td>';
}

私の更新プログラムには、データベースで更新を実行し、新しい値を送信して再表示するこのコードがあります。

$id=$_GET['id'];

$sql_query = "SELECT * FROM tablename WHERE id = '$id'";
//Run our sql query
$result = mysqli_query($link, $sql_query) or die('select query failed'. mysqli_error($link));

while ($row = mysqli_fetch_assoc($result)) {
    if ( $row['deleted'] == 'y' ) {
        $change = "UPDATE inventory SET DELETED = 'n' WHERE id = '$id'";
    } else {
        $change = "UPDATE inventory SET DELETED = 'y' WHERE id = '$id'";
    }
    echo "$change";
    mysqli_query($link, $change) or die('select query failed'. mysqli_error($link));
}

//Free resultset (optional)
mysqli_free_result($result);

//Close the MySQL Link
mysqli_close($link);

header("Location: display.php");

エラーが見つかりません。

4

1 に答える 1

1

あなたのコードは現在、2 つの理由で大きな危険にさらされています。第一に、古典的なSQL インジェクションの問題であり、第二に、GET を使用して物事を変更することは決してありません。さらに、あなたのコードは DRY にかなり違反しています。

この書き直しを試してください:

echo "<td class='text pad center'>".$row['deleted']."&nbsp;&nbsp;</td>";
echo '<td class="text center"><a href="delete.php?id='.$row["id"].'">'.($row['deleted']=='y'?'Restore':'Delete').'</a>;&nbsp;&nbsp;</td>';

と:

// IMPORTANT: Make sure you didn't forget to connect!
$id=mysqli_real_escape_string($link,$_GET['id']);
mysqli_query($link,"UPDATE tablename SET deleted=IF(deleted='y','n','y') WHERE id='$id'")
    or die('update query failed'. mysqli_error($link));
header("Location: display.php");

andではなく、実際にはブール値に0andを使用する必要があることに注意してください。これを行うと、ピースをトグルに置き換えることができます。1nydeleted=IF(...)deleted=1-deleted

于 2013-03-11T23:11:39.500 に答える