Обработка неизвестного количества флажков - PullRequest
0 голосов
/ 30 января 2012

Я создаю неизвестное количество флажков в моей форме, используя mysql, это число всегда будет меняться,

$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   
    }
    ?>

Когда форма отправляется и обрабатывается "create.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());
}

Все входные данные в порядке, кроме пользовательского идентификатора, который установлен как "Массив".Он также создает только одну строку, и мне нужна строка для каждого пользователя.

Я знаю, что это проблема с обработкой моего массива, это довольно очевидно, но я не имею ни малейшего представления о том, какпочини это.Любая помощь / указатели были бы отличной помощью!

Ответы [ 3 ]

0 голосов
/ 30 января 2012

Ваша проблема здесь:

$arr = array($user_uid);

$ user_uid уже является массивом в $ _POST;приведение к массиву снова сделает его двухмерным.

Попробуйте это.

if($_POST['add'] == true) {
     $user_uid = $_POST['add'];
}
foreach($user_uid as $userId) { ....
0 голосов
/ 30 января 2012

Кажется, что $ user_uid уже является массивом, и вы оборачиваете его в массив (снова), в результате чего получается многомерный массив.Попробуйте проверить $ user_uid, чтобы увидеть, является ли он массивом:

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

Затем, я думаю, ваш код будет делать то, что вы ожидаете.

0 голосов
/ 30 января 2012

$arr = array($user_uid); ваша проблема.Попробуйте просто $arr = $user_uid;, или даже отрежьте посредника и просто используйте $arr = $_POST["add"];.

РЕДАКТИРОВАТЬ

Существует ряд других вещей, которые также можно улучшить с помощью вашего кода.С одной стороны, это трудно читать.Я бы посоветовал немного его почистить и избегать переходов между HTML и PHP.

Другое дело, что вы должны избегать любых данных, поступающих в базу данных, которые могут быть получены из пользовательского ввода (например, $ _POST).Вы должны использовать mysql_real_escape_string.

В-третьих, форма с действием, указывающим на $_SERVER["PHP_SELF"], небезопасна.Он уязвим для межсайтовых скриптов (XSS).См. этот блог для более подробного описания уязвимости.

Я предлагаю вам сделать что-то более похожее на это:

<?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";
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...