Jump to content

Can this code be made smoother?


cssfreakie

Recommended Posts

Hi all,

 

I was playing a bit around with results from a database and thought lets give them a nice order in a table, so i thought i set the class per row, so my style sheet can finish it. This is what i got and it works. But some 6th sense whispers me that this can be done smoother. If anyone has ideas or tips let me know i have a lot to learn in php. and after all want to be a good code writer in php.

 

// start table
echo '<table class="users">
    <th>name</th><th>email</th><th>active</th>';
$odd = 1;
$num = 1;
while($row = mysqli_fetch_assoc($result)){
//
if( $odd == $num%2 ){
       $evenodd = 'odd';
       $num++;
    }else{
       $evenodd = 'even';
       $num++;
    }
//
   echo'<tr class="'.$evenodd.'"><td>'.$row['name'].'</td><td>'.$row['email'].'</td><td>'.$row['accept'].'</td><tr>';
}
echo '</table>';

 

thanks ::)

Link to comment
Share on other sites

It could be condensed a little by using the ternary operator, but there's nothing wrong with the way you have it now. Some people don't like using ternaries; it's all a matter of preference. I assume you'll be using the $odd variable somewhere, but if not it can be removed.

 

// start table
echo '<table class="users">
    <th>name</th><th>email</th><th>active</th>';
$odd = 1;
$num = 1;
while($row = mysqli_fetch_assoc($result)) {
   $evenodd = $num % 2 === 0 ? 'even' : 'odd';
   echo'<tr class="'.$evenodd.'"><td>'.$row['name'].'</td><td>'.$row['email'].'</td><td>'.$row['accept'].'</td><tr>';
   $num++;
}
echo '</table>';

Link to comment
Share on other sites

Well, actually, you can do this in CSS:

 

tr:nth-child(even) { background: #ccc }
tr:nth-child(odd) { background: #fff }

 

Then you have no need for the $evenodd variable.

 

// start table
echo '<table class="users"><th>name</th><th>email</th><th>active</th>';
while($row = mysqli_fetch_assoc($result)){
    echo '<tr><td>'.$row['name'].'</td><td>'.$row['email'].'</td><td>'.$row['accept'].'</td><tr>';
}
echo '</table>';

Note that this isn't currently supported by ALL major browsers, but as far as I'm aware it works on Chrome, Firefox, Safari and I think Opera supports it too. Internet Explorer doesn't, but then again you could just use your own code just fine. I would suggest Pikachu's code (above).

Link to comment
Share on other sites

Thanks all, I always designed any website i made to be able to work with ie 5 and up, and since some retards still use it i keep it that way untill MS invites me to the funeral of those retards. That's as far as css goes :)

 

But i really like the looks of that code pickachu gave. Although i find the ternary operator hard to read. In my mind i have to start at the middle than move back and than forth again.  I also used that $odd = 1; because i never worked with the % which is still a bit odd for me since the explanation of it says 25%2  has a remainder of 1 for me 25/2 is 12.5 but i guess i need to round it up.

 

Any ways thanks alot guys, i am getting a little better every day at php::)

 

 

Link to comment
Share on other sites

Thanks all, I always designed any website i made to be able to work with ie 5 and up

Ugh, must be hell supporting that.

 

Although i find the ternary operator hard to read. In my mind i have to start at the middle than move back and than forth again.

Like Pika said, it's all about preference.  You compromise either way.  One is easier to read while longer and vice versa.

 

Any ways thanks alot guys, i am getting a little better every day at php

Good, you'll be an expert in no time ;D

Link to comment
Share on other sites

Thanks all, I always designed any website i made to be able to work with ie 5 and up

Ugh, must be hell supporting that.

 

nah ones you know the bugs, it's pretty easy, in fact IE 5 is easier than ie 6 ::) But i do use some extra cool css3 things to award people for having a decent browser. But only for extra's , just like javascript ::)

Thanks! :D

Link to comment
Share on other sites

Thanks all, I always designed any website i made to be able to work with ie 5 and up, and since some retards still use it i keep it that way untill MS invites me to the funeral of those retards. That's as far as css goes :)

 

