PDA

View Full Version : [PHP]-Sviluppo di una funzione


Ginos
08-02-2009, 14:26
Salve ragazzi,
potreste darmi una dritta per rendere questa funzione "generica"?
Cioè...ho creato una tabella nella quale ho inserito anche un campo "pubblica" contenente due valori possibili: none e compact. Quando il campo è "none" la $backcolor = red mentre se il campo è compact la $backcolor = gray (in pratica la cella <td style="background-color: $fun"></td>contenente la riga con il campo pubblica = none diverrà rossa).
Mi servirebbe
Quella che vi ho postato è una funzione che effettua il controllo solo al primo id contenente il valore "none" e poi si ferma. Tutte le celle <td></td> configurate con la $fun (come evidenziato sopra) che contiene a sua volta la funzione "check_display()" diventano rosse o grigie a seconda del valore del campo "pubblica" della prima riga. Vorrei che il lavoro venisse fatto in modo autonomo...riga per riga. La riga con id 1 è rosso, la riga con id 2 è grigio, etc...
Ovviamente il problema potrei risolverlo facendo varie funzioni (quante sono le righe) ma mi sembra un cosa inutile dato che il lavoro da svolgere è identico per tutte le righe della tabella.


function check_display()
{
global $conn;

$query = "SELECT * FROM elements";
$result = mysql_query($query, $conn);

$row=mysql_fetch_row($result);

foreach($row as $k => $v)
{

if($k == 2)/////il valore 2 è il campo pubblica/////
{

if($v == "none")
{
$backcolor = "red";
}
else
{
$backcolor = "#E0E0E0";
}
///////////////////fine $k == 2///////////////////////////
}

}
return $backcolor;
///////////////////fine funzione//////////////////////////
}


Grazie mille

kk3z
08-02-2009, 14:52
argh ma perchè non usi mysql_fetch_assoc:
function check_display()
{
global $conn;

$query = "SELECT * FROM elements";
$result = mysql_query($query, $conn);
$row=mysql_fetch_assoc($result);

if ($row['pubblica'] == "none")
$backcolor = "red";
else
$backcolor = "#E0E0E0";
}

return $backcolor;
}

Se ho capito bene, non è proprio efficiente in questo modo: per ogni riga fai una query, che poi tra l'altro è uguale per tutte le righe... mostra anche il codice che usi per stampare queste righe.

Ginos
08-02-2009, 15:42
Ciao e grazie per la tua risp.
Hai ragione, ti ho postato la prima funzione che avevo sviluppato, nella seconda infatti ho utilizzato mysql_fetch_assoc
Allora, abbino alla variabile $fun la funzione check_display(): $fun = check_display(); e la richiamo nel codice sotto(nella tabella che ti dicevo ci sono 18 elementi/righe di conseguenza il codice qui sotto lo ripeto 18 volte. Solo il nome della funzione dovrebbe essere uguale):

echo "<tr>
<td><a href=\"modifica_option2.php\" target=\"_parent\">modifica/pubblica</a><br>$element_obj_option2</td>
<td style=\"background-color: $fun\">$element_obj_option2:</td>
<td style=\"background-color: $fun\"><input type=\"text\" name=\"option2\"></td>
<td style=\"text-align: center\">".replace_option2()."</td>
</tr>";

Ginos
09-02-2009, 12:59
Ho risolto modificando tutto il sorgente output.
All'interno del ciclo while($row=mysql_fetch_assoc($result))
ho inserito alcune condizioni che servono a rendere autonomo il lavoro riga per riga:


while($row=mysql_fetch_assoc($result))
{

if($row['pubblica'] == "none")
{
$backcolor = "red; color: white";
$type = "no";
echo "<div style=\"text-align: center; border: 1px solid gray; background-color: white; color: red; font-family: verdana; font-size: 12px\">Errore: modificare le impostazioni nei campi evidenziati!</div>";
}
elseif($row['pubblica'] == "non mod.")
{
$backcolor = "#618172; color: white";
$type = "non mod.";
}

else
{
$backcolor = "#E0E0E0";
$type = "si";
}

echo "<tr>
<td><a href=\"modifica_pubblica.php?id={$row['id']}\" target=\"_parent\">modifica/pubblica</a><br>$row[element]</td>
<td style=\"background-color: $backcolor\"><span style=\"color: black\">$asx&nbsp;</span>$row[element]:</td>
<td style=\"background-color: $backcolor\"><input type=\"text\" name=\"$row[element]\"></td>
<td>$type</td>
</tr>";

}


Ciao e grazie...per ora ;)