Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [php]chat in php e mysql, problema nella visualizzazione dei dati

    vi posto qui il codice della mia chat
    codice:
    <?php
    $connessione = mysql_connect("localhost", "root", "XXXXXXXX");
    $selection = mysql_select_db("chat1");
    $chiusura_connessione = mysql_close($connessione);
    ?>
    <html>
    <head>
    <style type="text/css">
    
    
    #tabella table,td,tr {
        border-style:solid;
        border-width:2px;
    }
    </style>
    </head>
    <body>
    <table border=0 align=center id="tabella" height=200px width=500px>
    <tr>
       <td style="font-size:13px" valign=top>
       <?php
    $prendi_nome = $_POST["account"];
    $prendi_testo = $_POST["testo"];
    $inserisci_nel_db = mysql_query("INSERT INTO chat (nome, testo) VALUES ('$prendi_nome', '$prendi_testo')");
    $contiene = mysql_query("SELECT * FROM chat");
    while ($controlla = mysql_fetch_array($contiene))
    {
    echo "[b]".$controlla['nome']."
    
    ".$controlla['testo'];
    }
    ?>
    <div style="overflow: auto;width: 100%; height: 175px">
    </div>
       </td>
    </tr>
    <tr>
       <td height=25px style="border-color:grey;">
    	    <form action="" method="POST" style="margin:0px;padding=0px;">
    	         <input type="text" name="testo" style="width: 430px; border-style:solid; background-color:grey;" />
    		    
    		    <input type="submit" name="submit" value="INVIA" style="border-style:solid; border-color:black;background-color:grey;" />
    			
    
    
    
    			<input type = "text" name = "account" />
    	    </form>
       </td>
    </tr>
    </table>
    
    </body>
    </html>
    Ancora non ho curato particolari molto importanti come l'autorefresh oppure la visualizzazione del nome utente senza ogni volta riscrivere il proprio nome all'interno della text "account". Invece stavo proprio creando il meccanismo che permette alla mia chat di funzionare. Lo spiego brevemente.
    1) Ho creato un database (chat1) dove all'interno ho inserito una tabella (chat) e 2 campi:
    nome e testo.
    2) Ho creato una pagina html che serve per scrivere il messaggio ("testo") e il nome
    dell'utente ("account")
    3) Il codice php riceve le informazioni del codice html e poi le invia al server. Il messaggio viene inviato all'interno del campo "testo", mentre il nome dell'utente viene inserito nel campo "nome".
    4) il codice stampa tutti i messaggi che si trovano nei campi di chat

    5) mi esce l'errore XD


    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\superchat.php on line 26

    (la riga 26 è la riga del while)

    come mai mi succede questa cosa?

    Grazie per le spero propizie risposte

    gb99pm10
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    di solito l'errore è dato da una query non riuscita (mysql_query restituisce false), quindi dovresti controllare che errore hai.
    fai una echo di mysql_error();

    Ps:
    All'inizio apri e subito chiudi la connessione, probabilmente è per questo che ti da l'errore

  3. #3
    grazie mille, era quello il problema, però ora mi dà un altro errore. Infatti mi dice che non ho assegnato il valore giusto a $prendi_nome e $prendi_testo. Io sono un novellino e sto ancora imparando questo linguaggio, il metodo post io lo utilizzavo per collegare una pagina ad un'altra, non ho mai adoperato il metodo post per mandare informazioni all'interno della stessa pagina, come faccio a fare ciò?
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  4. #4
    per mandare il valore alla stessa pagina puoi usare l'anchor nell'action, così:

    codice:
    <form action="#" method="POST"></form>

  5. #5
    Grazie mille, ora un'ultima cosa, scusa se ho continuato la discussione, è che non volevo aprirne un'altra per una cosa davvero stupida...
    Ho fatto tutto, adesso dovrebbe funzionare (manca sempre l'auto aggiornamento della chat che farò in un secondo momento), ora funziona tutto, tranne un piccolo particolare
    Quando riaggiorno la pagina, nella chat appare due volte l'ultimo messaggio. Per capire faccio un esempio. Io ho scritto ciao a tutti. Ecco il risultato

    gb99pm10 ciao a tutti.

    così dovrebbe andare bene, ma quando riaggiorno la pagina, senza scrivere niente, mi appare questo

    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.

    riaggiorno di nuovo e mi appare

    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.

    e così via. Andando a cercare anche nel database, ho riscontrato che tutti quei messaggi li ho davvero messi nei campi. Vi metto il codice

    codice:
    <?php
    $connessione = mysql_connect("localhost", "root", "xxxxxxxxxx");
    $selection = mysql_select_db("chat1");
    ?>
    <html>
    <head>
    <style type="text/css">
    
    
    #tabella table,td,tr {
        border-style:solid;
        border-width:2px;
    }
    
    </style>
    </head>
    <body>
    <table border=0 align=center id="tabella" height=200px width=500px>
    <tr>
       <td style="font-size:13px" valign=top>
            <?php
    
    $selection = mysql_select_db("chat1");
    $prendi_nome = $_POST["account"];
    $prendi_testo = $_POST["testo"];
    $inserisci_nel_db = mysql_query("INSERT INTO chatvera (nome, testo) VALUES ('$prendi_nome', '$prendi_testo')");
    $contiene = mysql_query("SELECT * FROM chatvera");
    while ($controlla = mysql_fetch_array($contiene))
    {
    echo "
    ".$controlla['nome']."      ".$controlla['testo']."
    ";
    
    }
    $chiusura_connessione = mysql_close($connessione);
    ?>
    <div style="overflow: auto;width: 100%; height: 175px">
    </div>
       </td>
    </tr>
    <tr>
       <td height=25px style="border-color:grey;">
    	    <form action="#" method="POST" style="margin:0px;padding=0px;">
    	         <input type="text" name="testo" style="width: 430px; border-style:solid; background-color:grey;" />
    		    
    		    <input type="submit" name="submit" value="INVIA" style="border-style:solid; border-color:black;background-color:grey;" />
    			
    
    
    
    			<input type = "text" name = "account" />
    	    </form>
       </td>
    </tr>
    </table>
    
    </body>
    </html>
    come mai mi succede questo????
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  6. #6
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Quando aggiorni, il browser ti chiede di ritrasmettere i dati?

    Cmq, anche in vista del refresh automatico, ti consiglio di separare la pagina di salvataggio da quella di visualizzazione

  7. #7
    Originariamente inviato da g.b99pm10
    Grazie mille, ora un'ultima cosa, scusa se ho continuato la discussione, è che non volevo aprirne un'altra per una cosa davvero stupida...
    Ho fatto tutto, adesso dovrebbe funzionare (manca sempre l'auto aggiornamento della chat che farò in un secondo momento), ora funziona tutto, tranne un piccolo particolare
    Quando riaggiorno la pagina, nella chat appare due volte l'ultimo messaggio. Per capire faccio un esempio. Io ho scritto ciao a tutti. Ecco il risultato

    gb99pm10 ciao a tutti.

    così dovrebbe andare bene, ma quando riaggiorno la pagina, senza scrivere niente, mi appare questo

    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.

    riaggiorno di nuovo e mi appare

    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.
    gb99pm10 ciao a tutti.

    e così via. Andando a cercare anche nel database, ho riscontrato che tutti quei messaggi li ho davvero messi nei campi. Vi metto il codice

    codice:
    <?php
    $connessione = mysql_connect("localhost", "root", "xxxxxxxxxx");
    $selection = mysql_select_db("chat1");
    ?>
    <html>
    <head>
    <style type="text/css">
    
    
    #tabella table,td,tr {
        border-style:solid;
        border-width:2px;
    }
    
    </style>
    </head>
    <body>
    <table border=0 align=center id="tabella" height=200px width=500px>
    <tr>
       <td style="font-size:13px" valign=top>
            <?php
    
    $selection = mysql_select_db("chat1");
    $prendi_nome = $_POST["account"];
    $prendi_testo = $_POST["testo"];
    $inserisci_nel_db = mysql_query("INSERT INTO chatvera (nome, testo) VALUES ('$prendi_nome', '$prendi_testo')");
    $contiene = mysql_query("SELECT * FROM chatvera");
    while ($controlla = mysql_fetch_array($contiene))
    {
    echo "
    ".$controlla['nome']."      ".$controlla['testo']."
    ";
    
    }
    $chiusura_connessione = mysql_close($connessione);
    ?>
    <div style="overflow: auto;width: 100%; height: 175px">
    </div>
       </td>
    </tr>
    <tr>
       <td height=25px style="border-color:grey;">
    	    <form action="#" method="POST" style="margin:0px;padding=0px;">
    	         <input type="text" name="testo" style="width: 430px; border-style:solid; background-color:grey;" />
    		    
    		    <input type="submit" name="submit" value="INVIA" style="border-style:solid; border-color:black;background-color:grey;" />
    			
    
    
    
    			<input type = "text" name = "account" />
    	    </form>
       </td>
    </tr>
    </table>
    
    </body>
    </html>
    come mai mi succede questo????
    Dopo l'invio del messaggio prova a inserire questa riga per distruggere le variabili passate in POST
    unset($tuavariabiletesto, $tuavariabilòenome);

    facci sapere
    ciao

  8. #8
    allora...

    @boots: sì, il browser mi richiede il rinvio del modulo, comunque come faccio a separare le pagine di salvataggio a quella di visualizzazione? In quanto per inviare un dato da una pagina all'altra bisogna usare il metodo post o get, ma in questo modo mi si aprirebbe una nuova pagina ogni volta che invio qualcosa al database. Comunque per ora mi interessa risolvere il problema della ripetizione dei dati

    @LuigiMem: ho provato come dici tu (appena sotto la riga in cui la pagina invia le informazioni al database ho inserito
    codice:
    unset($prendi_testo, $prendi_nome );
    ) tuttavia non funziona, però grazie lo stesso.

    grazie mille per l'attenzione e, se dovessi aprire una nuova discussione perchè questa sta diventando troppo pesante, avvisatemi pure.

    Ciao a tutti
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  9. #9
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Se ogni volta che ricarichi la pagina dici si nel ritrasmettere i dati, è come se rifacessi il submit dei dati e di conseguenza inserisci nel db gli stessi dati. Per questo ti dicevo di fare due pagine
    1. la form + visualizzazione
    2 . il salvataggio nel db

    1.
    Codice PHP:
    $contiene mysql_query("SELECT * FROM chatvera");
    while (
    $controlla mysql_fetch_array($contiene))
    {
    echo 
    "
    "
    .$controlla['nome']."      ".$controlla['testo']."
    "
    ;

    }
    $chiusura_connessione mysql_close($connessione);
    ?>
    <div style="overflow: auto;width: 100%; height: 175px">
    </div>
       </td>
    </tr>
    <tr>
       <td height=25px style="border-color:grey;">
            <form action="addMessage.php" method="POST" style="margin:0px;padding=0px;">
                 <input type="text" name="testo" style="width: 430px; border-style:solid; background-color:grey;" />
                
                <input type="submit" name="submit" value="INVIA" style="border-style:solid; border-color:black;background-color:grey;" />
                



                <input type = "text" name = "account" />
            </form>
       </td>
    </tr> 
    2
    Codice PHP:
    if(isset($_POST["account"]) && isset($_POST["testo"])){
        
    $prendi_nome $_POST["account"];
        
    $prendi_testo $_POST["testo"];
        
    $inserisci_nel_db mysql_query("INSERT INTO chatvera (nome, testo) VALUES ('$prendi_nome', '$prendi_testo')");
    }
    // Torno alla chat
    header("location: chat.php"); 

    Nel caso vuoi avere tutto su una pagina, il problema del "ritrasmetti" lo puoi evitare, ad esempio, usando un token
    Es:
    Codice PHP:
    <?php
    session_start
    ();
    if(isset(
    $_POST['submit'])){
        
    // method POST
       
    if(isset($_SESSION['chat_token']) && $_SESSION['chat_token'] == $_POST['token']){
             
    //  salviamo su db
       
    }else{
           echo 
    "Pagina scaduta";
       }
    }
    // Creiamo un nuovo token
    $_SESSION['chat_token'] = $token time();
    ?>
    ...
    <form action="#" method="POST" style="margin:0px;padding=0px;">
                 <input type="text" name="testo" style="width: 430px; border-style:solid; background-color:grey;" />
               <input type="hidden" name="token" value="<?php echo $token ?>">
                <input type="submit" name="submit" value="INVIA" style="border-style:solid; border-color:black;background-color:grey;" />
                



                <input type = "text" name = "account" />
            </form>

  10. #10
    Grazi mille (ho cercato lo smile che venera, ma non c'è XD)

    Ora tutto funziona a meraviglia, quando riaggiorno non mi si ripete l'ultima frase, ho seguito il tuo consiglio e ho messo la chat su due pagine, grazie ancora.

    ciauuu
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

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.