Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Far sparire un label dopo averlo compilato

    Ciao a tutti, sono nuovo su HTML.it ma è da anni che lo seguo.
    Mi sono imbattuto su un enorme dilemma: posso far sparire il label di un form dopo averlo compilato, ma trattenendo i dati inviati?

    Forse dettagliando ci capiamo meglio:

    Ho seguito alla lettera una guida su come creare una semplicissima chat in PHP e AJAX, e fin qui nessun problema, funziona perfettamente! C'è solo un enooorme problema, i campi sono quelli essenziali: nickname e messaggio; il problema sta nel label del nickname, è modificabile in qualsiasi momento.
    Quindi, esempio, se mi registro in chat come Mario, chiunque può chiamarsi Mario e scrivere a nome mio.
    Ora mi chiedo se si potrebbe fare qualcosa di simile:

    Mi registro come Mario, do l'OK, mi sparisce il label del nickname, compare quello del messaggio (o può anche già esserci) e posso scrivere in tutta tranquillità come Mario.
    Tuttavia, in quanto c'è il tempo per il reload, bisogna evitare (forse tramite cache) che dopo il riavvio della pagina, compaia nuovamente il label del nickname, quindi che i dati restino salvati.

    Questo è il mio problema, chi riesce ad aiutarmi?

    Qui ci sono i file che utilizzo per la chat:

    index.php
    codice:
    <html> 
    <head> 
     <title>Chat php</title> 
     <script language="javascript" type="text/javascript"> 
     <!-- 
     var httpObject = null; 
     var link = ""; 
     var timerID = 0; 
     
    function getHTTPObject(){ 
     if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP"); 
     else if (window.XMLHttpRequest) return new XMLHttpRequest(); 
     else { 
     alert("Il tuo browser non supporta AJAX."); 
     return null; 
     } 
    }
    function setOutput(){ 
     if(httpObject.readyState == 4){ 
     var response = httpObject.responseText; 
     var objDiv = document.getElementById("result"); 
     objDiv.innerHTML += response; 
     objDiv.scrollTop = objDiv.scrollHeight; 
     var inpObj = document.getElementById("msg"); 
     inpObj.value = ""; 
     inpObj.focus(); 
     } 
    } 
     
    function setAll(){ 
     if(httpObject.readyState == 4){ 
     var response = httpObject.responseText; 
     var objDiv = document.getElementById("result"); 
     objDiv.innerHTML = response; 
     objDiv.scrollTop = objDiv.scrollHeight; 
     } 
    } 
     
    function doWork(){ 
     if(document.getElementById('nic').value.length<1||document.getElementById('msg').value<1) 
     { 
     alert("Ci sono dei campi vuoti!"); 
     } 
     else{ 
     httpObject = getHTTPObject(); 
     if (httpObject != null) { 
     link="messaggio.php?nick="+document.getElementById('nic').value+ 
     "&msg="+document.getElementById('msg').value; 
     httpObject.open("GET", link , true); 
     httpObject.onreadystatechange = setOutput; 
     httpObject.send(null); 
     } 
     } 
    } 
     
    function doReload(){ 
     httpObject = getHTTPObject(); 
     var randomnumber=Math.floor(Math.random()*10000); 
     if (httpObject != null) { 
     link = "messaggio.php?all=1&rnd="+randomnumber; 
     httpObject.open("GET", link , true); 
     httpObject.onreadystatechange = setAll; 
     httpObject.send(null); 
     } 
    }
    function UpdateTimer() { 
     doReload(); 
     timerID = setTimeout("UpdateTimer()", 3000); 
    } 
     
    function keypressed(e){ 
     if(e.keyCode=='13'){ 
     doWork(); 
     } 
    } 
    </script> 
    </head> 
    <body onLoad="UpdateTimer();"> 
    <div id="result"> 
     <?php 
     $data = file("msg.html"); 
     foreach ($data as $line) { 
     echo $line; 
     } 
     ?> 
    </div> 
    <div id="sender" align="center" onKeyUp="keypressed(event);"> 
    <label>Nickname</label><input type="text" name="nic" size="30" id="nic" /><br />
    <label>Messaggio</label><textarea name="msg" id="msg" cols="30" 
    rows="3"></textarea><br />
    <button onClick="doWork();">Invia</button> 
    </div> 
    </body> 
    
    </html>

    messaggio.php
    codice:
    <?php  if (isset($_GET['msg'])){ 
     if (file_exists('msg.html')) { 
     $f = fopen('msg.html',"a+"); 
     } else { 
     $f = fopen('msg.html',"w+"); 
     } 
     $nick = isset($_GET['nick']) ? $_GET['nick'] : "Hidden"; 
     $msg=stripslashes(htmlentities($_GET['msg'], ENT_QUOTES)); 
     $data=date("d-m-y"); 
     $ora=date("G:i:s"); 
     $line = "<p><span>$nick: </span><span>$msg ($data $ora)</span></p>"; 
     fwrite($f,$line."\r\n"); 
     fclose($f); 
     echo $line; 
     
     } else if (isset($_GET['all'])) { 
     $flag = file('msg.html'); 
     $content = ""; 
     foreach ($flag as $value) { 
     $content .= $value; 
     } 
     echo $content; 
     
     } 
    
    ?>
    Il terzo ed ultimo è un file vuoto chiamato msg.txt e serve a contenere quanto scritto in chat.

    Vi prego aiutatemi! Sono ormai ore che ci provo senza esiti positivi!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Ci sarebbero diverse modifiche da fare perché la situazione sia corretta.

    Anche se scrivi una volta all'inizio un nickame e poi questo viene usato per tutto il resto della chat, nulla evita che 2 utenti scelgano all'inizio della loro sessione uno stesso nickname.
    Devi creare un sistema di registrazione al sito, una registrazione permanente usando il database (puoi anche farlo su un file di testo se non vuoi/puoi usare un db, ma è molto più difficile da gestire). Ogni volta che un utente vuole usare la chat dovrà effettuare il login al sito, in questo modo sei sicuro (se fai bene il sistema di registrazione) che non esistono 2 utenti con lo stesso nickname.
    Quando un utente effettua il login, il suo username lo metti in sessione.

    Ora non so come è fatta la chat, ma suppongo sia un form con 2 campi uno per il nickname di tipo "text" ed uno per il messaggio di tipo "textarea", se così fosse, il campo del nickname lo fai compilare automaticamente a PHP prendendo il nickname dalla sessione ed imposti il relativo campo come "readonly", così compare, si vede il nickname, viene inviato dalla chat, ma non è modificabile dall'utente.

  3. #3
    Hai ragione! Ma c'è una cosa da sottolineare: se ho seguito una guida per fare una cosa tanto insignificante (per il PHP) potrei mai riuscire a fare un sistema di reg & log?
    Non sapete se per caso c'è qualcosa che possa aiutarmi? Perché sono ancora al quanto impedito col PHP :/

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se non sei in grado di farlo, allora devi prima migliorare studiando, non puoi partire subito facendo cose complesse.

    "Qualcosa che possa aiutarti" in che senso? Un sistema di chat con autenticazione bello e pronto? Perché un tutorial che ti spieghi sia registrazione che chat non credo proprio che esista e spiegartelo qui sul forum a forza di domande non sapendo dove mettere mano è improponibile.

  5. #5
    Infatti non ci speravo molto ahahah!
    Dai mi metterò sotto con lo studio, è l'unica solution :/

    Grazie comunque per la disponibilità!

    PS: Eventualmente non si potrebbe fare qualcosa tipo "se il nome è già presente non consente l'invio dei messaggi"?

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.