Jump to content

Form passing incorrect values.


TimUSA

Recommended Posts

i am writing this script for use as an include in joomla and the directphp plugin so in my joomla article i have:

<?php
include 'test/conducttest.php';
conducttest();
?>

 

Ok now my issue!

the form in this function is passing only the values for the last item in the loop rather than for the selected radio item when submitted.

so when say for example the radio selected is:

ID

TEST TYPE        

UNIQUE TEST ID

AVAILABLE

5

Adolescent Clinical

50021629

1

 

and the last item in the list is:

ID

TEST TYPE        

UNIQUE TEST ID

AVAILABLE

4

Adult Clinical

12341629

1

 

When the form is submitted even if the 1st item is selected, it returns the value for the second one. I am sorta new to php so any suggestions will be appreciated.

Here is my full code:

<?php
function conducttest() {
    //GET JOOMLA USER ID & USERNAME FOR LOGGED USER
    $user =& JFactory::getUser();
    $userID = $user->id;
    
    //GET JOOMLA DATABASE OBJECTS
    $db =& JFactory::getDBO();
    
    //NEW TESTS QUERY (what purchased test are available for use with 'item_available' == '1' {unused test} and matching current 'user_id')
    $new_query =    "
                SELECT *
                FROM crt_transactionHistory
                WHERE user_id = ".$userID." AND item_available = '1'
                ORDER BY item_name, id
                ";
    $db->setQuery($new_query);
    $new = $db->loadAssocList();
    
    //OPEN TESTS QUERY (what purchased test are available for use with 'item_available' == '2' {resume test} and matching current 'user_id')
    $resume_query =    "
                SELECT *
                FROM crt_transactionHistory
                WHERE user_id = ".$userID." AND item_available = '2'
                ORDER BY item_name, id
                ";
    $db->setQuery($resume_query);
    $resume = $db->loadAssocList();
    
        //DISPLAY use_test FORM
        if(!isset($_POST['test'])) {
            //SELECT FORM: WHICH TEST WOULD YOU LIKE TO USE?
            echo '
                <fieldset>
                <table>
                <form method="post" action="'.$PHP_SELF.'">';
                if (empty($new)) {
                    echo '
                    <th colspan="3"align="left">NO NEW TESTS AVAILABLE</th>';
                }
                else {     
                    echo '
                    <th colspan="3"align="left">NEW TESTS AVAILABLE</th>
                    <tr>
                        <td width="75px">SELECT</td>
                        <td width="50px">ID</td>
                        <td width="150px">TEST TYPE</td>
                        <td width="150px">UNIQUE TEST ID</td>
                    <tr>';
                    foreach ($new as $result1) {
                    echo ' 
                    <tr>
                        <td><input type="radio" value="' .$result1['id']. '" name="test_id"></td>
                        <td>'.$result1['id'].'</td>
                        <td><input type="hidden" value="'.$result1['item_name'].'" name="item_name">'.$result1['item_name'].'</td>
                        <td><input type="hidden" value="'.$result1['item_number'].'" name="item_number">'.$result1['item_number'].'</td>
                        <input type="hidden" value="'.$result1['item_available'].'" name="item_available">
                        <input type="hidden" value="'.$userID.'" name="userID">
                    <tr>';   
                    }
                }
                echo '
                </table>
                <hr />
                <table>';
                if (empty($resume)) {
                    echo '
                    <th colspan="3"align="left">NO TESTS TO RESUME</th>';
                }
                else {     
                    echo '
                    <th colspan="3"align="left">RESUME TEST</th>
                    <tr>
                        <td width="75px">SELECT</td>
                        <td width="50px">ID</td>
                        <td width="150px">TEST TYPE</td>
                        <td width="150px">UNIQUE TEST ID</td>
                    <tr>';
                    foreach ($resume as $result2) {
                    echo ' 
                    <tr>
                        <td><input type="radio" value="' .$result2['id']. '" name="test_id"></td>
                        <td>'.$result2['id'].'</td>
                        <td><input type="hidden" value="'.$result2['item_name'].'" name="item_name">'.$result2['item_name'].'</td>
                        <td><input type="hidden" value="'.$result2['item_number'].'" name="item_number">'.$result2['item_number'].'</td>
                        <input type="hidden" value="'.$result2['item_available'].'" name="item_available">
                        <input type="hidden" value="'.$userID.'" name="userID">
                    <tr>';   
                    }
                }
                echo '
                </table>
                </fieldset>
                <input type="submit" name="test" value="Conduct Test" />
                </form>
                ';                
            }
        //NOW A TEST HAS BEEN SELECTED FOR USE
        if(isset($_POST['test'])) {
            $test_id = $_POST['test_id'];
            $item_name = $_POST['item_name'];
            $item_number = $_POST['item_number'];
            $item_available = $_POST['item_available'];
            $userID = $_POST['userID'];
            echo $test_id.'<br />';
            echo $item_name.'<br />';
            echo $item_number.'<br />';
            echo $item_available.'<br />';
            echo $userID.'<br />';
            //IF THIS IS A NEW TEST...
            if ($item_available == "1") {
                echo 'new test';
            }
            //IF WE ARE RESUMING A TEST...
            elseif ($item_available == "2") {
                echo 'resume test';
            }
        }
}
?>

Link to comment
Share on other sites

The hidden inputs you have for each result all have the same names, so every time you echo another result their values get overwritten. You should append the id of each result to the name of each hidden field, like so:

'<td><input type="hidden" value="'.$result1['item_name'].'" name="item_name_'.$result1['id'].'">'.$result1['item_name'].'</td>'

That way when you access them through $_POST, you have to also append the id in order to access them:

$id = $_POST['test_id'];
$_POST["item_name_$id"];

 

I would not even include any field other than the id in your form, other than for display purposes. I would fetch the corresponding test from the database based on the ID alone, and check if it is actually available. Any inputs on your page, hidden or not, can be modified so you shouldn't trust them so much.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.