0

fromからデータを挿入するためのこのphpコードがあります。

$i = 1;
foreach ( $_POST['form'] as $val => $form ){   
    $Style = $_POST['form'][$i]['style'];
    $Dim= $_POST['form'][$i]['Dim'];
    $Colour= $_POST['form'][$i]['Colour'];
    $Quantity= $_POST['form'][$i]['Quantity'];

    $stmt = $db->prepare("INSERT INTO orders(Cus_ID, Style, Dimensions, Colour, Quantity) VALUES(:Cus_ID,:Style,:Dimensions,:Colour,:Quantity)");

    $stmt->execute(array(':Cus_ID' => $Cus_ID, ':Style' => $Style, ':Dimensions' => $Dim, ':Colour' => $Colour, ':Quantity' => $Quantity));  

    $i++;
} 

フォームを送信すると、var_dump で次のような結果が得られます。

array (size=3)
  'form' => 
    array (size=3)
      1 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      2 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      3 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
  'submit' => string 'Place Order' (length=11)

すべてがうまくいきますが、フォームの一部を削除すると、送信された配列は次のようになります。

array (size=2)
  'form' => 
    array (size=2)
      1 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
      3 => 
        array (size=4)
          'style' => string '0' (length=1)
          'Dim' => string '0' (length=1)
          'Colour' => string '0' (length=1)
          'Quantity' => string '' (length=0)
  'submit' => string 'Place Order' (length=11)

PHPが存在しない「2番目」の配列を入力しようとする場合、欠落している配列をPHPに「スキップ/無視」させることは可能ですか(配列は無制限で、乱数は欠落している可能性があります)

4

2 に答える 2

3

はい、単にcontinue現在のインデックスが設定されていない場合は可能です。

ただし、使用する理由はまったくありません$iforeachループは として各フォームにアクセスできるように記述されている$formので、次を使用して$formください。

foreach ( $_POST['form'] as $val => $form ){  
    # No! 
    $Style = $_POST['form'][$i]['style'];
    $Dim   = $_POST['form'][$i]['Dim'];

    # Yes!
    $Style = $form['style'];
    $Dim   = $form['Dim'];

    #...
}
于 2013-10-12T13:08:38.740 に答える
2

foreach では、 を使用する必要はありません$i$valサブ配列のキーです。$formサブアレイであり、次のように使用できます。

foreach ( $_POST['form'] as $val => $form ){   
    $Style = $form['style'];
    $Dim= $form['Dim'];
    $Colour= $form['Colour'];
    $Quantity= $form['Quantity'];

    $stmt = $db->prepare("INSERT INTO orders(Cus_ID, Style, Dimensions, Colour, Quantity) VALUES(:Cus_ID,:Style,:Dimensions,:Colour,:Quantity)");

    $stmt->execute(array(':Cus_ID' => $Cus_ID, ':Style' => $Style, ':Dimensions' => $Dim, ':Colour' => $Colour, ':Quantity' => $Quantity));  

}

したがって、あなたの質問に答えるために、 foreach が欠落している配列に到達することはありません。配列要素をループするため、配列に2つの要素がある場合、2回反復します。配列に 3 つの要素がある場合は、3 回反復します。

于 2013-10-12T13:11:01.627 に答える