- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema script per news aggiornabili
-
gurda io vorrei la soluzione piu semplice, senza db posso aggiornare il tutto tramite un form? se si facciamo anche senza db, a me interessa solo tramite un form aggiornare una sezione...
ciau
-
Ok, togliamo il Db, gestiamo tutto con file di testo
creati un file news.txt e uppalo nella directory che vuoi, per comodità facciam finta che sia la root e che il file da dove ti posti le news si chiami control_panel.php (quello che dovrai creare per capirci ), ti gestisci tutto con lo stesso file:
La pagina con il form dovrà avere questa struttura:
[php]echo "<form action='control_panel.php' method='GET' name='news'>
<textarea tabindex=1 wrap=virtual name=text cols=28 rows=6>"; //** wrap virtual serve a non far mettere gli "a capo" anche se nella textarea ci andrai, cols e rows sono le colonne e le righe, giostratele per come preferisci */
echo "<input tabindex=2 type=submit value='Invia'>
<input type=reset tabindex=3 value='Reset'></form>";//** Tiriamoci su l'orario attuale /
setlocale(LC_TIME, "it_IT");
$DATE= time();
$ARRAY_DATA=getdate($DATE);
$H = $ARRAY_DATA['hours'];
$M = $ARRAY_DATA['minutes'];
$S = $ARRAY_DATA['seconds'];
$T = $ARRAY_DATA['mon'];
$D = $ARRAY_DATA['mday'];
$Y = $ARRAY_DATA['year'];
$DATE=mktime($H, $M, $S, $T, $D, $Y);
$DATA=strftime('%Y-%m-%d %H:%M:%S', $DATE);
//* in tal modo abbiamo la data ed ora attuale nel formato 2007-12-11 20:26:50 */$file="news.txt"; //* assegnamo il path del file /
$text="";
$text=$_GET['text']; // assegni quanto postato dalla text area alla variabile e quindi passi al controllo se la variabile ha un valore prima di scrivere sul file /
if ($text!="")
{
$handle = fopen ($file, "ab"); //* comando per l'apertura del file /
$write = $DATA."@".$text."\n"; //* scriverà singole righe (\n alla fine sta per newline) mettendo la data e poi il testo separati dal simbolo @ /
fwrite ($handle, $write); //* scriviamo sul file /
fclose($handle); //* ed infine chiudiamo il file, da non dimenticare MAI!!! */
}
[/php]
ovviamente questo è solo il form, poi i "fiorellini" li devi mettere tu (body e quant'altro).per visualizzare il contenuto del file, e quindi le news vere e proprie creerai il file news.php:
[php]$file="news.txt";
$textarray=file($file); //** ci tiriamo su un array delle varie righe del file */
$i=0;
echo "<table><caption align=center>NEWS</caption>";
while($i<count($textarray))
{$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string); //**esplodiamo la riga che lui troverà scritta nel segunte modo: 2007-12-12 20:26:50@testodellanews, e la separiamo assegnado quello che sta prima della @ a $data e quello che sta dopo a $text ed infine li facciam vedere */
echo '<tr valign=center>';
echo "<td>".$data."</td><td>".$text."</td>";
echo '</tr>';
}
echo '</table>'; [/php]
in tal modo ti intabellerà il tutto, come sempre ai fiorellini ci penserai teForse non è il metodo migliore, ripeto non sono un esperto, ma almeno è un metodo
Spero ti sia utile
Ciau
-
Grazie Samyorn, le tue conoscienze non sono niente male!
nel file conrol_panel.php cè un piccolo errore nell' html ( cè da chiudere la textarea </textarea>) no problem...;)
il problema che non sono invece in grado di risolvere e quello che
easyphp segnala alla seguente riga del file control_panel.php:$text=$_GET['text']; //* assegni quanto postato dalla text area alla variabile e quindi passi al controllo se la variabile ha un valore prima di scrivere sul file */
Infatti il tutto funziona però nella pagina news PHP non appare una sola volta il testo scritto nella textarea, Ma viene ripetuto moltissime volte
es:
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfgnel file di testo news.txt è scritto 2007-12-12 11:51:16 gfh... correttamente una sola volta,
qule puo essere l'errore? forse ho sbagliato qualcosa io...ti ringrazio della pazienza ciau!
-
@markez said:
nel file conrol_panel.php cè un piccolo errore nell' html ( cè da chiudere la textarea </textarea>) no problem...;)
opsss.....nella fretta
@markez said:
il problema che non sono invece in grado di risolvere e quello che
easyphp segnala alla seguente riga del file control_panel.php:$text=$_GET['text'];
uhm....cambia gli apici (')con le virgolette (") e togli pure il commento, non si sa mai@markez said:
Infatti il tutto funziona però nella pagina news PHP non appare una sola volta il testo scritto nella textarea, Ma viene ripetuto moltissime volte
es:
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfg
2007-12-12 11:51:16gfhfgfhfgfhfgnel file di testo news.txt è scritto 2007-12-12 11:51:16 gfh... correttamente una sola volta,
qule puo essere l'errore? forse ho sbagliato qualcosa io...ti ringrazio della pazienza ciau!
ho dimenticato di incrementare $i
a fine ciclo, prima di chiudere la parentesi graffa metti $i=$i++, ovvio che andava in loop XD scusa la sbadataggine
-
Mannagiuz!
news.php va ancora in loop ti posto il codice che php con la correzzione da te indacata:<?php
$file="news.txt";
$textarray=file($file); //** ci tiriamo su un array delle varie righe del file */
$i=0;
echo "<table><caption align=center>NEWS</caption>";
while($i<count($textarray))
{$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string); //**esplodiamo la riga che lui troverà scritta nel segunte modo: 2007-12-12 20:26:50@testodellanews, e la separiamo assegnado quello che sta prima della @ a $data e quello che sta dopo a $text ed infine li facciam vedere */
echo '<tr valign=center>';
echo "<td>".$data."</td><td>".$text."</td>";
echo '</tr>';
$i=$i++ ;
}
echo '</table>';
?>ps: ti faccio tribulare! graz
-
Modificalo con questo:
[PHP]<?php
$file="news.txt";
$textarray=file($file);
$i=0;
echo "<table><caption align=center>NEWS</caption>";
while($i<count($textarray))
{
$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string);
echo '<tr valign=center>';
echo "<td>".$data."</td><td>".$text."</td>";
echo '</tr>';
$i=$i+1 ;
}
echo '</table>';
?>[/PHP]risolto per control_panel.php invece? da' ancora errore?
-
risolto le news ora fuzionano, sapresti indicarmi una modificare il php per far si che le news piu recenti vengano visualizzate prima di quelle piu vecchie?
al posto di:
2007-12-12 11:51:16gfhfgfhfgfhfg2007-12-12 12:04:40provafare,
2007-12-12-12:04:40 prova
2007-12-12-11:51:16 gfhfgf...control_panel.php da ancora errore nonostante il codice l'abbia cambiato in questo modo:
<?php
echo "<form action='control_panel.php' method='GET' name='news'>
<textarea tabindex=1 wrap=virtual name=text cols=28 rows=6></textarea>"; //** wrap virtual serve a non far mettere gli "a capo" anche se nella textarea ci andrai, cols e rows sono le colonne e le righe, giostratele per come preferisci */
echo "<input tabindex=2 type=submit value='Invia'>
<input type=reset tabindex=3 value='Reset'></form>";//** Tiriamoci su l'orario attuale /
setlocale(LC_TIME, "it_IT");
$DATE= time();
$ARRAY_DATA=getdate($DATE);
$H = $ARRAY_DATA['hours'];
$M = $ARRAY_DATA['minutes'];
$S = $ARRAY_DATA['seconds'];
$T = $ARRAY_DATA['mon'];
$D = $ARRAY_DATA['mday'];
$Y = $ARRAY_DATA['year'];
$DATE=mktime($H, $M, $S, $T, $D, $Y);
$DATA=strftime('%Y-%m-%d %H:%M:%S', $DATE);
//* in tal modo abbiamo la data ed ora attuale nel formato 2007-12-11 20:26:50 */$file="news.txt"; //* assegnamo il path del file /
$text="";
$text=$_GET["text"];
if ($text!="")
{
$handle = fopen ($file, "ab"); //* comando per l'apertura del file /
$write = $DATA."@".$text."\n"; //* scriverà singole righe (\n alla fine sta per newline) mettendo la data e poi il testo separati dal simbolo @ /
fwrite ($handle, $write); //* scriviamo sul file /
fclose($handle); //* ed infine chiudiamo il file, da non dimenticare MAI!!! */
}
?>
-
[PHP]echo "<form action='control_panel.php' method='POST' name='news'>
<textarea tabindex=1 wrap=virtual name=text cols=28 rows=6></textarea>";
echo "<input tabindex=2 type=submit value='Invia'>
<input type=reset tabindex=3 value='Reset'></form>";setlocale(LC_TIME, "it_IT");
$DATE= time();
$ARRAY_DATA=getdate($DATE);
$H = $ARRAY_DATA['hours'];
$M = $ARRAY_DATA['minutes'];
$S = $ARRAY_DATA['seconds'];
$T = $ARRAY_DATA['mon'];
$D = $ARRAY_DATA['mday'];
$Y = $ARRAY_DATA['year'];
$DATE=mktime($H, $M, $S, $T, $D, $Y);
$DATA=strftime('%Y-%m-%d %H:%M:%S', $DATE);$file="news.txt";
$text="";
$text=$_REQUEST["text"];
if ($text!="")
{
$handle = fopen ($file, "ab");
$write = $DATA."@".$text."\n";
fwrite ($handle, $write);
fclose($handle);
} [/PHP]
modificalo così
se ti da ancora errore dimmi che errore èP.S.: ma hai messo i vari <html>, <body>, etc etc ho lo hai uppato direttamente così??
-
i tag li ho messo tutti
<html>
<head>...
</head>
<body>
<?php
....
?>
</body>
</html>
mi da ancora errore nella riga $text=$_REQUEST["text"];nonostante questo errore tutto funziona bene,
mi interessava come ti dicevo riuscire a mettere
le news piu recenti per prime
-
@markez said:
mi da ancora errore nella riga $text=$_REQUEST["text"];
nonostante questo errore tutto funziona bene,
mi sfugge perchè dia errore....ma mi par di capire che nonostante dia errore funge tutto, giusto?
@markez said:
mi interessava come ti dicevo riuscire a mettere
le news piu recenti per prime
basta invertire il ciclo, invece di far partire $i da 0 lo fai partire dal valore di count($textarray), ed invece di incrementarlo lo decrementi, ovvero $i=$i-1 ad ogni ciclo ;), ovviamente devi fermare il ciclo quando $i=0
-
ok ti ringrazio! nn ce l'avrei mai fatta da solo...
un ultima cosa scusa se me ne approfitto
per uscire dal ciclo quando $i=0 cosa devofare
-
<FONT face="Courier New">[php]$i=count($textarray);
echo "<table><caption align=center>NEWS</caption>";
while($i<=0)
{
$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string);
echo '<tr valign=center>';
echo "<td>".$data."</td><td>".$text."</td>";
echo '</tr>';
$i=$i-1 ;
}
echo '</table>';
?> [/php]
-
con il codice che mi hai dato in news.php non vedo niente ho provato a modificare la condizione del ciclo
da while($i<=0) a while($i>0)
cosi facendo vedo le news nel giusto ordine ma ho 2 errori nelle linee
$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string);devo cambiare qualcosa anche qua?
-
@markez said:
con il codice che mi hai dato in news.php non vedo niente ho provato a modificare la condizione del ciclo
da while($i<=0) a while($i>0)
maledetta fretta...ovviamente maggiore o uguale, indi $i=>0@markez said:
$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string);devo cambiare qualcosa anche qua?
che errori ti da?
-
se metto anche l'uguale nella condizione nn visualizza niente se metto solo > visualizza le news corrette e poi questi 2 errori
Notice: Undefined offset: 4 in c:\programmi\easyphp1-8\www\news\news.php on line 12Notice: Undefined offset: 1 in c:\programmi\easyphp1-8\www\news\news.php on line 13
-
ti visualizza tutte le news?
non comprendo perchè quegli errori......estraiti l'HTML della pagina e dagli un occhiata
oppure prova ad uppare il tutto, certe volte in locale potrebbe dare noie
-
il codice che fa le bizze è il seguente provalo da te se non tida errori alla faccia di easy php per me è ok
<html>
<head><title>news</title>
</head>
<body>
<?php
$file="news.txt";
$textarray=file($file);
$i=count($textarray);
echo "<table><caption align=center>NEWS</caption>";
while($i>0)
{
$string=substr($textarray*, 0,-1);
list($data, $text)=explode("@", $string);
echo '<tr valign=center>';
echo "<td>".$data."</td><td>".$text."</td>";
echo '</tr>';
$i=$i-1 ;
}
echo '</table>';
?>
</body>
</html>
-
<html> <head><title>news</title> </head> <body> <?php $file="news.txt"; $textarray=file($file); $i=count($textarray); echo "<table><caption align=center>NEWS</caption>"; while($i>=0) { $string=substr($textarray*, 0,-1); list($data, $text)=explode("@", $string); echo '<tr valign=center>'; echo "<td>".$data."</td><td>".$text."</td>"; echo '</tr>'; $i=$i-1 ; } echo '</table>'; ?> </body> </html>
risolto
invece di =>, andava scritto >=
l'ho uppato e non da nessun errore, ne con FF ne con IE
-
ok tutto aposto, però cè un altra cosa avendo invertito il ciclo while se vado a capo nella textarea viene visualizzata nelle news prima la linea con cui sono andatoa a capo e poi la data e l'inizio delle news
es :
hhjjjj
dddd
ddddd
12-12-12-11:09:15 ndhdhdhdhdhdcavolo è un bel problema
-
ma lo stai provando sempre in locale???
io ho uppato un file txt, che per come vien scritto dal control_panel.php è così scritto:
2007-12-20@testo 1
2007-12-21@testo 2
2007-12-22@testo 3
2007-12-23@testo 4
2007-12-25@testo 5
2007-12-26@testo 6ho uppato quel codice, e mi vien fuori:
NEWS
2007-12-26 testo 6
2007-12-25 testo 5
2007-12-23 testo 4
2007-12-22 testo 3
2007-12-21 testo 2
2007-12-20 testo 1non comprendo perchè ti escano quei valori.......