PDA

View Full Version : [PHP] Leggere file e creare tabella...


jj.69kt
17-06-2008, 16:51
Ciao, eccomi ancora a chiedere suggerimenti...

Comunque, sto studiandomi per i cacchi miei un po di php...
Ora vorrei relaizzare una pagina cha faccio questo, ma non so dove cominciare..

[edit]


Ho trovato cose simili manon ne cavo un ragno da un buco per ora.. Sarà che sono N00B inside per il php.. :D

Fatemi ragionare!! da solo nn e la fò.. hehe

Torav
18-06-2008, 01:30
boh non sono espertissimo di php però (se ho capito bene) io farei una roba del genere (se consideriamo $testo un array che contiene le righe del file):



foreach($testo as $riga) {
$toPrint = explode("|", $riga);
echo <<<EOF
<tr bgcolor="#0099FF">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}

non è una soluzione bellissima da vedere ma dovrebbe fare il suo lavoro :p

jj.69kt
18-06-2008, 11:47
Si, avevo pensato un cosa simile... (non sapevo esattamente come scriverla.. XD)

Il problema è che le righe sono alternate di colore.. E' li che è sorto il dubio...

pensavo una cosa del genere:

Psudocode:

if file="./score.dat" exist
then $dati = "./score.dat";
else{
error = print("File non esistente");
break;
}

$righe[] = explode ("/n" $dati);
$time = getTime();
$data = detData();

echo <<<EOF
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />

<title>Air Combat HighScores!</title>
</head>

<body>
<table width="100%" border="1">
<tr bgcolor="#0033FF" style="font-style:oblique">
<td width="4%" height="28"><div align="center"><b>Pos.</b></div></td>
<td width="24%"><div align="center"><b>Nome</b></div></td>
<td width="35%"><div align="center"><b>Cognome</b></div></td>
<td width="37%"><div align="center"><b>Valutazione</b></div></td>
</tr>

EOF;

for ($id = 1; $id<=10; $id++) //tanto so già per certo che le righe son solo 10!!
{
if (even? $id)
{
echo <<<EOF
<tr bgcolor="#0099FF">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}
else
{
echo <<<EOF
<tr bgcolor="#0099FF">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}
}

echo <<<EOF

</table>
</body>
</html>
EOF;

saveToFile("./$data_$time.html")



Però non saprei come trasformare questo pseudcode in php funzionante.. :D

Torav
18-06-2008, 14:58
vediamo se mi riesce di fare qualcosa di decente :p
prima di tutto creati la pagina con i vari <html> <table> ecc staticamente, poi aggiungi questa tra <table> e </table>, penso che dovrebbe funzionare :stordita:


$testo = file("nome_file.dat");
foreach($testo as $id => $riga) {
$toPrint = explode("|", $riga);
$color = ($id % 2) ? "0099FF" : "00FFFF";
echo <<<EOF
<tr bgcolor="#$color">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}

jj.69kt
18-06-2008, 15:27
WOW,
Ok, grazie.....
Non serviva un if-else quindi.... ah.. ma l' ($id % 2) cosa fa esattamente?
Sapresti dirmi anche come far si che si salvi km pagina html in un ALTRO file?
tipo se il mio è index.php si salvi km dicevo in "data_ora.html"?

Se mi riesce questo sarebbe perfetta la cosa.... (con un po di modifiche che mi faccio da solo.. :D )

Torav
18-06-2008, 18:28
beh senza che ti scrivo tutto, conviene che fai qualcosa del genere (credo! potrebbero esserci metodi molto migliori non so :p ):
metti in una variabile tutto quello che intendi far finire nella pagina html, quindi qualcosa come
$newText = "<html></head><title>titolo</titld>" ecc ecc
e quindi invece che fare (per esempio)

echo <<<EOF
<tr><td>{$toPrint[0]}<td></tr>
EOF

fai

$newText .= "<tr><td>{$toPrint[0]}<td></tr>";


e alla fine apri il file su cui vuoi scrivere, ci ficchi tutto dentro e richiudi :D


$newFilename = "./$date_$time.html";
$newFile = fopen($newFilename, "w");
fwrite($newFile, $newText);
fclose($newFile);


disclaimer: probabilmente ci stanno metodi più astuti :p

P.S. il % calcola il resto della divisione tra il numero che sta a sinistra e quello che sta a destra. Quindi x % 2 vale 0 se x è divisibile per 2 (e quindi pari), 1 altrimenti (se quindi è dispari). Poi ho usato l'operatore ternario la cui sintassi è
(espressione1) ? espressione2 : espressione3
che ritorna espressione2 se espressione1 è vera, espressione3 altrimenti

jj.69kt
19-06-2008, 10:38
Se io faccio così:


fwrite($newFile, $newText.$newText2.$newText3);


