Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: guestbook che sbrocca

  1. #1

    guestbook che sbrocca

    ciao a tuttti|!
    non sono per niente esperto e ho provato ad implementare il guestbook del libro ke sto studiando sul php. sembra funzioni correttamente xò quando lascio un commento non me lo inserisce subito, ma devo aggiornare la pagina. e se l'aggiorno in continuazione senza riscrivere alcun messaggio lui mi inserisce sempre l'ultimo inseirto.. come devo correggere il codice?
    cmq questo è il codice del programma:
    ps= uso winndows xp php 5.2 e apache 2.2.3

    <?php

    $datafile = "files/data.txt";

    if(isset($_POST['submit'])){

    $name = $_POST['name'];
    $comments = $_POST['comments'];

    $new_content = "$name::$comments\n";

    $fp = fopen($datafile, "a");
    $fw = fwrite($fp, $new_content);
    $fc = fclose($fp);
    }

    ?>

    <html>
    <body bgcolor="#FFFFFF" text="#000000">
    GUESTBOOK
    <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?> ">
    <table width="30%" border="0" cellspacing="0" cellpadding="0" height="50">
    <tr>
    <td width="31%">Name:</td>
    <td width="69%"><input type="text" name="name"></td>
    </tr>
    <tr>
    <td width="31%">Comments:</td>
    <td width="69%"><textarea name="comments" rows="3"></textarea></td>
    </tr>
    </table>
    <input type="submit" name="submit" value="Submit Comment">
    <input type="reset" name="Reset" value="Reset">


    </form>
    <hr>

    <?php

    if (file_exists($datafile)) {
    $read_data = file($datafile);
    $num_comments = count($read_data);

    for($c=0;$c<$num_comments-1;$c++){

    $content = explode("::", $read_data[$c]);

    echo "Name: $content[0]";
    echo "
    ";
    echo "Comment: $content[1]";
    echo "

    ";
    }
    }
    ?>
    <hr>
    </body>
    </html>

  2. #2
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Leggendo velocemente il codice succede perché aggiornando rimanda il $_POST e quindi reinserisce il messaggio.

    Qui prova a inserire qualcosa del genere:

    Codice PHP:
    <?php

    $datafile 
    "files/data.txt";

    if(isset(
    $_POST['submit'])){

    $name $_POST['name'];
    $comments $_POST['comments'];

    $new_content "$name::$comments\n";

    $fp fopen($datafile"a");
    $fw fwrite($fp$new_content);
    $fc fclose($fp);

    header("Location: nomepagina.php");//aggiunta
    }

    ?>
    Così la ricarica ma senza il post e ti aggiorna subito anche i commenti (ma è da provare un attimo)

    PS: Dovrebbe funzionare anche con $_SERVER['PHP_SELF']

  3. #3
    non va...
    cmq una domanda: il file data.txt lo devo creare suito vuoto oppure lo lascio creare da fopen con "a" ?

    ogni messaggio ke lascio non me lo inserisce..devo aggiornare per forza la pagina..non c'è un modo per aggiornarla automaticamente?

    cmq precisamente sono questi i problemi:

    il primo messaggio ke lascio non lo inserisce, se poi aggiorno lapagina compare magicamente..
    il secondo messaggio lo inserisce sempre vuoto, e se riaggiorno inserisce il nuovo messaggio..quindi ogni due messaggi in mezzo ce n'è uno vuoto..

  4. #4
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Da php.net
    a: Apre in sola scrittura; posiziona il puntatore alla fine del file. Se il file non esiste, tenta di crearlo.

    ma con l'header ti dà errore o non funziona e basta?

    Altrimenti puoi usare un javascript tipo:

    Codice PHP:
    <?php 

    $datafile 
    "files/data.txt"

    if(isset(
    $_POST['submit'])){ 

    $name $_POST['name']; 
    $comments $_POST['comments']; 

    $new_content "$name::$comments\n"

    $fp fopen($datafile"a"); 
    $fw fwrite($fp$new_content); 
    $fc fclose($fp); 
    ?>
    <script language="javascript">
    location.href='nomepagina.php';
    </script>
    <?
    // chiaramente devi sostituire nomefile.php con la tua
    ?>

  5. #5
    con o senza header funziona male allo stesso modo...non mi da errori ..devo riuscire a capire perchè inserisce un post vuoto sempre tra due messaggi...

    cmq il problema me lo da lo stesso sia con explorer che con firefox...

  6. #6
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    ok ok ho trovato l'errore per il fatto che non fa vedere l'ultimo.

    Eccoti tutto il codice corretto.

    Codice PHP:
    <?php

    $datafile 
    "files/data.txt";

    if(isset(
    $_POST['submit'])){

    $name $_POST['name'];
    $comments $_POST['comments'];

    $new_content "$name::$comments\n";

    $fp fopen($datafile"a");
    $fw fwrite($fp$new_content);
    $fc fclose($fp);
    header("Location: ".$_SERVER['PHP_SELF']."");//aggiunta 
    }

    ?>

    <html>
    <body bgcolor="#FFFFFF" text="#000000">
    [b]GUESTBOOK [/b] 
    <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?> ">
    <table width="30%" border="0" cellspacing="0" cellpadding="0" height="50">
    <tr> 
    <td width="31%">Name:</td>
    <td width="69%"><input type="text" name="name"></td>
    </tr>
    <tr> 
    <td width="31%">Comments:</td>
    <td width="69%"><textarea name="comments" rows="3"></textarea></td>
    </tr>
    </table>
    <input type="submit" name="submit" value="Submit Comment">
    <input type="reset" name="Reset" value="Reset">


    </form>
    <hr>

    <?php 

    if (file_exists($datafile)) {
    $read_data file($datafile);
    $num_comments count($read_data);

    for(
    $c=0;$c<$num_comments;$c++){//prima era for($c=0;$c<$num_comments-1;$c++){

    $content explode("::"$read_data[$c]);

    echo 
    "[b]Name:[/b] $content[0]";
    echo 
    "
    "
    ;
    echo 
    "[b]Comment:[/b] $content[1]";
    echo 
    "

    "
    ;
    }
    }
    ?>
    <hr>
    </body>
    </html>
    Provato e funzionanate. Io aggiungerei giusto un controllo per vedere se quello passato dal posto non sia già presente nel file in modo da evitare doppi post uguali.

  7. #7
    FANTASTICO!!! FUNZIONA BENISSIMO!!!
    ti ringrazio veramente Nosfe... non me l'aspettavo un aiuto così immediato...
    cmq non capisco xkè questo errore si trovava sia nel libro sia nel sito con gli script del libro...
    mah!

    cmq grazie di nuovo!!

  8. #8
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Originariamente inviato da sidvizioso
    FANTASTICO!!! FUNZIONA BENISSIMO!!!
    ti ringrazio veramente Nosfe... non me l'aspettavo un aiuto così immediato...
    cmq non capisco xkè questo errore si trovava sia nel libro sia nel sito con gli script del libro...
    mah!

    cmq grazie di nuovo!!
    Beh siamo tutti umani, può succedere

    Cmq di nulla ^^

  9. #9
    ciao,scusa se rompo ancora...
    cmq se io volessi mettere un controllo che che fa comparire una scritta (ad esempio "devi inserire un nome") nel caso un utente non abbia inserito il nome come faccio?
    ho fatto varie prove ma on va...

    voglio inserire questo
    Codice PHP:
    if($_POST['name'] == "")
                    
    $nameErr 1;
            else
                    
    $nameErr 0
    e questo in questo punto
    Codice PHP:
    <tr> 
          <td width="31%"><div align="right">Name:</div></td>
          <td width="69%"><input type="text" name="name"> 
    <?php
     
    if($nameErr
           echo 
    "<font color='red' size='2'> Inserisci un nome</font>"
    ?> 

    </td>
        </tr>
    Per una battaglia sono sempre a disposizione

  10. #10
    Utente di HTML.it L'avatar di Nosfe
    Registrato dal
    Jan 2004
    Messaggi
    454
    Codice PHP:
    <?
    $datafile 
    "data.txt"
    $nameErr FALSE;
    if(isset(
    $_POST['submit'])){ 

    $name trim($_POST['name']); 
    $comments trim($_POST['comments']); 

    if(
    $name=="" || $comments==""){
    $nameErr TRUE;
    }else{
    $new_content "$name::$comments\n"

    $fp fopen($datafile"a"); 
    $fw fwrite($fp$new_content); 
    $fc fclose($fp); 
    header("Location: ".$_SERVER['PHP_SELF']."");//aggiunta 
    }


    ?> 

    <html> 
    <body bgcolor="#FFFFFF" text="#000000"> 
    [b]GUESTBOOK [/b] 
    <form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?> "> 
    <table width="30%" border="0" cellspacing="0" cellpadding="0" height="50"> 
    <tr> 
    <td width="31%">Name:</td> 
    <td width="69%"><input type="text" name="name">
    <?
    if($nameErr){
    echo 
    "<font color='red' size='2'> Inserisci un nome</font>";
    }
    ?>
    </td> 
    </tr> 
    <tr> 
    <td width="31%">Comments:</td> 
    <td width="69%"><textarea name="comments" rows="3"><? if($nameErr){
    echo 
    $comments;
    }
    ?></textarea></td> 
    </tr> 
    </table> 
    <input type="submit" name="submit" value="Submit Comment"> 
    <input type="reset" name="Reset" value="Reset"> 

     
    </form> 
    <hr> 

    <?php 

    if (file_exists($datafile)) { 
    $read_data file($datafile); 
    $num_comments count($read_data); 

    for(
    $c=0;$c<$num_comments;$c++){//prima era for($c=0;$c<$num_comments-1;$c++){ 

    $content explode("::"$read_data[$c]); 

    echo 
    "[b]Name:[/b] $content[0]"
    echo 
    "
    "

    echo 
    "[b]Comment:[/b] $content[1]"
    echo 
    "

    "



    ?> 
    <hr> 
    </body> 
    </html>
    Puoi fare così. Ho messo che controlla anche il commento, ma l'echo dell'errore mettilo tu va :P

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.