0

私はPHPが初めてで、フォームを送信してデータベースに保存されたデータを削除できるシンプルなphpサイトを作成しました。SQL インジェクションを回避するには、準備済みステートメントを使用する方がよいと言われました。

削除を更新しましたが、まだ機能していますが、完全に正しいかどうかはわかりません:

<?php

include("dbconnect.php");

$getid = $_GET["id"];
$delete = mysqli_prepare($database,"DELETE FROM contacts WHERE id IN ($getid)");
mysqli_stmt_execute($delete);

header("Location:http://localhost/address-book");
exit;

?>

しかし、データベースへの追加機能を機能させることができないようです。私はそれを書くためにさまざまな方法を試しましたが、単純なものが欠けていると確信しています. 私が最初に書いた安全でないコードは次のとおりです。

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

include("inc/dbconnect.php");

// assigns form data to table columns
$assign = "INSERT INTO contacts(firstName,lastName,email,phone,birthday) VALUES ('$_POST[firstName]','$_POST[lastName]','$_POST[email]','$_POST[phone]','$_POST[birthday]')";

//execute query
if (mysqli_query($database,$assign)) {
    header("Location:http://localhost/address-book/");
    exit;
} else {
    exit;
}

?>

誰かが私を正しい方向に導くことができれば、私は感謝します. 私はこれらすべてに不慣れです。

更新: 元のコードを更新し、削除の代わりにこれを思いつきました:

<?php

include("dbconnect.php");

$getid = $_GET["id"];
$delete = mysqli_prepare($database,"DELETE FROM contacts WHERE id IN (?)");
mysqli_stmt_bind_param($delete, 's', $getid);
mysqli_stmt_execute($delete);

header("Location:http://localhost/address-book");
exit;

?>

そして追加機能:

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

include("inc/dbconnect.php");

$firstName = "$_POST[firstName]";
$lastName = "$_POST[lastName]";
$email = "$_POST[email]";
$phone = "$_POST[phone]";

// assigns form data to table columns
$assign = mysqli_prepare($database,"INSERT INTO contacts(firstName,lastName,email,phone) VALUES (?,?,?,?)");
mysqli_stmt_bind_param($assign, 'ssss', $firstName, $lastName, $email, $phone);
mysqli_stmt_execute($assign);
exit;

}

?>
4

1 に答える 1

0

単純な Prepare ステートメントは、次のようなものです。

$query = $this->db->prepare("Query here WHERE something = ?")- この例は私のサイトから取ったものなので、代わりに別のものがある可能性が高いことに注意してください$this->->prepare.

重要なことは、"= something "が疑問符として示されていることです。

次に、その疑問符の値をクエリにバインドします

$query->bindValue(1, passed in parameter)

完全に機能する例として:

    //function to add 1 to downloads each time a file is downloaded
public function addToDownload($filename){

    $query = $this->db->prepare('UPDATE trainingMaterial SET downloads = downloads + 1 WHERE filename = ?');
    $query->bindValue(1, $filename);

    try{

        $query->execute();

    }catch(PDOException $e){
        die($e->getMessage());
    }

}


Your query `$assign = "INSERT INTO contacts(firstName,lastName,email,phone,birthday) VALUES ('$_POST[firstName]','$_POST[lastName]','$_POST[email]','$_POST[phone]','$_POST[birthday]')";

だろう

$assign = "INSERT INTO contacts(firstName,lastName,email,phone,birthday) VALUES ?,?,?,?,?)";
$assign->bindValue(1, '$_POST[firstName]')
$assign->bindValue(2, '$_POST[lastName]')

などなど

于 2013-07-27T02:07:03.703 に答える