Mi mette le stringhe una dopo l'altra, no?

Non devo fare:

fwrite($newFile, $newText);
fwrite($newFile, $newText2);
fwrite($newFile, $newText3);
. . .


Corretto?

Ah per vedere se il file ".dat" esist posso usare:

$data= file"./dati.dat"

if isset($data)
then......
else....


Oppure no?

Torav
19-06-2008, 11:02
per quanto riguarda la prima domanda ti conviene prima creare il "megastringone" contenente tutta la pagina semplicemente facendo $nextText .= "altro html", l'operatore .= funziona come il += per le stringhe.
Per vedere l'esistenza di un file ti conviene invece utilizzare file_exists($filename), che restituisce 1 se esiste, 0 altrimenti

jj.69kt
19-06-2008, 11:08
Ok, allora faccio così per il testo:

$text1="asd";
$text2="sad";
$text.....

$textToPage=$text1.$text2.$text.....

//e poi in fine

fwrite($pagina, $textToPage);



Ho capito giusto?

Per l'esistenza del file:

$dati= file"./dati.dat"

if (file_exist($dati) != 1)
//errore

//poi continuo col codice...



Ah un'altro dubbio..
Ma sei io faccio così:

$testo = file("nome_file.dat");
foreach($testo as $id => $riga) {
$toPrint = explode("|", $riga);
$color = ($id % 2) ? "0099FF" : "00FFFF";
echo <<<EOF
<tr bgcolor="#$color">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}


E al posto dell' "echo" metto un variabile... poi nn funziona xke sovrascrive quello che esiste già, no?


$testo = file("nome_file.dat");
foreach($testo as $id => $riga) {
$toPrint = explode("|", $riga);
$color = ($id % 2) ? "0099FF" : "00FFFF";

$text= "<tr bgcolor=/"#".$color."/"> <td><div align="center"><b>".{$toPrint[0]}."<//b><//div><//td> <td>".{$toPrint[1]}."<//td> <td>".{$toPrint[2]}."<//td> <td>".{$toPrint[3]}."<//td> <//tr> "


Mi devo creare 10 variabili e chiamarle in sequnza?

Torav
19-06-2008, 13:06
Ok, allora faccio così per il testo:

$text1="asd";
$text2="sad";
$text.....

$textToPage=$text1.$text2.$text.....

//e poi in fine

fwrite($pagina, $textToPage);



Ho capito giusto?

o fai così oppure fai, più semplicemente

$textToPage = "asd";
$textToPage .= "asd";
$textToPage .= ....

fwrite($pagina, $textToPage);



Per l'esistenza del file:

$dati= file"./dati.dat"

if (file_exist($dati) != 1)
//errore

//poi continuo col codice...


ti conviene fare il controllo prima:

if(file_exists($dati) != 1) die("Attenzione, il file non esiste!");

e poi metti tutto il resto del codice.

Ah un'altro dubbio..
Ma sei io faccio così:

$testo = file("nome_file.dat");
foreach($testo as $id => $riga) {
$toPrint = explode("|", $riga);
$color = ($id % 2) ? "0099FF" : "00FFFF";
echo <<<EOF
<tr bgcolor="#$color">
<td><div align="center"><b>{$toPrint[0]}</b></div></td>
<td>{$toPrint[1]}</td>
<td>{$toPrint[2]}</td>
<td>{$toPrint[3]}</td>
</tr>
EOF;
}


E al posto dell' "echo" metto un variabile... poi nn funziona xke sovrascrive quello che esiste già, no?


$testo = file("nome_file.dat");
foreach($testo as $id => $riga) {
$toPrint = explode("|", $riga);
$color = ($id % 2) ? "0099FF" : "00FFFF";

$text= "<tr bgcolor=/"#".$color."/"> <td><div align="center"><b>".{$toPrint[0]}."<//b><//div><//td> <td>".{$toPrint[1]}."<//td> <td>".{$toPrint[2]}."<//td> <td>".{$toPrint[3]}."<//td> <//tr> "


Mi devo creare 10 variabili e chiamarle in sequnza?

ti conviene fare come ti ho detto prima, cioè utilizzi ogni volta l'operatore .= in modo da aggiungere la roba da stampare alla stessa variabile $text, e poi fai fwrite($pagina, $text)

jj.69kt
19-06-2008, 14:30
aaaaaah!!!!!!

non avevo notato il " .= " avevo visto solo l'uguale....

Bene ti ringrazio, questa sera provo appena ho 2 minuti.

jj.69kt
19-06-2008, 16:40
Ok, quindi funziona il tutto.. :D
http://andrew.giurochesmetto.org/TESTprogrammazione/generaTab.php
;)

Thanks!

Torav
19-06-2008, 23:52
bene! :)