Colori alternati per campi uguali e non

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Salve a tutti

ho un ulteriore inghippo sui duplicati.


La domanda è semplice:

Estraggo una tabella epr intero

ID NOME CITTA
1 Antonio Bari
2 Pasquale Venezia
3 Michele bari
4 Salvatore Palermo
5

quando estraggo al tabella con

PHP:
$sqlquery ="SELECT *  FROM Tabella  WHERE  Valore!='1' ORDER by Citta";
$result = mysql_query($sqlquery);

while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
 $citta= $linea['Citta'];
 $nome=$linea['Nome'];

	echo "\t<tr>\n";
   echo "<td bgcolor=\"$color\">".$nome."</td>";
      echo "<td bgcolor=\"$color\">".$citta."</td>";

Vorrei evidenziare a colori alternati le righe mantenendno lo stesso colore per le città uguali

Antonio - Bari ---->colore verde
Michele Bari ---Colore verde
Pasquale ---> Venezia colore rosso

Sono circa due ore che rimbambisco

Suggerimenti ?
 
Ciao,
per le righe alterne puoi provare cosi
PHP:
<style type="text/css">
    .alternate {
        background-color: #BABABA
    }
</style>
<?php
$i = 0;
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $citta = $linea['Citta'];
    $nome = $linea['Nome'];
    $alternate = ($i % 2 == 0) ? "" : " class='alternate'";
    echo "<tr $alternate>";
    echo "<td>" . $nome . "</td>";
    echo "<td>" . $citta . "</td>";
    echo "</tr>";
    $i++;
}
?>
Per le citta non ho capito, vuoi colorare solo la td della citta?

potresti creare un array per le citta verdi e uno per le citta rosse e poi verifichi in quale array si trova la citta
 
ciao ciric intanto grazie per ò

PHP:
    $alternate = ($i % 2 == 0) ? "" : " class='alternate'";

non fa al caso mio eprchè alterna le righe se questa è dispari o pari invece a me servirebbe alternare le righe in funzione delle Città

ripropongo l'esempio:

se l'estrazione della tabella
PHP:
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $citta = $linea['Citta'];
    $nome = $linea['Nome'];

    echo "<tr>";
    echo "<td>" . $nome . "</td>";
    echo "<td>" . $citta . "</td>";
    echo "</tr>";
    $i++;
}

mi restituisce

Antonio Bari
Michele Bari
Giovanni Potenza
Paolo Roma
Vicnenzo Palermo
Francesco Palermo

il codce deve alternare inq uesta maniera

Antonio Bari -----Rosso
Michele Bari-----Rosso
Giovanni Potenza----Verde
Paolo Roma-----Rosso
Vicnenzo Palermo---Verde
Francesco Palermo---Verde
Domenico Siragusa ---Rosso

quindi quando trova la citta ugale deve seguire il colore della stessa citta

e partiamo dal presuposto ch eio non conosco le città inserite nel database quindi non posso fare uno switch ne impostare una condizione sulle città stesse
 
ora ho capito,
forse la sto sparando grossa ( non ho testato), potresti provare qualcosa del genere
PHP:
<?php

$sqlquery = "SELECT *  FROM Tabella  WHERE  Valore!='1' ORDER by Citta";
$result = mysql_query($sqlquery);

$citta = "";
$color = "";
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
    if ($linea['Citta'] != $citta) {
        $color = ($color == "green") ? "red" : "green";
    }
    $citta = $linea['Citta'];
    $nome = $linea['Nome'];

    echo "\t<tr>\n";
    echo "<td bgcolor=\"$color\">" . $nome . "</td>";
    echo "<td bgcolor=\"$color\">" . $citta . "</td>";
}
?>
 
di solito quando dici, "non l'ho testato" entra al primo colpo :)


ma non è qeuesto il caso, mi colora tutte le righe in un unico colore.

potresti rispiegarmi questo?

PHP:
        $color = ($color == "green") ? "red" : "green";

so che è un if abbrviato ma non riesco a connettere la spiegazione.
 
potresti rispiegarmi questo?
Se la variabile ha valore "green" la cambiamo in "red" viceversa se è red tornerà green

ora lo testo
 
ah ok grazie

però credo sia questo che la manda fuori pista

