only one Posted May 10, 2007 Share Posted May 10, 2007 hi, i dont know much about using loops.. i know a little about while loops so i tried using one for trying to display how many pages of message you have in your inbox.. (this froze my computer) heres some of my code echo "<form METHOD=get><input type=hidden name=view value=Message><table width=70% border=0 cellspacing=1 cellpadding=0> <tr><td background=images/forum_board.jpg height=25 width=0></td><td background=images/forum_board.jpg height=25 width=33%><b><center>Subject</center></b></td><td background=images/forum_board.jpg height=25 width=33%><b><center>From</center></b></td><td background=images/forum_board.jpg height=25 width=33%><b><center>Date</center></td></tr>"; $slimit = $action*15; $llimit = ($action+1)*15; $pms = mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]' ORDER BY id DESC LIMIT $slimit, $llimit"); while ($message = mysql_fetch_array($pms)) { $from = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$message[pm_from]'")); echo "<tr><td bgcolor=#111111 height=25 width=0><input type=radio name=action value=$message[id] /></td><td bgcolor=#111111 width=33%>- <a href='?page=MessageCenter&view=ViewMessage&action=$message[id]' title='$message[text]'>$message[subject]</a></td><td width=33% bgcolor=#111111><a href=?page=Profile&view=$from[id]> $from[username]</a> [$from[id]]</td><td bgcolor=#111111 width=33%> $message[date]</td></tr>";} echo "</table><table width=70%><tr><td><div align=left><img src=images/arrows_up.png> <input type=submit name=page value=Delete class=form size=5> <input type=submit name=page value=Reply class=form size=5></td></tr></table></form>"; //the code i need help with $pmrows = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]'")); while($pmrows>$llimit){ $i++; $p=$l-1; echo "<a href=?page=MessageCenter&action=$p>$i</a>"; } Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/ Share on other sites More sharing options...
trq Posted May 10, 2007 Share Posted May 10, 2007 this froze my computer You prbably had an infinant loop somewhere, code like this... $pmrows = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]'")); Is terrible, you never check if your query succeeds, but this line here.... while($pmrows>$llimit){ You never increment $pmrows, so this loop will go forever, or until your cpu is fried. Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-249748 Share on other sites More sharing options...
only one Posted May 10, 2007 Author Share Posted May 10, 2007 exactly.. but thats not the point, how do i fix it? Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-249751 Share on other sites More sharing options...
trq Posted May 10, 2007 Share Posted May 10, 2007 Look for a tutorial on using mysql's JOIN. You should be able to get what you want in one query. executing queries within loops is VERY inficient. Besides that, instead of calling mysql_* fuctions within each other, sperate them and check for errors. eg; <?php if ($result = mysql_query($sql)) { if (mysql_num_rows($result)) { // it is now safe to fetch data. while($row = mysql_fetch_assoc($result)) { echo $row['foo']; } } else { // no record found. } else { // query failed. } ?> Allot more code, but allot easier to debug, and wont generate errorrs if something goes wrong. PS: Notice the indentation? This makes your code more readable. The reason Im not using any of your code as an example is simply because I cannot be bothered trying to read it. Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-249758 Share on other sites More sharing options...
only one Posted May 10, 2007 Author Share Posted May 10, 2007 ill put it in php tags... the mysql isnt my porblem... im not sure what loop i should be using and how i should be using it echo "<form METHOD=get><input type=hidden name=view value=Message><table width=70% border=0 cellspacing=1 cellpadding=0> <tr><td background=images/forum_board.jpg height=25 width=0></td><td background=images/forum_board.jpg height=25 width=33%><b><center>Subject</center></b></td><td background=images/forum_board.jpg height=25 width=33%><b><center>From</center></b></td><td background=images/forum_board.jpg height=25 width=33%><b><center>Date</center></td></tr>"; $slimit = $action*15; $llimit = ($action+1)*15; $pms = mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]' ORDER BY id DESC LIMIT $slimit, $llimit"); while ($message = mysql_fetch_array($pms)) { $from = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$message[pm_from]'")); echo "<tr><td bgcolor=#111111 height=25 width=0><input type=radio name=action value=$message[id] /></td><td bgcolor=#111111 width=33%>- <a href='?page=MessageCenter&view=ViewMessage&action=$message[id]' title='$message[text]'>$message[subject]</a></td><td width=33% bgcolor=#111111><a href=?page=Profile&view=$from[id]> $from[username]</a> [$from[id]]</td><td bgcolor=#111111 width=33%> $message[date]</td></tr>";} echo "</table><table width=70%><tr><td><div align=left><img src=images/arrows_up.png> <input type=submit name=page value=Delete class=form size=5> <input type=submit name=page value=Reply class=form size=5></td></tr></table></form>"; //the code i need help with $pmrows = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]'")); while($pmrows>$llimit){ $i++; $p=$l-1; echo "<a href=?page=MessageCenter&action=$p>$i</a>"; } you may notice the reason it looks messy is beacuase its just a big echo... Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-250062 Share on other sites More sharing options...
only one Posted May 11, 2007 Author Share Posted May 11, 2007 bump.. Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-250345 Share on other sites More sharing options...
chronister Posted May 11, 2007 Share Posted May 11, 2007 A couple tips. 1) indent code to make it easier to read, I just got into this habit about a month or 2 ago.... much easier to debug and find problems. if($this > $that) { while(1 < 2) { echo 'do something here'; } } is a lot easier to read and decipher, than if($this > $that){while(1 < 2){echo 'do something here';}} 2) There is no need to echo large ass chunks of pure HTML code. Drop in and out of php as you need. e.g. I started to do some indenting to make it easier to read, but that will take a while...but here is an incomplete example of what I mean. Notice the shorthand echo statement. <?= ?> Very handy when you have a couple php vars scattered throught a large chunk of HTML <form METHOD=get> <input type=hidden name=view value=Message> <table width=70% border=0 cellspacing=1 cellpadding=0> <tr> <td background=images/forum_board.jpg height=25 width=0> </td> <td background=images/forum_board.jpg height=25 width=33%> <b> <center>Subject</center> </b> </td> <td background=images/forum_board.jpg height=25 width=33%> <b><center>From</center></b></td> <td background=images/forum_board.jpg height=25 width=33%><b><center>Date</center></td></tr> <?php $slimit = $action*15; $llimit = ($action+1)*15; $pms = mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]' ORDER BY id DESC LIMIT $slimit, $llimit"); while ($message = mysql_fetch_array($pms)) { $from = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE id='$message[pm_from]'")); ?> <tr><td bgcolor=#111111 height=25 width=0> <input type=radio name=action value=<?=$message[id] ?> /></td><td bgcolor=#111111 width=33%>- <a href='?page=MessageCenter&view=ViewMessage&action=<?=$message[id]?>' title='<?=$message[text] ?>'>$message[subject]</a></td><td width=33% bgcolor=#111111><a href=?page=Profile&view=$from[id]> $from[username]</a> [$from[id]]</td><td bgcolor=#111111 width=33%> $message[date]</td></tr>";} </table><table width=70%><tr><td><div align=left><img src=images/arrows_up.png> <input type=submit name=page value=Delete class=form size=5> <input type=submit name=page value=Reply class=form size=5></td></tr></table></form>"; <?php //the code i need help with $pmrows = mysql_num_rows(mysql_query("SELECT * FROM pm WHERE pm_to='$get_user[id]'")); while($pmrows>$llimit){ $i++; $p=$l-1; ?> <a href=?page=MessageCenter&action=<?=$p ?>><?=$i ?></a> <?php } ?> Notice how the HTML is html, and the PHP is PHP. You can mix php with HTML very well. If you follow these 2 suggestions you will get a lot more help around here. Folks don't want to try to decipher messy code thats mixed with a bunch of \" and such. Also, you should make it habit to make sure your values in html are always surrounded by " " like here <input type=hidden name=view value=Message> could give problems, I have experienced these first hand because of this. It should be <input type="hidden" name="view" value="Message"> I know I did not actually help you with your issue, but that code is VERY difficult to read and decipher. Come back with the code cleaned up and your almost sure to get the problem solved pretty quick. Messy code like that is an almost surefire way to be ignored. I am not trying to be mean or anything, just trying to help you get better results on here Nate Quote Link to comment https://forums.phpfreaks.com/topic/50790-using-loops/#findComment-250383 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.