2012-01-30 10 views
0

私はMySQLを使って自分のフォームのチェックボックスの未知の量を生成していますが、未知の量を処理する、この数は常にフォームがcreate.php」により提出され、処理された場合、チェックボックス

$frinfoq = mysql_query($frinfo) or die (mysql_error()); 
    while($frow = mysql_fetch_assoc($frinfoq)) { 
     $username = $frow['username']; 
     $ct = $frow['country']; 
     $fruuid = $frow['uid']; 
     ?> 
    <tr><td><p><?php echo $username; ?></p></td><td><p><?php echo $ct; ?></p></td><td><form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="delf"><input type="hidden" value="<?php echo $fruuid; ?>" /><input type="checkbox" name="add[]" value="<?php echo $fruuid; ?>" id="a_t_game" /><form></td></tr> 


    <?php 
    } 
    ?> 

、変化します"チェックされたユーザーだけをmysqlテーブルに追加することになっています。これは、ユーザーごとの行です。このようにチェックされている問題があるため、これが動作するかどうかはわかりません。

if($_POST['add'] == true) { 
    $user_uid = $_POST['add']; 
    } 

次に、次のように行を追加します。

$arr = array($user_uid); 
foreach($arr as $user_uid) { 
$game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('$gid','$user_uid',now(),'none')"; 
$gameq = mysql_query($game) or die (mysql_error()); 
} 

"Array"に設定されたユーザーのUIDとは別に、すべてのデータ入力が正常に行われます。また、1行しか作成されないため、ユーザーあたりの行が必要です。

私のアレイの処理方法に問題があることはわかっていますが、それはかなり明白ですが、私はそれを修正する方法について控えめに考えていません。どんな助け/ポインタも大きな助けになるでしょう!

+1

ラインブレイクを使用しないでください。書かなければならなかった。真剣に、あなたの文字列を複数の行に分割することは間違いありません。 –

+0

if文で "== true"を使用しないでください。彼らは100%冗長です。 –

+0

[チェックされていないチェックボックスはPOST/GETデータに定義されていません](http://stackoverflow.com/questions/2520952/how-come-checkbox-state-is-not-always-passed-along- to-php-script)? –

答えて

0

$arr = array($user_uid);が問題です。ちょうど$arr = $user_uid;を試してください、または仲買人を切り出して$arr = $_POST["add"];を使用してください。


EDIT

また、あなたのコードを改善することができる他のものがいくつかあります。 1つは、読むのが難しいです。私はそれを少しきれいにすることを提案し、HTMLとPHPの間のジャンプを避ける。

もう1つのことは、($ _POSTのような)ユーザー入力から生じる可能性のあるデータをデータベースにエスケープすることです。 mysql_real_escape_stringを使用してください。

第3の点は、アクションが$_SERVER["PHP_SELF"]を指すフォームが安全でないことです。クロスサイトスクリプティング(XSS)に脆弱です。この脆弱性の詳細については、this blogを参照してください。

<?php 

if ($_POST["add"]) 
{ 
    $arr = $_POST["add"]; 

    foreach ((array)$arr as $user_uid) 
    { 
     $game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('". mysql_real_escape_string($gid) ."','". mysql_real_escape_string($user_uid) ."', now(), 'none')"; 
     $gameq = mysql_query($game) or die (mysql_error()); 
    } 
} 

$frinfoq = mysql_query($frinfo) or die (mysql_error()); 

while($frow = mysql_fetch_assoc($frinfoq)) 
{ 
    $username = $frow['username']; 
    $ct = $frow['country']; 
    $fruuid = $frow['uid']; 
    echo " <tr> 
     <td> 
      <p>{$username}</p> 
     </td> 
     <td> 
      <p>{$ct}</p> 
     </td> 
     <td> 
      <form method=\"post\" action=\"". htmlentities($_SERVER['PHP_SELF']) ."\" id=\"delf\"> 
       <input type=\"hidden\" value=\"{$fruuid}\" /> 
       <input type=\"checkbox\" name=\"add[]\" value=\"{$fruuid}\" id=\"a_t_game\" /> 
      <form> 
     </td> 
    </tr>\n"; 
    } 
?> 
+0

それはあなたのコードを私のために修正した良い仕事です。サーバー自体は、別の形です。そこにあってはいけません - 削除されました。今はすべてが動いています。 – AviateX14

0

あなたの問題はここにある:

は、私はあなたがより多くのこのような何かを示唆

$arr = array($user_uid); 

の$ user_uidはすでに$ _POSTの配列です。それを再び配列にキャストすると2次元になります。

これを試してください。

if($_POST['add'] == true) { 
    $user_uid = $_POST['add']; 
} 
foreach($user_uid as $userId) { .... 
+0

これはエラーをスローアップします。 foreach()に無効な引数が指定されました。 – AviateX14

0

$ user_uidは既に配列であり、それを配列にラッピングして多次元配列になっているようです。それは配列だかどうかを確認するためにテストの$ user_uidを考えてみましょう。そして、

if(!is_array($user_uid)) { 
    $arr = array($user_uid); 
} else { 
    $arr = $user_uid; 
} 

、私はあなたのコードは、あなたが期待するものを行うと確信しています。

関連する問題