PHP:
if ($linea['Citta'] != $citta) {

difatti si pone la condizione che $linea[' citta'] sia diverso da valore vuoto ma nella tabella so tutti diverso da vuoto quindi le colorerà tutte secondo l'else
 
a me funziona, ho tolto red per vedere meglio la differenza
PHP:
$citta = "";
$color = "";
echo "<table>";
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
    if ($linea['Citta'] != $citta) {
        $color = ($color == "green") ? "" : "green";
    }
    $citta = $linea['Citta'];
    $nome = $linea['Nome'];

    echo "\t<tr>\n";
    echo "<td bgcolor=\"$color\">" . $nome . "</td>";
    echo "<td bgcolor=\"$color\">" . $citta . "</td>";
    echo "</tr>";
}
echo "</table>";
ma nella tabella so tutti diverso da vuoto
E' vuoto solo a inizio ciclo per impostare il primo colore, alla seconda iterazione avrà il valore dell'iterazione precedente ovvero $citta = $linea['Citta'];
 
niente a me da tutto verde

non capisco :hammer:

non penso possa dipende dal fatto che la query è dentro un foreach, non dovvrebbe centrare niente

cmq ti postoil codice della query magari c'è una stupidaggine che mi sfugge

PHP:
foreach($id as $id_nome){

$sqlquery ="SELECT *  FROM tabella WHERE ID='{$id_nome}' AND Valore='1' ";
$result = mysql_query($sqlquery);

 $citta= "";
$color = "";
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
    if ($linea['Citta'] != $citta) {
        $color = ($color == "green") ? "red" : "green";
    }
$idx= $linea['ID'];

 $nome=$linea['Nome'];
 $citta=$linea['Citta'];
 $eta=$linea['Eta'];

 
	echo "\t<tr>\n";
   echo "<td bgcolor=\"$color\">".$citta."</td>";
      echo "<td bgcolor=\"$color\">".$nome."</td>";
      echo "<td bgcolor=\"$color\">".$eta."</td>";
	
	echo "\t</tr>\n";

	
}
}
 
cmq ti postoil codice della query magari c'è una stupidaggine che mi sfugge
hai messo green ovunque
PHP:
$color = ($color == "green") ? "green" : "green";
cambia
PHP:
$color = ($color == "green") ? "blue" : "green";

visto ora che hai modificato
 
prova al massimo a mettereun var_dump per vedere quante volte e cosa ti restituisce qwuella variabile
PHP:
if ($linea['Citta'] != $citta) {
        var_dump($color);
        $color = ($color == "green") ? "" : "green";
    }
 
o metti queste due fuori dal foreach
PHP:
 $citta= "";
$color = "";
EDIT : fuori vuol dire prima
 
Pesno di aver capitoda dove nasce il rpoblema

quell'array nasceva dall'estrazione con group di tutte le righe avente un campo in comune

non so perchè ma quello sfasava

ho rifatto una query in maniera più semplice e i colori fungono bene ora

grazie ciric
 
So che è passato molto tempo, ma ho cercato di adattare questo codice alla mia tabella.
Però i campi o meglio la colonna è completamente nera.
Vi posto il codice
PHP:
<?php
include 'conn.php';

echo '<br><br>';
echo "<span style=\"color: black; allign: center; font-size: 36pt\">SCHEDE IN ATTO</span>";

$sql = "SELECT id, tipologia,citta, via, civico, cognome, nome, date_format(data, '%d-%m-%Y     ore %H:%i') as data FROM interventi order by tipologia";
$res = mysql_query($sql) or die(mysql_error());
$i = 0; 
$tipologia= ""; 
$color = ""; 
while ($linea = mysql_fetch_array($res, MYSQL_ASSOC)) { 
    if ($linea['tipologia'] != $tipologia) { 
        $color = ($color == "green") ? "blue" : "green"; 
    } 
$idx= $linea['id']; 


 $tipologia=$linea['tipologia']; 

 
echo '
<table border="0" cellpadding="10" cellspacing="0">
<tr>
<td><b>data</b></td>
<td><b>tipologia</b></td>
<td><b>citta</b></td>
<td><b>via</b></td>
<td><b>civico</b></td>
<td><b>cognome</b></td>
<td><b>nome</b></td>
<td></td>
<td></td>
</tr>
 
	';
 
while ($row = mysql_fetch_array($res))

{
	echo '

<tr>
<td>' . $row['data'] . '</td>
<td bgcolor=\"$color\">' . $row['tipologia'] . '</td>
<td>' . $row['citta'] . '</td>
<td>' . $row['via'] . '</td>
<td>' . $row['civico'] . '</td>
<td>' . $row['cognome'] . '</td>
<td>' . $row['nome'] . '</td>
</tr>
 
		';
}
 
echo '</table>"';
     }

