принять / отклонить отправить кнопки зацикливание с php - PullRequest
0 голосов
/ 11 февраля 2012

Я пытаюсь разрешить пользователю принимать / отклонять запросы на событие с помощью кнопок отправки.Информация зацикливается и отображается в строке (имя пользователя, местоположение, принять, отклонить).

В данный момент отображаются 2 пользователя;Пользователь 1 и Пользователь 2 (текущие для тестирования).В любом случае, я пытаюсь получить правильный ID пользователя для работы с правильным именем пользователя.В настоящее время, независимо от того, какого пользователя я принимаю или отклоняю, отображается пользователь 2.Я попытался установить значение идентификатора пользователя на основе скрытого ввода, но он работает неправильно.

Вот мой код.

for($i=0;$i<count($userExplode)-1;$i++){
            $user = mysql_query("select userid,username from users where userid = ".$userExplode[$i]." ");
            $user = mysql_fetch_array($user);
            $userLoc = mysql_query("select userLocation from userinfo where userid = ".$userExplode[$i]." ");
            $location = mysql_fetch_array($userLoc);
            $locationExplode = explode("~",$location['userLocation']);

//the displayed output is working correctly so I know it's setting $user['userid'] properly 
            echo '<form method="post"><table><tr><td><a href="profile.php?userid=' . $user['userid'] . '">' . $user['username'] . '</a></td>
                <td>' . $locationExplode[0] . ', ' . $locationExplode[1] . '</td>
                <td><input type="hidden" name="userReq" value='.$user['userid'].'></td>
                <td><input type="submit" name="accept" value="Accept Request" ></td>
                <td><input type="submit" name="decline" value="Decline Request" ></td></tr>';   
            }
                echo '</table></form>';
        }
            if(isset($_POST['accept'])){
                echo $_POST['userReq']; //displays user 2 even if I click user 1
                    }
            if(isset($_POST['decline'])){
                echo $_POST['userReq']; //also displays user 2 even if i click user 1 
            }   
     }

Ответы [ 2 ]

2 голосов
/ 11 февраля 2012

С вашим кодом много ошибок:

  • Вы не закрываете for в цикле
  • в вашей форме нет действий
  • вы начинаете новую таблицу для каждого цикла

Замените кнопки отправки на якоря и добавьте туда параметры.Затем вы можете настроить привязку так, чтобы она выглядела как кнопка.

<input type="submit" name="decline" value="Decline Request" >

становится

echo "<a href="yourfile.php?userid=".$user['userid'].">Decline request</a>";

Удалите все <form> s и загрузите все в 1 таблицу.* Результат:

<?php
if(isset($_GET['action']) AND isset($_GET['userid'])){

    switch($_GET['action']){
        case "accept":
            // do whatever
        break;
        case "decline":
            // do whatever
        break;
        default:
            die('something wrong');
        break;

    }

}

echo '<table width="100%">';

for($i=0; $i <= count($userExplode); $i++){
  $q = "
        SELECT u.userid,u.username, userLocation
          FROM users u
    INNER JOIN userLocation ul ON u.userid = ul.userid 
         WHERE u.userid = ".$userExplode[$i]."
  ";
  $rs = mysql_query($q) or die(mysql_error());      
  $user = mysql_fetch_array($rs);

  $locationExplode = explode("~",$user['userLocation']);

  //the displayed output is working correctly so I know it's setting $user['userid'] properly 
  echo '<tr><td><a href="profile.php?userid=' . $user['userid'] . '">' . $user['username'] . '</a></td>'.
       '<td>' . $locationExplode[0] . ', ' . $locationExplode[1] . '</td>'.
       '<td><a href="yourfile.php?userid=' . $user['userid'] . '&action=accept">Accept Request</a></td>'.
       '<td><a href="yourfile.php?userid=' . $user['userid'] . '&action=decline">Decline Request</a></td></tr>';   

 }

echo '</table>';

Я думаю, что это только вершина айсберга .. Как вы, например, получили $userExplode?Это очень странно и нелогично.Я предполагаю, что вы сначала запустите запрос, чтобы получить всех пользователей, а затем выполните цикл с этим для?

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

В вашем примере похоже, что у вас есть некоторые проблемы с кодом. Вот немного убрано:

    for($i=0;$i<count($userExplode)-1;$i++) {
        $user = mysql_query("select userid,username from users where userid = ".$userExplode[$i]." LIMIT 1");
        $user = mysql_fetch_array($user);
        $userLoc = mysql_query("select userLocation from userinfo where userid = ".$userExplode[$i]." LIMIT 1");
        $location = mysql_fetch_array($userLoc);
        $locationExplode = explode("~",$location['userLocation']);
        echo '<form method="post" action=""><table><tr><td><a href="profile.php?userid=' . $user['userid'] . '">' . $user['username'] . '</a></td>
            <td>' . $locationExplode[0] . ', ' . $locationExplode[1] . '</td>
            <td><input type="hidden" name="userReq" value='.$user['userid'].'></td>
            <td><input type="submit" name="accept" value="Accept Request" ></td>
            <td><input type="submit" name="decline" value="Decline Request" ></td></tr>';   
        echo '</table></form>';

     }

     if(isset($_POST['accept'])){
            echo $_POST['userReq']; //displays user 2 even if I click user 1
     }

     if(isset($_POST['decline'])){
            echo $_POST['userReq']; //also displays user 2 even if i click user 1         
     }   

На основе вашего кода передаваемый массив должен быть:

     $users = "1|2";
     $userExplode=explode("|",$users)  // or whatever your delimiter is

Чтобы проверить, выполните var_dump($userExplode); до запуска вашего цикла, чтобы убедиться, что вы взорвали записи.

Также будет полезен исходный дамп исходной страницы. Если бы вы могли опубликовать это, я мог бы увидеть, как ваш код отображает HTML-форму.

...