user1104854
user1104854

Reputation: 2167

accept/decline submit buttons looping with php

I'm trying to allow a user to accept/decline requests for an event through submit buttons. Information is looped and displayed in a row (username, location, accept,decline).

Right now 2 users are being displayed; User 1 and User 2(current ones for testing). Anyway, I'm trying to get the correct userid to work with the correct username. Currently, regardless of which user I accept or decline, user 2 is displayed. I tried to set the value of the userid based on a hidden input but it's not working correctly.

Here is my code.

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

Upvotes: 0

Views: 4535

Answers (2)

Richard
Richard

Reputation: 4415

There is a lot wrong with your code:

  • You don't close the for's in the loop
  • there is no action on your form
  • you're starting a new table for each loop

Replace the submit button's by anchors and add the parameters in there. Then you can style the anchor to look like a button.

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

becomes

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

Remove all the <form>s and load everything in 1 table.

Result:

<?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>';

I think this is only the tip of the iceberg.. How do you get $userExplode for example? It is very weird and illogical. I assume that you first run a query to get all the users and then loop with this for?

Upvotes: 2

seanbreeden
seanbreeden

Reputation: 6097

In your example it looks like you have some code issues. Here it is cleaned up a little:

    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         
     }   

Based on your code, the array that's being passed should be:

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

To test, do a var_dump($userExplode); prior to starting your loop to make sure you've exploded the entries going it.

A source dump of the original page would be helpful as well. If you could post that then I could see how your code is rendering the html form.

Upvotes: 1

Related Questions