флажки в цикле - PHP - PullRequest
       3

флажки в цикле - PHP

1 голос
/ 02 февраля 2012

Я пытаюсь использовать флажки для добавления пользователей в определенную группу, но у меня возникают проблемы с определением, как именно работает логика. Список пользователей извлекается из оператора sql и является echo'd. Я хотел бы отобразить флажок рядом с каждым именем, и если этот флажок установлен, пользователь будет добавлен в список с помощью команды implode, чтобы я мог хранить элементы в одном столбце.

Вот выходные данные, которые отображают список, содержащий пользователей, их местоположение и флажок. Я хотел бы иметь возможность установить флажок, а затем добавить их в группу на основе их идентификатора пользователя ($ friendNum).

Обновление: флажки работают и правильно вводятся в базу данных, но входные данные в первой форме не вводятся. (название, описание, дата, местонахождение)

  $myUsername = $_SESSION['userid'];       
        if(isset($myUsername)){
            echo '<table><form method="post" action="event.php" name="groupInvite"> 
                <tr><td> Event Title:</td><td> <input type="text" name="eventTitle" /></td></tr>
                <tr><td>Event Description:</td><td> <textarea name="eventDescription" /></textarea></td></tr>
                <tr><td>Event Date: </td><td><input type="text" name="eventDate" /></td></tr>
                <tr><td>Event Location:</td><td><input type="text" name="eventLocation" /></td></tr></table>
                <table><tr><td>Username </td><td> Location</td><td>Invite To Event</td></tr>'; 

        $friends = mysql_query("SELECT userid1 as friendId FROM friends WHERE userid2 = $myUsername AND friendstatus = 1
                                UNION SELECT userid2 as friendId FROM friends WHERE userid1 = $myUsername AND friendstatus = 1");

            while($friend = mysql_fetch_array($friends)){
                $userID = $friend['friendId'];
                $friendNum = mysql_query("select * from users where userid = $userID");
                $friendID = mysql_fetch_array($friendNum);
                $userLocation = mysql_query("select * from userinfo where userid='$userID'");
                $locationResult = mysql_fetch_array($userLocation);
                $locationResultArray = $locationResult['userlocation'];
                $locationExplode = explode("~","$locationResultArray");

        echo '<tr>
                <td><a href="profile.php?userid=' . $friendID['userid'] . '">' . $friendID['username'] .  '</a></td>
                <td>' . $locationExplode[0] . ', ' . $locationExplode[1] . '</td>
                <td><input type="checkbox" name="friendID[]" value='.$friendID['userid'].' /></td></tr>';
                }   
            echo '<tr><td> <input type="submit" name="eventSubmit" value="Create Event" />
            </td></tr>
            </form></table>';     
    }   

      if(isset($_POST['eventSubmit'])){
            $userList = implode("~",$_POST['friendID']);
            $sql = "INSERT INTO events VALUES('$userList',...)";  
             $result = mysql_query($sql);   
            echo "Event Created"; //just used for testing purposes
            }  
    }                       

Ответы [ 2 ]

3 голосов
/ 02 февраля 2012

Есть много вещей не так с этим.

  1. Все входные элементы должны быть внутри <form>.то есть, откройте форму, прежде чем начинать выводить флажки.Это может работать в некоторых браузерах, но не во всех.Недавно я столкнулся с такой проблемой, когда только данные в форме будут отправлены, но это произошло только в Firefox.
  2. Установите значение каждого флажка для идентификатора друга;нет необходимости хранить его в скрытом элементе, а затем попытаться сопоставить его позже.Имя каждого текстового поля должно совпадать с добавленным к нему [].например, <input type="checkbox" value="428" name="friends[]" />.Это заставит PHP организовать данные $_POST в массив для вас, чтобы вы могли легко зацикливаться на них.
  3. Не храните все идентификаторы друзей в одном столбце в БД.Позже это станет кошмаром для запросов.Используйте таблицу «многие ко многим» (гугл, если не уверен).
  4. На самом деле это не ошибка, но ваша HTML-структура также может потребовать дополнительной работы.Лучший дизайн может выглядеть следующим образом:

пример:

<ul>
    <li><label><input type="checkbox" value="428" name="friends[]" /> John Smith</label></li>
    <li><label><input type="checkbox" value="235" name="friends[]" /> Jane Doe</label></li>
</ul>

Ярлыки сделают флажок более легким для нажатия (можно щелкнуть в любом месте на ярлыке), и я считаю,это проще для программ чтения с экрана тоже.<ul> здесь более уместно семантически, потому что это список друзей, которых вы пытаетесь вывести.

3 голосов
/ 02 февраля 2012

Установите флажки в виде массива

HTML

<input type="checkbox" value="1" name="myVariable[]" />
<input type="checkbox" value="2" name="myVariable[]" />

PHP (после проверки)

$stringToInsert = implode("~",$_POST['myVariable']);

Результат, если оба проверены

1~2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...