Gast Posted July 8, 2006 Share Posted July 8, 2006 I know it sounds stupid, but let me explain.For a project myself and obsidian are working on, I have come across a problem. I wont explain the whole project here but here is the problem:I need to display 6 "stables", in as in three rows of two. I have done this with HTML, however each user will at some point buy these "stables" so they need to be dynamic, as some of them have a different background image as they are unavailable.They may only have bought 3 stables, so the first two of the stables on the first row are available, and the first on the second row. This is a little hard to explain in words, so:Available | AvailableAvailable | UnavailableUnavailable | UnavailableThis is all OK, I have managed to generate all the stables with some available and some unavailable depending on how many the user has bought. But here comes the problem.... The user will have an "animal" that will be in one of the stables. However, they may not have an animal in all of their available stables.Both the stables and animals are stored in a database, so I run the query to get the stables and in a while() loop echo the actual stables in HTML. But I need to then run the query for the "animals" to be in the stables at the same time. I dont think it is possible to run two conditions in a while() loop, and the way the HTML is constructed I cannot put the loop inside the other.PLEASE HELP! I can provide a link and code if needed. Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/ Share on other sites More sharing options...
kenrbnsn Posted July 8, 2006 Share Posted July 8, 2006 Can you post how your tables are defined? This should be fairly straight forward depending on how the tables are defined. You should only need one loop.Ken Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54865 Share on other sites More sharing options...
Gast Posted July 8, 2006 Author Share Posted July 8, 2006 Sure, below is the PHP code. I apologise if it is a little confusing...[code]<?phpfunction showStables($user_id) { // Check if user has any stables to start with $sql = mysql_query("SELECT * FROM choco_stables WHERE stable_user = ".$user_id." ORDER BY stable_id") or die(mysql_error()); // Number of stables... $numStables = mysql_num_rows($sql); // If no stables... if($numStables == 0) { print(" <div style='width:515px; padding:5px; background-color:#EFEFEF; border:1px solid #999999;'> You do not have any stables. In order to look after your Chocobos, you will need to purchase one. However, as it is your first one, we will give you one for <b>free</b>, but in the future, if you want more, it will cost you <b>2,500 gil</b> for each one!<br /> <center> <input type='button' class='submits' style='width:200px; margin-top:15px; margin-bottom:15px; font-size:14px; background-image:url(images/orange_fade.jpg); font-weight:bold' value='Get My First Stable' /> </center> </div> "); // Already have some stables... } else { // Start variables... $counter = 1; $per_row = 2; $stableCount = 1; // Start table... $temp = '<table align="center" width="400" border="0" cellspacing="0" cellpadding="0" style="background-image:url(images/stable_floor.gif)">'; while($row = mysql_fetch_assoc($sql)) { $stableLeft = rand(1, 3); $stableRight = rand(4, 6); if($counter == 1) { $temp .= "<tr>"; } if(($stableCount % 2) == 1) { $temp .= '<td width="200" valign="top" class="stable" style="background-image:url(images/stable_background_'.$stableLeft.'.gif);">'; // Here is where each animal will be displayed on the left... $temp.= '</td>'; } else { $temp .= '<td width="200" valign="top" class="stable" style="background-image:url(images/stable_background_'.$stableRight.'.gif);">'; // Here is where each animal will be displayed on the right... $temp.= '</td>'; } if($counter == $per_row) { $temp .= "</tr>"; $counter = 1; } else { $counter++; } // Increase counter $stableCount++; } if($counter != 1) { while($counter <= $per_row) { // Odd number of stables? if(($numStables % 2) == 1) { $temp .= ' <td valign="top" class="stable" style="background-image:url(images/stable_background_dull_right.gif);"> </td> '; $counter++; } $temp .= "</tr>"; } } $temp .= "</table>"; print($temp); } }?>[/code] Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54872 Share on other sites More sharing options...
kenrbnsn Posted July 8, 2006 Share Posted July 8, 2006 What I'm looking for is the how your database tables are defined ... fields.Ken Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54874 Share on other sites More sharing options...
Gast Posted July 8, 2006 Author Share Posted July 8, 2006 Sorry, I misunderstood. That may help above, though.Yes, I have one table which stores the users, simply [b]users[/b], which contains the usual, [i]user_id, user_name, user_email[/i].For the stables, the table is [b]choco_stables[/b]:[i]stable_id (Primary), stable_user (Foreign)[/i]Obviously the "stable_user" relates to the "user_id".And finally the actual animals, is the table [b]choco_chocobos[/b]:[i]choco_id (Primary), choco_owner (Foreign), choco_level, choco_name...[i]Hopefully that may be a little more helpful. :) Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54879 Share on other sites More sharing options...
kenrbnsn Posted July 8, 2006 Share Posted July 8, 2006 If I understand your tables correctly, here's the basic loop I would use (you would have to fit your display requirements in):[code]<?php$q1 = "Select * from choco_stables";$rs1 = mysql_query($q1) or die("Problem getting stables, query: $q1<br>" . mysql_error());while ($rw1 = mysql_fetch_assoc($rs1)) { if ($rw1['stable_user'] > 0) { // or however you test for an owned stable $q2 = "select * from users where user_id = " . $rw1['stable_user']; $rs2 = mysql_query($q2) or die("Problem getting owner of stable, query: $q2<br>" . mysql_error()); $rw2 = mysql_fetch_assoc($rs2); $q3 = "select * from choco_chocobos where choco_owner = " . $rw2['user_id']; $rs3 = mysql_query($q3) or die("Problem getting animal, query: $q3<br>" . mysql_error()); if (mysql_num_rows(rs3) > 0) { // This person owns an animal $rw3 = mysql_fetch_assoc($rs3);//// more code associated with the animal// }//// more code associated with the owner of the stable// }?>[/code]Ken Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54900 Share on other sites More sharing options...
Gast Posted July 8, 2006 Author Share Posted July 8, 2006 Thanks, Ken.When I added the [b]echo $rw3['choco_name'];[/b] part, it echoes the name of the animal three times. This is not right, it has the number of stables right, but it should only echo the name once. Any other ideas?[code]<?php$q1 = "Select * from choco_stables";$rs1 = mysql_query($q1) or die("Problem getting stables, query: $q1<br>" . mysql_error());while ($rw1 = mysql_fetch_assoc($rs1)) { if ($rw1['stable_user'] > 0) { // or however you test for an owned stable $q2 = "select * from users where user_id = " . $rw1['stable_user']; $rs2 = mysql_query($q2) or die("Problem getting owner of stable, query: $q2<br>" . mysql_error()); $rw2 = mysql_fetch_assoc($rs2); $q3 = "select * from choco_chocobos where choco_owner = " . $rw2['user_id']; $rs3 = mysql_query($q3) or die("Problem getting animal, query: $q3<br>" . mysql_error()); if (mysql_num_rows($rs3) > 0) { // This person owns an animal $rw3 = mysql_fetch_assoc($rs3); echo $rw3['choco_name'];//// more code associated with the animal// }//// more code associated with the owner of the stable// } } }?>[/code] Quote Link to comment https://forums.phpfreaks.com/topic/14039-problem-with-the-need-for-two-simultaneous-while-loops/#findComment-54904 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.