user1662306
user1662306

Reputation: 502

drilling down in PHP using hyperlinks

I am a novice at PHP and i have encountered a problem with the following code...

<?php 
 // Connects to Database 
 mysql_connect("localhost", "root") or die(mysql_error()); 
 mysql_select_db("test") or die(mysql_error()); 
 $data = mysql_query("SELECT country_id, country_name FROM country, channels WHERE channels.channel_id = country.channel_id AND channels.channel_id = '1'") 
 or die(mysql_error()); 
  echo "<table border=0 cellpadding=15>";
echo "<tr align = center bgcolor=white>
<td><b>Country ID</b></td><td><b>Country Name</b></td>" ; 
 while (mysql_fetch_row($data)) {
$cid = mysql_result($data, 1);
$cname = mysql_result($data, 2);

# inserts value into table as a hyperlink

echo "<tr align = center bgcolor=white><td>$cid</td><td><a href=view_country_detail.php?cid=$cid>$cname</td>";
}

# displays table

print '</table>';

 ?>

to explain the problem i am getting, i am after generated hyperlinks to drill down to the companies which share the to be clicked country's id from the code above to then display a similar layout on the 'view_country_detail' page. i cant work out why the output for the table gives me a repeated row for the first two id's for the country column in the db. any help would be greatly appreciated as i am totally lost here. Thanks

Upvotes: 0

Views: 761

Answers (3)

the_red_baron
the_red_baron

Reputation: 888

Try structuring your while loop as follows:

while($row = mysql_fetch_array($data)){
      $cid = $row[0];  //if you have the column names, replace 0 with 'column_name'
      $cname = $row[1];

      //then echo statement
 }

Also, mysql_* functions have started the deprecation process and should no longer be used, even the php manual pages state the use of mysql_* is discouraged. Look into using the similar mysqli_* functions or PDO.

Upvotes: 1

andrewsi
andrewsi

Reputation: 10732

Try this:

while ($row = mysql_fetch_row($data)) {
    $cid = $row[0];
    $cname = $row[1];
    ...
}

mysql_fetch_row returns an array.

HOWEVER

You should look at stopping using the mysql_* functions - they're being deprecated. If you switch to PDO or mysqli, it helps make your code more secure, too.

Upvotes: 0

Mike Brant
Mike Brant

Reputation: 71384

I don't understand why you use mysql_fetch_row and then don't want to actually use the row you fetch.

You should not be using mysql_result here. What you are doing is fetching data from row 1 of the result set and then data from row 2 regardless of which row the pointer is on in your while loop.

Try this:

while ($row = mysql_fetch_assoc($data)) {
    $cid = $row['country_id'];
    $cname = $row['country_name'];
}

I personally find it much more readable in code to reference the fields by the associative keys used when using mysql_fetch_assoc or mysql_fetch_array.

Upvotes: 2

Related Questions