wright67uk Posted May 31, 2011 Share Posted May 31, 2011 Hello, Im sure this is an easy one, but I just cant get my head around this. Where my results are displayed and there is a result without a webaddress or email address, I dont want "br" to be output. I pressume I need an If / else if statement for $row, but Im unsure of how I would incorporate this into my array? and im also unsure of how to say IF $row == NULL, - dont display anything. <?php $subtype = $_GET['subtype']; echo "<h1>$subtype</h1>"; $result = mysql_query("SELECT name, phone, email, WebAddress, postcode FROM business WHERE subtype ='$subtype' AND confirmed ='Yes' ORDER BY name"); echo mysql_error(); while($row = mysql_fetch_array($result)) { echo $row['name'] . "<br>"; echo $row ['phone'] . "<br>"; echo $row['email'] . "<br>"; echo $row['WebAddress'] . "<br>"; echo $row['postcode'] ; $postcode = str_replace(' ','+',$row['postcode']); echo "<p class=link><a href='/gmap.php?postcode=$postcode'>Map</a></p><br>"; } ?> Quote Link to comment https://forums.phpfreaks.com/topic/238036-how-to-handle-emtpy-mysql-query-reults/ Share on other sites More sharing options...
Pikachu2000 Posted May 31, 2011 Share Posted May 31, 2011 Since $row is an array, you can use foreach() to unset() any empties, then if postcode is not empty, format the link, add it to the $row array and implode it with <br> as the glue and echo it. For this to work properly, it was necessary to change mysql_fetch_array() to mysql_fetch_assoc(). This code isn't tested, but it may work as is. Give it a try and see what happens. <?php $subtype = $_GET['subtype']; echo "<h1>$subtype</h1>"; $query = "SELECT name, phone, email, WebAddress, postcode FROM business WHERE subtype ='$subtype' AND confirmed ='Yes' ORDER BY name"; if( $result = mysql_query($query) ) { echo mysql_error(); while($row = mysql_fetch_assoc($result) ) { foreach( $row as $k => $v ) { if( empty($v) ) { unset($row[$k]); } } if( !empty($row['postcode']) ) { $row['postcode_link'] = "<p class=link><a href='/gmap.php?postcode=" . urlencode($row['postcode']) . "'>Map</a></p><br>"; } echo implode( '<br>', $row); } } Quote Link to comment https://forums.phpfreaks.com/topic/238036-how-to-handle-emtpy-mysql-query-reults/#findComment-1223218 Share on other sites More sharing options...
wright67uk Posted May 31, 2011 Author Share Posted May 31, 2011 Thankyou very much, that worked well first time. Any chance you could talk through; foreach( $row as $k => $v ) {if( empty($v) ) {unset($row[$k]);} what is actually happening here. I feel a bit cheeky using your code and not learning what its doing! Quote Link to comment https://forums.phpfreaks.com/topic/238036-how-to-handle-emtpy-mysql-query-reults/#findComment-1223231 Share on other sites More sharing options...
Pikachu2000 Posted May 31, 2011 Share Posted May 31, 2011 When you foreach through the array, it assigns the value of the key to $k and the value of the actual element to $v. So for each element of the array, if $v is empty, it will unset the element completely. I.E. it isn't even there anymore. And now that I think of it, there should also be a trim() there so a value that's nothing but whitespace won't be kept as a valid value. Add the line I commented in the code, and it should be good to go. while($row = mysql_fetch_assoc($result) ) { $row = array_map('trim', $row); // <--- ADD THIS LINE foreach( $row as $k => $v ) { Quote Link to comment https://forums.phpfreaks.com/topic/238036-how-to-handle-emtpy-mysql-query-reults/#findComment-1223246 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.