Goedenavond,

Ik ben bezig met een systeem waarin onder andere de status van een order wordt weergegeven. Dit zijn 3 verschillende statussen (Pending, Wating, Closed) en deze wil ik weergeven elk met een eigen css class.

Nu heb ik het volgende geprobeerd, maar dat werkt niet. Gezocht op internet maar ik kom er niet uit...

function showstatus(){
	if ( $_GET['status'] == "Pending"){
		echo "<span class=\"pending\">Pending</span>";
		} else {
		echo "<br /><br />No information found in the status row. Please check your code.";
		}
};


Iemand die mij in de goede richting kan wijzen?
Jan Koehoorn schreef op 08.09.2009 08:06
Hier heb je drie kolommen:

Hier ineens vijf:

Verder zou ik het gebruik van single en double quotes omdraaien. Nu krijg je single quotes in je XHTML.


Klopt, dit had ik ook al gezien en aangepast; onderstaand de huidige code (die niet werkt).

<?php
include('config.php'); 
echo "<table border=1 cellpadding=5 cellspacing=0 > 
        <tr>
        <td><b>Nr</b></td> 
        <td><b>Klant</b></td> 
        <td><b>Status</b></td>
		<td></td> 
		<td></td> 
      </tr>"; 
$result = mysql_query("SELECT * FROM `order` ORDER BY `id` DESC") or trigger_error(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 
echo "<tr>  
        <td valign='top'><a href=index.php?page=viewinfo&id={$row['id']}>" . nl2br( $row['nr']) . "</a></td>  
        <td valign='top'>" . nl2br( $row['klant']) . "</td>  
        <td valign='top'>" . showstatus(nl2br( $row['status']) ) . "</td>
        <td valign='top'><a href=index.php?page=edit&id={$row['id']}>Edit</a></td>
        <td valign='top'><a href=index.php?page=tasks&id={$row['id']}>Tasks</a></td> 
      </tr>"; 
} 
echo "</table>"; 
echo "<br /><br /><a href=index.php?page=new>New Row</a>";
?> 
Ik heb het opgelost door de td tags in de functie te zetten.
Het werkt, maar ik vind het niet ideaal, overzicht wordt er een beetje onduidelijk van. Onderstaand in ieder geval de werkende code:

De Functie:
<?php
function show_status($status){
    if ( $status == "Pending"){
        echo "<td class=\"pending\">Pending</td>";
        } elseif ( $status == "Waiting"){
        echo "<td class=\"waiting\">Waiting</td>";
        } elseif ( $status == "Closed"){
        echo "<td class=\"closed\">Closed</td>";
        } else {
        echo "No information found in the status row. Please check your code.";
        }
?>
}


De pagina view:
<?php
//Get and display orders from the database
echo "<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\" > 
        <tr>
        <td><b>Ordernumber</b></td> 
        <td><b>Client</b></td> 
        <td><b>Status</b></td>
		<td></td> 
		<td></td> 
      </tr>"; 
$result = mysql_query("SELECT * FROM `$table_orders` ORDER BY `$sort_default` DESC") or trigger_error(mysql_error()); 
while($row = mysql_fetch_array($result)){ 
foreach($row AS $key => $value) { $row[$key] = stripslashes($value); } 
echo "<tr>  
        <td valign=\"top\"><a href=index.php?page=viewinfo&id={$row['id']}>" . nl2br( $row['ordernumber']) . "</a></td>  
        <td valign=\"top\">" . nl2br( $row['client']) . "</td>";
		 show_status(nl2br( $row['status']) );
echo   "<td valign=\"top\"><a href=index.php?page=edit&id={$row['id']}>Edit</a></td>
        <td valign=\"top\"><a href=index.php?page=tasks&id={$row['id']}>Tasks</a></td> 
     </tr>"; 
} 
echo "</table>"; 
echo "<br /><br /><a href=index.php?page=neworder>New Row</a>";
?>
Ik zou zo doen:


<?php
function showStatus($status){
switch($status)
{
case 0: //bijv pending
$class = 'pendingorder';
break;

case 1: //bijv waiting
$class = 'waitingorder';
break;

case 2: //bijv closed
$class = "closedorder"
break;

default;
throw new exception('Unkown orderstatus: No information found in the status row. Please check your code.'):
break;

return $class;
}

//hier table enzo

while($row= mysql_fetch_array($result)){
echo '<tr><td class="'.showStatus($row['status']).'">'.$row['iets'].'</td></tr>';

}
?>

Stuk netter en overzichtelijker. En opmaak doe je in CSS. Dus die align troep is onnodig.

Overigens de namen, pending, waiting en closed zou ik uit de DB halen dmv een switch in SQL. Niet nodig om dit allemaal in PHP nog te verwerken.
Jurgen schreef op 10.09.2009 10:47
Ik zou zo doen:


Goede kritiek! Ik ga dit even proberen, en de waarden al uit de database halen. Die align troep moet er inderdaad uit.

Edit: Ik heb het aan de praat gekregen. Hoe bedoel je precies alles uit de database halen met een switch? De functie al in de query verwerken ofzo?

Edit 2: De functie wordt nu niet aangeroepen bij de td class, maar gewoon de waarde van status wordt daar nu ingevuld. Ik roep dus de functie niet meer op. Met de functie op die plaats kreeg ik het niet aan de praat. De class zal altijd gelijk zijn aan de waarde in de database, dan kan ik die functie toch verder achterwege laten? Of is dit niet verstandig, en waarom niet?

Reageren