-1

PHP経由でデータベース内のいくつかのレコードを更新しようとしています。これは、エラーを返す私のコードの一部です:

<?php
    //turn on error reporting
    ini_set('display_errors',1);
    error_reporting(E_ALL);

    // Check if button name "Submit" is active, do this
    if(isset($_POST['Submit']))
    {
        $count=mysql_num_rows($result);
        for($i=0;$i<$count;$i++)
        {

     if(isset($title[$i],$descr[$i],$price[$i],$cname[$i],$pid[$i]))
            {
                $query = "
                   UPDATE products
                   SET title='$title[$i]',
                       descr='$descr[$i]',
                       price='$price[$i]',
                       cname='$cname[$i]'
                   WHERE pid='$pid[$i]'
               ";

                $upd = mysql_query($query) or die(mysql_error());
            }
            else
            {
                $upd = FALSE;
                echo "One of the variables isn't set.\n<br/>";
            }
        }

        if($upd)
        {
            echo "Successful";
            echo "<BR>";
            //display_manager_menu();
        }
        else {
            echo "Something wrong";
        }    
    }
    mysql_close();
    ?>

「通知: 未定義の変数: upd」が返されます。mysql_query の結果として設定$updしたため、このメッセージが表示される理由がわかりません。何か案は?

4

4 に答える 4

0

変化する:

if($upd){

に:

if(isset($upd) && $upd){

が設定されていない場合$_POST['submit']、変数$updも設定されません。

于 2013-09-29T09:40:51.603 に答える
0

問題は、それ$udpが if 条件内で宣言されていることです。設定されていない場合$_POST['Submit']は、設定$udpもされません。の前に変数を初期化することでこれを解決できますif(...)

$udp = false; // initialize $udp before conditional
if(isset($_POST['Submit'])){
    for($i=0;$i<$count;$i++){
        $query="UPDATE products SET title='$title[$i]', descr='$descr[$i]', price='$price[$i]', cname='$cname[$i]' WHERE pid='$pid[$i]'";
        $upd=mysql_query($query);
    }
}

この場合、 で初期化$udpします。これは、失敗した場合falsemysql_query()も返されるためです。false

于 2013-09-29T09:53:17.847 に答える
-1

条件付きで宣言されているだけの答えに加えて、$updあたかもオンであるかのようにコードを書いていますregister_globals。これを行うべきではありません。

$title$_POST['title']など$descrに置き換え$_POST['descr']ます。適切に連結すると、これはより簡単に実行できます。

"blah blah blah '".mysql_real_escape_string($_POST['title'][$i])." blah blah blah...";

また、入力をサニタイズします。

于 2013-09-29T10:10:05.327 に答える