2012-02-11 51 views
0

我想让用户通过提交按钮接受/拒绝事件的请求。信息被循环显示(用户名,位置,接受,拒绝)。接受/拒绝提交按钮循环与PHP

现在2个用户正在显示;用户1和用户2(当前用于测试)。无论如何,我试图让正确的用户名使用正确的用户名。目前,无论我接受或拒绝哪个用户,都会显示用户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

有很多你的代码错误:

  • 你不会在环路
  • 关闭for的存在表单
  • 你在无动作开始一个新的表中的每个循环

更换锚通过提交按钮的,并在那里添加参数。然后,您可以将锚点的样式设置为按钮。

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

成为

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

删除所有<form>秒和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例如?这是非常奇怪和不合逻辑的。我假设你首先运行一个查询来获取所有用户,然后循环使用它?

+0

你应该使用'$ _GET'而不是'$ _POST' – Gaurav 2012-02-11 19:59:03

+0

感谢您的提示!使用$ _GET来安全吗?我想我只需再次检查其他页面,只有在事件的创建者是访问该页面的页面时才允许。 – user1104854 2012-02-11 20:02:42

+0

如果您安全使用它是安全的。只有管​​理员才可以提出这些要求。 – Richard 2012-02-11 20:04:21

1

在你的例子中,它看起来像你有一些代码问题。这是清理了一点:

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表单的。