css class toewijzen afhankelijk van db waarde

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rick de Graaf

Rick de Graaf

06/09/2009 18:55:00
Quote Anchor link
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...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
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?
 
PHP hulp

PHP hulp

22/12/2024 21:23:48
 
- SanThe -

- SanThe -

06/09/2009 18:57:00
Quote Anchor link
Ik zou niet weten wat daar niet aan werkt.
 
Rick de Graaf

Rick de Graaf

06/09/2009 18:59:00
Quote Anchor link
Misschien moet ik even vermelden dat 'status' niet in de url staat...
Als ik
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$_GET
vervang voor
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$row
gebeurt er ook niets.
 
- SanThe -

- SanThe -

06/09/2009 19:03:00
Quote Anchor link
$row zal niet bestaan in die function.

Zet dit bovenin je script.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

// rest
?>
 
Steen

steen

06/09/2009 19:03:00
Quote Anchor link
Geef maar net iets meer code, zoals de SQL Query
 
Rick de Graaf

Rick de Graaf

06/09/2009 19:06:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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>
      </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'>"
. nl2br( $row['nr']) . "</td>  
        <td valign='top'>"
. nl2br( $row['klant']) . "</td>  
        <td valign='top'>"
. 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>";
showstatus();
?>


de functie staat nu nog even onderaan om te testen...
Gewijzigd op 01/01/1970 01:00:00 door Rick de Graaf
 
Steen

steen

06/09/2009 20:05:00
Quote Anchor link
showstatus binnen de while, een waarde meegeven en $_GET vervangen door $row
 
Steen

steen

06/09/2009 20:07:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>
      </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'>"
. nl2br( $row['nr']) . "</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>";
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function showstatus($status){
    if ( $status == "Pending"){
        echo "<span class=\"pending\">Pending</span>";
        }
else {
        echo "<br /><br />No information found in the status row. Please check your code.";
        }
}

?>


Gelieve Niet Bumpen::
Twee of meer keer achter elkaar in een topic posten heet bumpen. Bumpen is pas na 24 uur toegestaan en kan een reden zijn voor de admins en moderators om een topic te sluiten. Gebruik indien nodig de Afbeelding knop om je tekst aan te passen.

SanThe.
Gewijzigd op 01/01/1970 01:00:00 door steen
 
Rick de Graaf

Rick de Graaf

06/09/2009 23:47:00
Quote Anchor link
Bedankt! En ik snap het :)

Hij echoed nu alleen eerst de else en dan de if waarde, en dit doet hij bovenaan de tabel, hoe kan dit? De functie wordt binnen de while loop en de td tags uitgevoerd?

** Update:

Ik heb nu nog 2 waarden toegevoegd in een elseif statement, en deze werkt nu goed. Hij laat nu niet meer de else echo zien. Hij laat alles nog wel zien boven de tabel.
Gewijzigd op 01/01/1970 01:00:00 door Rick de Graaf
 
Rick de Graaf

Rick de Graaf

08/09/2009 00:57:00
Quote Anchor link
Iemand een idee en een hint in wat ik de oplossing ik kan vinden?
 
Jan Koehoorn

Jan Koehoorn

08/09/2009 08:06:00
Quote Anchor link
Hier heb je drie kolommen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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>
      </tr>"
;
?>

Hier ineens vijf:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
echo "<tr>  
        <td valign='top'>"
. nl2br( $row['nr']) . "</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>"
;
}

?>

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

Rick de Graaf

08/09/2009 09:37:00
Quote Anchor link
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).

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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>";
?>
Gewijzigd op 01/01/1970 01:00:00 door Rick de Graaf
 
Rick de Graaf

Rick de Graaf

10/09/2009 09:50:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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>";
?>
Gewijzigd op 01/01/1970 01:00:00 door Rick de Graaf
 
Jurgen assaasas

Jurgen assaasas

10/09/2009 10:47:00
Quote Anchor link
Ik zou zo doen:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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.
Gewijzigd op 01/01/1970 01:00:00 door Jurgen assaasas
 
Rick de Graaf

Rick de Graaf

10/09/2009 10:57:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door Rick de Graaf
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.