?>
dov'è l'inghippo? Immagine.jpg
 
Ultima modifica di un moderatore:
forse il problema è qui
PHP:
<td bgcolor=\"$color\">
modifica cosi
PHP:
<td bgcolor="' . $color . '">
non mi pare comunque corretto il codice: cicli due volte la query
forme meglio se fai cosi
PHP:
include 'conn.php';

echo '<br><br>';
echo "<span style=\"color: black; allign: center; font-size: 36pt\">SCHEDE IN ATTO</span>";

$sql = "SELECT id, tipologia,citta, via, civico, cognome, nome, date_format(data, '%d-%m-%Y ore %H:%i') as data FROM interventi order by tipologia";
$res = mysql_query($sql) or die(mysql_error());
$i = 0;
echo '
<table border="0" cellpadding="10" cellspacing="0">
<tr>
<td><b>data</b></td>
<td><b>tipologia</b></td>
<td><b>citta</b></td>
<td><b>via</b></td>
<td><b>civico</b></td>
<td><b>cognome</b></td>
<td><b>nome</b></td>
<td></td>
<td></td>
</tr>
';
$tipologia = "";
$color = "";
while ($row = mysql_fetch_array($res)) {
    if ($linea['tipologia'] != $tipologia) {
        $color = ($color == "green") ? "blue" : "green";
    }
    $idx = $linea['id'];
    $tipologia = $linea['tipologia'];
    echo '

<tr>
<td>' . $row['data'] . '</td>
<td bgcolor="' . $color . '">' . $row['tipologia'] . '</td>
<td>' . $row['citta'] . '</td>
<td>' . $row['via'] . '</td>
<td>' . $row['civico'] . '</td>
<td>' . $row['cognome'] . '</td>
<td>' . $row['nome'] . '</td>
</tr>

';
}

echo '</table>"';
 
ciao
ho fatto la prova con questo (non avevo voglia di farmi il db)e sembrerebbe che sia quello che vuoi
PHP:
<?php
$linea=array('pinco' =>'roma','pallo' =>'roma','pallino' =>'bari','sempronio' =>'roma','sofonisba' =>'bari','asdrubale' =>'bari');
$citta = array('aaaa');
$num=1;
$color_1="green";
$color_2="red";
echo "<table>";
foreach($linea as $ch => $val){
	$citta[$num]=$val;
	$nome=$ch;
	if($citta[($num-1)]!=$citta[$num]){
		$swap=$color_1;//mannaggia in php non esiste la vecchia funzione del basic swap
		$color_1=$color_2;
		$color_2=$swap;
	}
	echo "<tr>";
	echo "<td bgcolor=\"$color_1\">" . $nome . "</td>";
	echo "<td bgcolor=\"$color_1\">" . $citta[$num] . "</td>";
	$citta[($num-1)]=$val;
	$num++;
	echo "</tr>";
}
echo "</table>";
?>
comunque in base a quanto sopra puoi provare a modificare
PHP:
<?php
$sqlquery = "SELECT *  FROM Tabella  WHERE  Valore!='1' ORDER by Citta";
$result = mysql_query($sqlquery);
$citta = array('aaaa');//un qualsiasi valore che non sia un nome di città
$color_1="green";
$color_2="red";
$num=1;
while ($linea = mysql_fetch_array($result, MYSQL_ASSOC)) {
	$citta[$num] = $linea['Citta'];
    $nome = $linea['Nome'];
	if($citta[($num-1)]!=$citta[$num]){
		$swap=$color_1;
		$color_1=$color_2;
		$color_2=$swap;
	}
    echo "\t<tr>\n";
    echo "<td bgcolor=\"$color_1\">" . $nome . "</td>";
    echo "<td bgcolor=\"$color_1\">" . $citta[$num] . "</td>";
	$citta[$num-1]=$citta[$num];
	$num++;
}
?>
 
Ho provato come hai detto tu (Borgo), ma uno non ho capito molto, due mi inseriva sempre la striscia nera.
 
ciao
puo essere che nello script con il db abbia sbagliato qualche copy/paste, vuol dire che lo proverò poi ti so dire
comunque era quello che volevi (vedi immagine)?
 

Discussioni simili