0

コーチがゲーム用に複数のピッチャーを入力できるフォームがあります。このフォームでは、ユーザーは必要に応じて行を追加できます。次のようになります。

<tr><td><select name="pitcherteam[]" size="1">
<option>PLEASE SELECT TEAM
<option>Team 1
<option>Team 2
<option>Team 3
</select></td><td>
<input type=text size=50 name="pitcher[]"></td><td>
<select name="pitcherage[]" size="1">
<option>AGE
<option>8
<option>9
</select></td>
<td><input type="text" size=3 name="pitcherpitches[]"></td></tr>

私が使用しているphpコードはピッチャーをループし、それらが空白でない場合はmysql dbに挿入します:

$size_array = count($_POST['pitcher']); 
for ($i=0; $i<$size_array; $i++){ 
    if($_POST['pitcher'][$i] != ''){
    $sql2="INSERT INTO pitchcounts (pitcherteam, pitcher, pitcherage, pitches)
VALUES
    ('$_POST[date]','$_POST[pitcherteam][$i]','$_POST[pitcher][$i]','
$_POST[pitcherage][$i]','$_POST[pitches][$i]')";

    if (!mysqli_query($con,$sql2))
      {
  die('Error: ' . mysqli_error($con));
  }
} 
}

ループは実際にはデータベースを更新しています - しかし - フォームからの値ではなく - 次のようにゼロと配列マーカーを入れています:

pitcherteam pitcher pitcherage  pitches
Array[0]    Array[0]    0   0
Array[1]    Array[1]    0   0
Array[3]    Array[3]    0   0

何が起こっているかについてのアイデアはありますか?ありがとう!

4

1 に答える 1

3

文字列と変数を連結してください!

$date = trim(mysqli_real_escape_string($_POST['date'])); //example variable clean
$sql2=" INSERT INTO
            `pitchcounts`
            (`pitcherteam`, `pitcher`, `pitcherage`, `pitches`)
        VALUES
            ('".$date."','".$_POST['pitcherteam'][$i]."','".$_POST['pitcher'][$i]."'
            ,'".$_POST['pitcherage'][$i]."','".$_POST['pitches'][$i]."')";

また、入力をきれいにする$_POST必要があります。データを直接データベースに入れるべきではありません。

配列のクリーニングを扱う場合、クリーニング方法を個別に適用して各値をループする必要はありません。array_map

function clean($val)
{
     return trim(strip_tags(mysqli_real_escape_string($val)));
}
$pitchers = array_map('clean',$_POST['pitcher']);

ただし、以下の HamZa が述べているように、このような状況に対処する最善の方法は、準備済みステートメントを使用することです。経験にもよりますが、コードをそのスタイルに変換するには、余分な時間と労力が必要になる場合があります。

`予約済みキーワードとの競合を避けるために、テーブル名とフィールド名もバッククォートで囲む必要があります

変数をクリーニングするだけでなく、入力を検証することもできます。他の特殊なクリーニング方法も使用できます。たとえば、数値フィールドの呼び出しintvalfloatval、他の文字列修正方法は不要であるためです。

于 2013-07-30T13:12:59.617 に答える