2016-08-10 4 views
-2

に不必要なフォームへの対処。私が遭遇した問題は、私の変数の1つが必須ではないので、フォームに何も入力しないと、エラーが出ます。 この変数を正しく処理するにはどうすればよいですか? 私は別の用意されたステートメントを使用する必要がありますか、私は持っているものを保つことができますか? @アンドリューの答えを私はmysqliのプリペアドステートメントを使用してMySQLデータベースにフォームから変数を挿入しようとしていますmysqliの

+1

からパラメータ値を取ることができますを行うことができます。 –

+1

あなたが持っているものを保つことができます、上記のフィールドに何かが存在するかどうかをチェックし、それらのフィールドをクエリから外にします(これらのフィールドのテーブルにデフォルト値がある場合)それらのフィールドが空の場合。 – Andrew

+0

fyiの場合、 'null'は準備されたクエリのプレースホルダ値として使用するのに最適です。 PHPにはキーワード 'null'があります。これは、準備されたクエリのバインド変数で期待することを行います。クエリを変更しないでください。空で必須ではないフィールドに 'null'を使用するだけです。 –

答えて

0

動的に準備された文を作成します。フィールドがない場合は、フィールドを含めないでください。たとえば、フォームのフィールドnameageemailを持っており、顧客はname='Bo'age=27しかし、誰電子メールを送信するとします。あなたは

$columns=['name','email','age'];//all possible columns 
$p = &$_POST; //form data, eg: ['name'=>'Bo','age'=>27] email missing 
$data=[];//data that will be inserted 

foreach($columns as $col){ 
    //add available data to $data 
    if(isset($p[$col])) $data[$col]=$p[$col]; 
}  
$insertCols = '('. implode(',',array_keys($data)) .')';//result: "(name,age)"  

$insertVals = '('.trim(str_repeat('?,',count($data)),',').')';//result:"(?,?)" 
$sql = "INSERT INTO myTable $insertCols VALUES $insertVals"; 

今、あなたは、準備されたステートメントを作るために$sqlを使用して、あなたのコードとエラーを投稿$data

+0

2つの異なるページに2つの部分があるため、私の値の一部は$ _SESSION変数に保存されます。私はすべて$ _SESSION配列に移動するか、投稿に追加する必要がありますし、投稿すればどうすればいいですか?フォームの中の隠れたフィールドですか? –

+0

@JoshuaGertner私はちょうど簡単なアプリケーションを示しました。あなたのニーズに合わせて調整する必要があります。たとえば、ループの中に別の条件を追加することによって、他のソースの変数を直接 '$ data'に追加することができます:' if(isset($ _ SESSION [$ col]))$ data [$ col] = $ _SESSION [$ col]) ' – BeetleJuice

+0

助けてくれてありがとう。 –

0

、彼は正しいです。フォームを投稿するとき

を詳しく説明するには、彼らは本当に存在するか、それらがNULLかどうかをチェックすることができ、チェックの時に、あなたはありません台無しあなたのSQLをすると、それらに異なる値を割り当てることができます。

、必要な、あなたがそれらを削除することができますが、それでも変数は本当に価値があるかどうかをチェックする最初のステップを行うなどのHTML5の検証を持っている場合。

関連する問題