0

1クリックボタンで複数のレコードを挿入するためのforループがあります。RATE = 0またはNULLのIFステートメントがある場合は、挿入ステートメントを無視してください。これは正常に機能している部分です。rate = 0またはnullの場合、挿入は無視されます。しかし、ここで奇妙なのは、レコードを2回挿入することです。これは、その前にレート=0またはNULLです。

私はPHPMYADMINを持っています。

これが私のコードです

for($i=0;$i<$a;$i++)
        {
            if(! get_magic_quotes_gpc() )
            {
                $po_number1[$i] = addslashes ($_POST['random']);
                $master_vendor1[$i] = addslashes ($_POST['vendor_name']);
                $market1[$i] = addslashes ($_POST['market'][$i]);
                $start_date1[$i] = addslashes ($_POST['start_date'][$i]);
                $end_date1[$i] = addslashes ($_POST['end_date'][$i]); 
                $qty1[$i] = addslashes ($_POST['qty'][$i]); 
                $rate1[$i] = addslashes ($_POST['rate'][$i]); 
                $comment1[$i] = addslashes ($_POST['comment'][$i]);
                $media_type1[$i] = addslashes ($_POST['media_type'][$i]);
                $sub_vendor1[$i] = addslashes ($_POST['sub_vendor'][$i]);
            }
            else
            {
                $po_number1[$i] = $_POST['random'];
                $master_vendor1[$i] = $_POST['vendor_name'];
                $market1[$i] = $_POST['market'][$i];
                $start_date1[$i] = $_POST['start_date'][$i];
                $end_date1[$i] = $_POST['end_date'][$i]; 
                $qty1[$i] = $_POST['qty'][$i]; 
                $rate1[$i] =  $_POST['rate'][$i]; 
                $comment1[$i] =  $_POST['comment'][$i];
                $media_type1[$i] =  $_POST['media_type'][$i];
                $sub_vendor1[$i] =  $_POST['sub_vendor'][$i];
            }


            if($rate1[$i] == 0 || $rate1[$i] == null)
                {
                // rate is 0 or null, add error
                //  $errors[] = 'Rate is invalid in line ';

                    $errors[] = "Rate is invalid in line $i";
                }
            else
            {
                $sql = "INSERT INTO `order`(`po_number`, `vendor_name`, `market`, `start_date`, `end_date`, `qty`, `rate`, `comment`, `media_type`, `sub_vendor`) VALUES ('$po_number1[$i]','$master_vendor1[$i]','$market1[$i]','$start_date1[$i]','$end_date1[$i]','$qty1[$i]','$rate1[$i]','$comment1[$i]','$media_type1[$i]','$sub_vendor1[$i]')";
            }

            mysql_select_db('mediaplan');
            $retval = mysql_query( $sql, $conn );

            if(! $retval )
            {
                die('Could not enter data: ' . mysql_error());
            }
        }   

どんな助けでも感謝されますありがとう。

クレートテーブルクエリ

テーブルオーダーの作成(インデックスint(255)AUTO_INCREMENT、po_number int(255)、vendor_name varchar(255)、market varchar(255)、start_date date、end_date date、qty int(255)、rate varchar(10)、comment varchar( 255)、media_type varchar(255)、sub_vendor varchar(255))

4

1 に答える 1

1
    if($rate1[$i] == 0 || $rate1[$i] == null)
    {
        // rate is 0 or null, add error
        //  $errors[] = 'Rate is invalid in line ';
        $line = $i + 1 ;
            $errors[] = "Rate is invalid $line in line $i"+"1";
        }
    else
    {
        $sql = "INSERT INTO `order`(`po_number`, `vendor_name`, `market`, `start_date`, `end_date`, `qty`, `rate`, `comment`, `media_type`, `sub_vendor`) VALUES ('$po_number1[$i]','$master_vendor1[$i]','$market1[$i]','$start_date1[$i]','$end_date1[$i]','$qty1[$i]','$rate1[$i]','$comment1[$i]','$media_type1[$i]','$sub_vendor1[$i]')";

        mysql_select_db('mediaplan');
        $retval = mysql_query( $sql, $conn );
        if(! $retval )
        {
            die('Could not enter data: ' . mysql_error());
        }
    }

これをelseステートメント内に配置してみてください

mysql_select_db('mediaplan');
$retval = mysql_query( $sql, $conn );
if(! $retval )
{
            die('Could not enter data: ' . mysql_error());
}


重複エントリがある理由は、ループ内で
if($ rate1 [$ i] == 0 || $ rate1 [$ i] == null)が満たされない場合、elseに移動し
、$sqlをトリガーするためです。 =//あなたのSQLコマンド。

次のサイクルでは、if($ rate1 [$ i] == 0 || $ rate1 [$ i] == null)の場合、この条件を満たす条件が発生
し、erro配列に格納されます。

これが、$ sqlが、$ sqlに移動しなくても、最後のクエリを保持しているトリックです。これ
により、mysql_query()に移動します。これが、重複エントリがある理由です。

于 2012-11-05T16:08:04.043 に答える