1

必要なときにこれを更新するのに問題があります。これは、削除された列の値 1 を使用して、選択した電子メール行を更新するためのオプトアウト スクリプトです。更新できないようで、SQLに問題があると考えています。これを理解するための助けは大歓迎です。注: 作成中です。申し訳ありませんが、問題が発生しているようです........

これがスクリプトです。

<?php

if (isset($_GET['e'])) {

    include_once "../storescripts/connect_to_mysql.php";

    $email = $_GET['e'];

    $sql_delete = mysql_query("UPDATE test WHERE email='$email' SET removed = '1'");

    if (!$sql_delete) {
        echo "Sorry there seems to be and issue when trying to remove your listing. Please email Admin directly using this email address: chris@.com";
    } else {
        echo "Sorry to see you go! You will not receive our newsletter ever again unless you relist. To gain access to our newsletter again simply let us know by email at chris@.com";
    }
}
?>
4

5 に答える 5

1

更新構文は次のとおりです。

UPDATE
    table
SET
    column = value
WHERE
    condition = met

$_GET別の注意として、動的エントリ ( )の非常に安全でない方法を使用していることがわかります。Mysql_*関数は、新しいバージョンの php では非推奨です>= 5.5。バインド変数の使用について PDO を調査することを強くお勧めします。

$_GET['e'] = "fake' OR '1'='1" // known as sql injection 

よく読んだ

于 2013-08-02T02:44:19.660 に答える
1

試す:

$sql_delete = mysql_query("UPDATE test SET removed = '1' WHERE email='$email'");

問題はあなたの構文です.mysqlupdate構文を見てください.where節がどこに行き、どこにset行くべきですかhttp://dev.mysql.com/doc/refman/5.0/en/update.html .

次のように、適切なエラー処理を使用していれば、この問題が発生する可能性があります。

$sql_delete = mysql_query("UPDATE test SET removed = '1' WHERE email='$email'") or die(mysql_error());

SQL インジェクションを防ぐためにmysql_real_escape_string http://www.php.net/manual/en/function.mysql-real-escape-string.phpを見てください。例:

$email = mysql_real_escape_string($email);
$sql_delete = mysql_query("UPDATE test SET removed = '1' WHERE email='$email'") or die(mysql_error());

また、拡張機能は推奨されていないことに注意してください。またはmysql_を使い始めたいと考えています。mysqliPDO

于 2013-08-02T02:39:05.080 に答える
1

SETの前に使用します。WHERE

UPDATE test 
SET removed = '1'
WHERE email = '$email'
于 2013-08-02T02:40:17.337 に答える
0

そうです、UPDATE構文が正しくありません。これは正しい形式です:

UPDATE test
SET removed = '1'
WHERE email = '$email'
于 2013-08-02T02:45:54.983 に答える