Solved

Check $row for value and amend

Posted on 2014-02-10
11
356 Views
Last Modified: 2014-02-10
I  need help to check a row for a value and change it. The data is being returned to flexigrid via json and works well and without any errors. however, what I am trying to do is check the row; $row['status'] for a value = 1 and if that row is that value then change it to value = "In".

I have tried various ways to code using an if statement, but it does not error, just dosen't display the data in the grid. What is the correct way to code this row? Thanks

$results = mysql_query($sql);
while ($row = mysql_fetch_assoc($results)) {
$data['rows'][] = array(
'id' => $row['Id'],
'cell' => array($row['Id'], $row['rack'].$row['column'].'-'.$row['row'].'-'.$row['bay'], $row['customer'], $dropdown, $service, $row['department'], if ($row['status']==1){$row['status']="In"}, $row['custref'], $row['size'], $row['authorisation'], date('d/m/Y H:m:s',strtotime($row['intake_date'])), date('d/m/Y',strtotime($row['destroy_date']))));
}
echo $json->encode($data);

Open in new window

0
Comment
Question by:peter-cooper
  • 6
  • 4
11 Comments
 
LVL 42

Expert Comment

by:Chris Stanyon
Comment Utility
You could set the value before building the array

$status = ($row['status']==1) ? 'In' : $row['status'] ;

$data['rows'][] = array(
'id' => $row['Id'],
'cell' => array($row['Id'], $row['rack'].$row['column'].'-'.$row['row'].'-'.$row['bay'], $row['customer'], $dropdown, $service, $row['department'], $status, $row['custref'], $row['size'], $row['authorisation'], date('d/m/Y H:m:s',strtotime($row['intake_date'])), date('d/m/Y',strtotime($row['destroy_date']))));
}

Open in new window

FYI, mysql_* is deprecated in PHP - you should switch to using mysqli or PDO ;)
0
 
LVL 42

Expert Comment

by:Chris Stanyon
Comment Utility
0
 
LVL 108

Expert Comment

by:Ray Paseur
Comment Utility
I can't test this but I think the right answer might be here.  I reformatted it a bit for readability and added error checking on the query.

Going forward, you're going to need the information in this article.  PHP 5.5 is current, so the removal of MySQL from PHP is already underway.

$results = mysql_query($sql);
if (!$results) trigger_error('FAIL: $sql BECAUSE: ' . mysql_error(), E_USER_ERROR);
while ($row = mysql_fetch_assoc($results)) 
{
    if ($row['status'] == '1') $row['status'] = 'In';
    $data['rows'][] = array
    ( 'id' => $row['Id']
    , 'cell' => array
      ( $row['Id']
      , $row['rack'].$row['column'].'-'.$row['row'].'-'.$row['bay']
      , $row['customer']
      , $dropdown
      , $service
      , $row['department']
      , $row['status']
      , $row['custref']
      , $row['size']
      , $row['authorisation']
      , date('d/m/Y H:m:s',strtotime($row['intake_date']))
      , date('d/m/Y',strtotime($row['destroy_date']))
      )
    )
    ;
}
echo $json->encode($data);

Open in new window

0
 
LVL 42

Expert Comment

by:Chris Stanyon
Comment Utility
Had the ternary operator the wrong way round in my code - edited for correction :)
0
 

Author Comment

by:peter-cooper
Comment Utility
@Chris How would I use an elseif with your ternary. Thanks
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 42

Accepted Solution

by:
Chris Stanyon earned 500 total points
Comment Utility
The ternary is simply a shortcut for if /else. If you need ifelse, then write it out in full:

<?php
$status = '';

if ( $row['status']==1 ):
   $status = 'In';
elseif ( $row['status']==2 ):
   $status = 'Out';
else:
   $status = $row['status'];
endif;

Open in new window

If you have more that a couple of conditions to check against, then a switch statement may be easier:

$status = '';

switch ( $row['status'] ):
   case 1:
      $status = 'In';
      break;

   case 2:
      $status = 'Out';
      break;

   case 3:
      $status = 'Something Else';
      break;

   default;
      $status = $row['status'];

endswitch;

Open in new window

0
 

Author Comment

by:peter-cooper
Comment Utility
Thank you Chris. Just one more question. Suppose I have a column in a grid that contains different values that I need to change such as; 1,2,3 and I need them to become In,Out,Temp what is the best way to code that. With my existing code as you have helped with, it changes a value based on one condition ie; if (i==2){echo "Hello"} and based on 'i' will change the condition accordingly. But what if I want to change all values in a column not based on a condition. so 1 becomes In, 2 become Out etc. Thanks
0
 

Author Comment

by:peter-cooper
Comment Utility
Sorry chris. My bad. Please ignore last comment as the switch seems to handle all scenarios. Many thanks
0
 

Author Closing Comment

by:peter-cooper
Comment Utility
Thanks once again
0
 
LVL 42

Expert Comment

by:Chris Stanyon
Comment Utility
Hi Peter,

Not entirely sure I follow. Reading through your original post, it looks like you build each row of your grid from a database loop, creating an array element for each row. If that's the case, then putting the if / switch statement inside the loop will run the condition for each row to come out of your database. Does something like this answer your question:

while ($row = mysql_fetch_assoc($results)) {
   $status = '';
   switch ( $row['status'] ):
      case 1:
         $status = 'In';
         break;

      case 2:
         $status = 'Out';
         break;

      case 3:
         $status = 'Temp';
         break;

      default;
         $status = $row['status'];

   endswitch;
   
   $data['rows'][] = array(
      'id' => $row['Id'],
      'cell' => array(
         $row['Id'],
         $row['rack'].$row['column'].'-'.$row['row'].'-'.$row['bay'],
         $row['customer'],
         $dropdown,
         $service,
         $row['department'],
         $status,
         $row['custref'],
         $row['size'],
         $row['authorisation'],
         date('d/m/Y H:m:s',strtotime($row['intake_date'])),
         date('d/m/Y',strtotime($row['destroy_date']))
      )
   );
}
echo $json->encode($data);

Open in new window

0
 
LVL 42

Expert Comment

by:Chris Stanyon
Comment Utility
Oops - cross posted. Pleased you got it working :)
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Although it can be difficult to imagine, someday your child will have a career of his or her own. He or she will likely start a family, buy a home and start having their own children. So, while being a kid is still extremely important, it’s also …
This article discusses how to create an extensible mechanism for linked drop downs.
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now