But i really like the looks of that code pickachu gave. Although i find the ternary operator hard to read. In my mind i have to start at the middle than move back and than forth again.  I also used that $odd = 1; because i never worked with the % which is still a bit odd for me since the explanation of it says 25%2  has a remainder of 1 for me 25/2 is 12.5 but i guess i need to round it up.

 

Any ways thanks alot guys, i am getting a little better every day at php::)

 

25 / 2 = 12 (with a remainder of 1)
12 * 2 + 1 = 25

24 / 2 = 12
1 / 2 = .5

12 * 2 = 24
.5 * 2 = 1

 

Link to comment
Share on other sites

When using even/odd I always use true and false and keep alternating between them. Also you forgot a <tr> tag for your theads.

 

// start table
<table class="users">
   <tr>
      <th>name</th>
      <th>email</th>
      <th>active</th>
   </tr>
<?
   $even = true;

   while ($row = mysql_fetch_assoc($result)) {
?>
      <tr class="<?=($even ? 'even' : 'odd')?>">
         <td><?=$row['name']?></td>
         <td><?=$row['email']?></td>
         <td><?=$row['accept']?></td>
      <tr>
<?
      $even = !$even;             // Invert even to odd and vice-versa.
   }
?>
</table>

Link to comment
Share on other sites

When using even/odd I always use true and false and keep alternating between them. Also you forgot a <tr> tag for your theads.

 

// start table
<table class="users">
   <tr>
      <th>name</th>
      <th>email</th>
      <th>active</th>
   </tr>
<?
   $even = true;

   while ($row = mysql_fetch_assoc($result)) {
?>
      <tr class="<?=($even ? 'even' : 'odd')?>">
         <td><?=$row['name']?></td>
         <td><?=$row['email']?></td>
         <td><?=$row['accept']?></td>
      <tr>
<?
      $even = !$even;             // Invert even to odd and vice-versa.
   }
?>
</table>

 

Don't use shorttags. Ever. Seriously, I mean ever. Always use <?php.

Link to comment
Share on other sites

<php is fugly and for people who don't understand better. When I switched to short tags I had no intention of going back. Admit my code is neat ^^.

 

1. Your code is not neat - I'd say it's neater with the full tag.

2. Shortags are disabled by default in PHP5 and I'm pretty sure they're going to be deprecated soon.

 

They cause issues. They're wrong. You're wrong.

Link to comment
Share on other sites

Even if it's true that they aren't deprecated *yet*, the fact remains that they are no longer enabled by default, and as a result, do lead to code that is less portable.

 

From the PHP manual:

"Using short tags should be avoided when developing applications or libraries that are meant for redistribution, or deployment on PHP servers which are not under your control, because short tags may not be supported on the target server. For portable, redistributable code, be sure not to use short tags."

Link to comment
Share on other sites

1. They don't cause issues for most PHP users and are encouraged in PHP5/6.

2. You're wrong, mate.

Maybe not most, but still cause issues.  Where did you hear that short tags are encouraged in PHP5/6?  I don't believe that at all.

Actually, short tags were going to be deprecated in PHP6 but they decided against it for reasons I do not know.

Link to comment
Share on other sites

No they're not, Pikachu  >:( Short tags are enabled in 95% of webservers.

 

And in the future Zend Framework encourages use of short tags. They've never been deprecated and will never be.

My favorite part was when the noob tried to tell one of the top 20 programmers on this site that he was wrong....
Link to comment
Share on other sites

No they're not, Pikachu  >:( Short tags are enabled in 95% of webservers.

 

And in the future Zend Framework encourages use of short tags. They've never been deprecated and will never be.

My favorite part was when the noob tried to tell one of the top 20 programmers on this site that he was wrong....

You're the noob. Let people code as they want as long as it works. I'm just not a big fan of redundant code.

Link to comment
Share on other sites

No they're not, Pikachu  >:( Short tags are enabled in 95% of webservers.

 

And in the future Zend Framework encourages use of short tags. They've never been deprecated and will never be.

My favorite part was when the noob tried to tell one of the top 20 programmers on this site that he was wrong....

 

It's not like I'm never wrong, because I'm wrong fairly often. But in this instance, I was mostly right and in that regard I stand by what I said. In fact it does seem that short tags have been removed from the deprecation list. But support for them is not enabled by default, leading to problems with code portability. The percentage of users who have problems with short tags will continue to increase as more hosts upgrade php versions, while the percentage of users who have problems with full tag syntax will remain the same, 0%. The question here is really why would you take a chance on something that might work 80% of the time, when you can use something that will work 100% of the time?

 

And in reference to ZF, the closest I can find to a recommendation for using short tags is not a recommendation at all. It's more of a "We no longer recommend it, but if you're so stubborn that you must use short tags, at least have the sense to enable it in the php.ini file, rather than use Zend_Stream_Wrapper()".

In our examples, we make use of PHP long tags: <?php. We also favor the use of » alternate syntax for control structures. These are convenient shorthands to use when writing view scripts, as they make the constructs more terse, keep statements on single lines, and eliminate the need to hunt for brackets within HTML.

 

In previous versions, we often recommended using short tags (<? and <?=), as they make the view scripts slightly less verbose. However, the default for the php.ini short_open_tag setting is typically off in production or on shared hosts -- making their use not terribly portable. If you use template XML in view scripts, short open tags will cause the templates to fail validation. Finally, if you use short tags when short_open_tag is off, the view scripts will either cause errors or simply echo PHP code back to the viewer.

 

If, despite these warnings, you wish to use short tags but they are disabled, you have two options:

 

    *

 

      Turn on short tags in your .htaccess file:

        1.

            php_value "short_open_tag" "on"

 

      This will only be possible if you are allowed to create and utilize .htaccess files. This directive can also be added to your httpd.conf file.

    *

 

      Enable an optional stream wrapper to convert short tags to long tags on the fly:

        1.

            $view->setUseStreamWrapper(true);

 

      This registers Zend_View_Stream as a stream wrapper for view scripts, and will ensure that your code continues to work as if short tags were enabled.

 

Warning

View Stream Wrapper Degrades Performance

 

Usage of the stream wrapper will degrade performance of your application, though actual benchmarks are unavailable to quantify the amount of degradation. We recommend that you either enable short tags, convert your scripts to use full tags, or have a good partial and/or full page content caching strategy in place.

 

Link to comment
Share on other sites

Sorry for my late reply guys I was sleeping ::) And i see this thread is becoming a battlefield between short and long tags :)

 

Anyway thanks Abracadaver for giving the maths examples. It really helps in understanding this. Ihave done math, but never used that thing  ( % ) :)

 

<php is fugly and for people who don't understand better. When I switched to short tags I had no intention of going back. Admit my code is neat ^^.

 

I just use  the long tags since 3 extra letters could potentially save me a lot of time, like you said 95 %, means 5 % where it doesn't work (with .htaccess it seems you can).(i see it here and than on this forum, and when they adjust it to long tags it works) Any way thanks for the code above I Take it with me. And good thing pointing out the <tr> that was indeed missing. (didn't do a w3cvalidation ::)

 

Thanks guys for the help! And the only noob here is me so that settles the above discussion :)

 

P.s. noobs have the underdog position so i am glad to be one haha  ;D

 

 

 

 

Link to comment
Share on other sites

Ihave done math, but never used that thing  ( % )

 

LOL, if you'd like to look at the manual entry, it's the modulus operator. It's basically the same as all those years ago when you first started to learn how to divide numbers, and rather than start by teaching decimals, they taught that 15/4 was 3, with remainder of 3. Modulus returns that remainder.

Link to comment
Share on other sites

LOL, if you'd like to look at the manual entry, it's the modulus operator. It's basically the same as all those years ago when you first started to learn how to divide numbers, and rather than start by teaching decimals, they taught that 15/4 was 3, with remainder of 3. Modulus returns that remainder.

 

Well i can do the math  ;D but it seems they should rewrite the IQ crap  8) or i should pay more attention :D Any ways  thanks for pointing it out, it's carved into my brains now :D

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.