Jump to content


Photo

MySQL DB to PHP Array to HTML Form to POST to SESSION and then...


  • Please log in to reply
3 replies to this topic

#1 freshrod

freshrod
  • Members
  • PipPip
  • Member
  • 25 posts

Posted 21 April 2006 - 05:03 AM

I posted before, but I managed to figure out that problem... kind of. Now I have a related, yet entirely new and exciting problem. Here's the deal.

I query the DB like so:
$query = "SELECT jobName, jobPay, jobDescription FROM jobs WHERE numAbil <= {$abilities} ORDER BY jobName ASC";

I slap it into an array like so:
while ($row = @ mysql_fetch_row($result)) {
print "\n<tr>";

foreach ($row as $data)
print "\n\t<td><center> {$data} </center></td>";
print "\n\t<td><input type=\"radio\" name=\"job\" value=\"{$data[0]}\"></td>";
print "\n</tr>";
}

What I'm trying to do here is get the jobName from the query to be the value for the radio button.

Then it's POSTed to the next page, where I assign it to a SESSION like so:
$_SESSION['job'] = $_POST['job'];

Then I try and get it to display like so:
<p align="center"><font size="2"><b>JOB</b>: <?php print $_SESSION['job']; ?>

The weird thing is, that all I get displayed is the first letter of the jobDescription, which I thought would be $data[2], but why only the first letter I can't begin to guess.

Any thoughts?

If you need more code or better description, please ask. Thanks.
Nothing is foolproof to a talented fool.

#2 gizmola

gizmola
  • Administrators
  • Advanced Member
  • 4,664 posts
  • LocationLos Angeles, CA USA

Posted 21 April 2006 - 05:54 AM

[!--quoteo(post=367099:date=Apr 20 2006, 10:03 PM:name=freshrod)--][div class=\'quotetop\']QUOTE(freshrod @ Apr 20 2006, 10:03 PM) View Post[/div][div class=\'quotemain\'][!--quotec--]
I posted before, but I managed to figure out that problem... kind of. Now I have a related, yet entirely new and exciting problem. Here's the deal.

I query the DB like so:
$query = "SELECT jobName, jobPay, jobDescription FROM jobs WHERE numAbil <= {$abilities} ORDER BY jobName ASC";

I slap it into an array like so:
while ($row = @ mysql_fetch_row($result)) {
print "\n<tr>";

foreach ($row as $data)
print "\n\t<td><center> {$data} </center></td>";
print "\n\t<td><input type=\"radio\" name=\"job\" value=\"{$data[0]}\"></td>";
print "\n</tr>";
}

What I'm trying to do here is get the jobName from the query to be the value for the radio button.


If you need more code or better description, please ask. Thanks.
[/quote]

My best guess is that you aren't accounting for the nature of mysql_fetch_row which returns a mixed array of indexed keys and associative keys, combined with the fact that you foreach this into a string, and then attempt to treat it like an array -- which is fine, but what you get is an array of characters, hence your one character output. But more than that, there's really no benefit to the obfuscation or the foreach, since you know exactly what columns you want to use, and where. I'd recommend you use instead mysql_fetch_assoc(). Your code would then be something like:

while ($row = mysql_fetch_assoc($result)) {
     print "\n<tr>";
    
    print "\n\t<td><center> {$row['jobName']} </center></td>";
    print "\n\t<td><input type=\"radio\" name=\"job\" value=\"{$row['jobName']}\"></td>"; 
    print "\n</tr>";
}        


#3 freshrod

freshrod
  • Members
  • PipPip
  • Member
  • 25 posts

Posted 21 April 2006 - 01:52 PM

Thanks for the response gizmola.

I guess I didn't explain well enough what the page is supposed to be doing. I want the query to populate a form that lists out the available jobs based on the number of abilities. The form will display the jobName, jobPay, jobDescription, and then have a radio button with which they select which job they want. That much is working...at least it looks as if it's working.

Thanks for pointing out the difference between mysql_fetch_row() and mysql_fetch_assoc(). But even after changing that, it's still only displaying the first letter of the jobDescription.

Perhaps if you saw all the code it would help

<form id="jobs" name="jobs" action="char_title.php" method="post">
<tr>
<td align="center" valign="middle" width="33%">
<?php

switch ($_SESSION['breed']) {
  case 'Human':
    $abilities = 3;
    break;
  case 'Altered':
    $abilities = 2;
    break;
  case 'Mutant':
    $abilities = 1;
    break;
  default:
    echo "ERROR!!!";
}

function displayJobs ($result) {
    print "<h3>Avalible Jobs for " . $_SESSION['breed'] . "</h3>\n";
    print "\n<table>\n<tr>\n" . 
          "\n\t<th>Job Title</th>" .
          "\n\t<th>Job Pay</th>" .
          "\n\t<th>Job Description</th>" .
          "\n\t<th>Select One</th>" .
          "\n</tr>";
          
    while ($row = @ mysql_fetch_assoc($result)) {
          print "\n<tr>";
          
          foreach ($row as $data)
                    print "\n\t<td><center> {$data} </center></td>";
            print "\n\t<td><input type=\"radio\" name=\"job\" value=\"{$data[jobName]}\"></td>"; 
            print "\n</tr>";
        }
    print "\n</table>\n";
}

$query = "SELECT jobName, jobPay, jobDescription FROM jobs WHERE numAbil <= {$abilities} ORDER BY jobName ASC";

if (!($connection = mysql_connect("localhost", "*****", "*****")))
   die ("Cannot Connect to DB!");
   
if (!(mysql_select_db("*****", $connection)))
   showerror();
   
if (!($result = mysql_query ($query, $connection)))
   showerror();
   
displayJobs($result);

?>

</td>
</tr>
</tbody></table>
  </center>
</div>

<p><center>
<input name="job_butt" value="LET IT BE SO!" type="submit">
</center></p>
</form>

Any help is appreciated in advance.
Nothing is foolproof to a talented fool.

#4 freshrod

freshrod
  • Members
  • PipPip
  • Member
  • 25 posts

Posted 21 April 2006 - 02:37 PM

AH-HA!!! I got it to work (of course getting it to work doesn't always mean I did it RIGHT, hahaha).

All I did was switch out where I had:

value="{$data[jobName]}"
for
value="{$row[jobName]}"

and it seems to be working.

Thanks for the help.
Nothing is foolproof to a talented fool.




0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users