2016-12-06 6 views
0

チュートリアルを通して私はデータベースにデータを挿入するhtmlフォームを作成しました。それはうまくいきますが、チュートリアルではなぜ配列リストにそのようなコードを使用するのか説明されていません。フォームからphp pdo挿入配列

$db = new PDO("mysql:host=localhost;dbname=test", "test_user", "test123"); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

if(isset($_POST['btn-add'])) 
{ 
    $fields= (is_array($_POST['fields'])) ? $_POST['fields'] : array(); 
    $insertStmt = $db->prepare("INSERT INTO test (test_field) VALUES (:field)"); 

    foreach ($fields as $field) { 
     $insertStmt->execute(array('field' => $field)); 
    } 
} 

<form action="" method="POST"> 
    <label>field 1 <input type="text" name="fields[0]"></label>   
    <label>field 2 <input type="text" name="fields[1]"></label> 
    <button type="submit" name="btn-add">add</button> 
</form> 

私の質問はこの行についてです。たぶん誰かがそれを説明するかもしれない。

$products = (is_array($_POST['fields'])) ? $_POST['fields'] : array(); 

この行の機能 - ? $ _POST ['fields']:array();

それは$製品とうまく動作しないのはなぜ=(IS_ARRAY($ _ POST [「フィールド」]))

また、これは、フォームからの配列の挿入を作成するための良い方法ですか私で検索します別のチュートリアルですか?

+1

これは* 3進演算子* - http://php.net/manual/en/language.operators.comparison.php#language.operators.comparisonと呼ばれています。'is_array($ _ POST ['fields'])'を実行するだけでは、値/配列ではなく真/偽の真偽値を返します。 – Qirel

+0

'$ _POST ['fields']'と等しいか、または '$ products'が' array() 'と等しい場合は、' is_array($ _ POST ['fields']) - 三元演算子 – Kitson88

+0

Qirelが書いたように。私はあなたのソリューションが '_POST ['fields']'変数の型に応じて 'products'変数に' true'または 'false'(boolean)を代入することを追加するだけですが、ブール値ではありません。元の行が何をしているのですか?それは配列か空の配列であれば '_POST ['fields']'の内容をそこに割り当てます。 –

答えて

0
$fields = (is_array($_POST['fields'])) ? $_POST['fields'] : array(); 

説明

$_POST['fields']が配列である場合、条件はtrueと評価。条件が真である場合、式の前に:は変数$fieldsに割り当てられます。そうでない場合はarray()の後に:が割り当てられます。

構文は次のようになり:

$var = condition ? expr1 : expr2; 

は、あなたがより明確にするために、ここにある:ここでは

$a = 10; 
$b = 20;  
$c = $b > $a ? $b : $a; 

$bより大きい$aであれば、それは本当であるならば、我々は、状態をチェック、$bの値は$cに割り当てられ、falseの場合は$aの値が割り当てられます。

これは三項式の働きです。

+0

ありがとうございました!すべてが今よりずっと意味をなさない! – lyraX

+0

私は三元表現についてより明確にしたことをうれしく思います。 :) – Perumal

0

上記の行は、フォームからデータが与えられているかどうかに関係なく、変数$productsを配列に設定します。

$products = (is_array($_POST['fields'])) ? $_POST['fields'] : array(); 

は「$_POST['fields']が配列である場合には、そうでない場合は空の配列として$products設定し、この指定された配列に$productsを設定する」と言います。三項演算子の詳細については

あなたはここで見ることができます。http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

を。これは、次のコード

foreach ($fields as $field) { 
    $insertStmt->execute(array('field' => $field)); 
} 

WARNING Invalid argument supplied for foreach() on line number ... 
のような警告が発生しないことを、確実に

希望するもの: