Visualizzazione risultati 1 fino 5 di 5

Discussione: controllare che in un database da un form non sia già presente un certo username

  1. #1
    Guest

    Predefinito controllare che in un database da un form non sia già presente un certo username

    Ciao a tutti,

    Ho cercato parecchio anche qui nel forum, ma non riesco ad adattare il codice che trovo al mio.
    Il codice che qui sotto indico funziona, ma non riesco a visualizzare le scritte indicate dalla funzione echo nel modo corretto:
    ecco il codice:

    Codice PHP:
    <?php
    $connessione
    =mysql_connect("localhost", "root", "") or die (mysql_error());
    $selezione_db=mysql_select_db("guestbook", $connessione) or die (mysql_error());
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
    <head>
    <?php
    include("header.html");
    ?>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    <title>Leggi il guestbook!</title>
    <link rel="shortcut icon" href="favicon.ico"/>
    <link rel="stylesheet" href="video.css" type="text/css" media="screen" />
    <link rel="stylesheet" href="stampa.css" type="text/css" media="print" />
    <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="rss.xml" />



    </head>

    <body>
    <?php
    include("struttura_sito.html");
    ?>

    <?php
    function modulo_guest_locale(){ //attenzione all'apertura della parentesi graffa!
    ?><!-- attenzione alla chiusura del codice php, poiché bisogna fare così per inglobare normali tag html nello script //-->
    <div align="center">
    <h1>Guestbook</h1><br /><br /><br />
    <form action="nuovo_guest.php?azione=elabora" method="post" name="moduloGuest" id="moduloGuest">
    <table class="tabella_modulo2">
    <thead>
    <tr>
    <th colspan="2">Guestbook per lasciare messaggi</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>Il tuo nome:</td><td><input type="text" name="nome_utente" id="nome_utente" size="30" maxlength="40" /></td>
    </tr>
    <tr>
    <td>Il tuo messaggio:</td><td><textarea name="testo" id="testo" cols="60" rows="10"></textarea></td>
    </tr>
    <tr><td colspan="2"><input type="submit" value="Invia" name="invio" id="invio" />&nbsp;<input type="reset" value="Cancella" name="cancella" id="cancella" /></td>
    </tr>
    </tbody>
    </table>
    </form>
    <br /><br /><br />
    <div class="centra">Per tornare alla mia <a href="index.php">home page</a></div>
    </div>
    <?php
    }// attenzione alla parentesi graffa di chiusura, }, che deve comprendere tutto, ovvero anche i normali tag html.
    ?><!-- fine function modulo_guest_locale() //-->

    <?php
    function elabora_guest_locale(){ // inizio function
    $flag_controllo = 0;
    while (list (
    $chiave, $valore) = each ($_POST)) {
    if (
    $valore == "") {
    echo
    "<div class=\"h2\"> Devi inserire il tuo nome e il tuo messaggio, grazie!</div>
    <div align=\"center\"><br /><br /><br /><br /><br /> <img src=\"immagini/scimmia_che_scuote_testa.gif\" width=\"120\" height=\"82\" border=\"0\" alt=\"scimmia che scuote testa\" title=\"mi spiace, hai sbagliato, riprova!\" /></div> <br /> <div class=\"centra\"><a href=\"nuovo_guest.php?azione=inserisci\">Torna indietro e compila tutti i campi</a></div>
    <br /><br /><br /><br /><br />
    "
    ;
    $flag_controllo = 1;
    break;
    }
    }
    // cerco se l'utente ha già scritto dei messaggi
    $ricerca = mysql_query("select messaggio from messaggi where nome_utente = '" . htmlspecialchars($_POST['nome_utente']) . "' limit 1");
    // se la query restituisce righe, allora l'utente ha già scritto in database
    if (mysql_num_rows($ricerca) ) {
    echo
    "Devi scegliere un altro nickname!, ciao.";
    }



    if (
    $flag_controllo == 0) {
    $nome_utente_formattato=htmlspecialchars($_POST['nome_utente']);
    $messaggio_formattato=htmlspecialchars($_POST['testo']);
    $inserimento=mysql_query("insert into messaggi (nome_utente, messaggio, data_ora) values (\"$nome_utente_formattato\", \"$messaggio_formattato\", now())") or die (mysql_error());
    include(
    "middle.html");
    }
    }
    //fine function
    ?><!-- fine function elabora_guest_locale //-->

    <?php
    function read_guest(){
    $lettura_risultati=mysql_query("select nome_utente, messaggio, date_format(data_ora, 'in data %d/%m/%Y - ore %H:%i:%s') as data_formattata from messaggi order by data_ora")or(die(mysql_error()));
    if(
    mysql_num_rows($lettura_risultati)>0){
    echo
    "<div align=\"center\"><table class=\"tabella_seconda\">";
    $flag_colore=0;
    while(
    $scatola_temporanea=mysql_fetch_array($lettura_risultati)){
    $nome_utente=$scatola_temporanea['nome_utente'];
    $testo_messaggio=$scatola_temporanea['messaggio'];
    $data_inserimento=$scatola_temporanea['data_formattata'];
    echo
    "<tr>";
    if(
    $flag_colore==0){
    echo
    "<td class=\"cell8\">";
    $flag_colore=1;
    }
    else{
    echo
    "<td class=\"cell9\">";
    $flag_colore=0;
    }
    echo
    "L'utente $nome_utente, $data_inserimento, ha scritto:<br /><br />$testo_messaggio<br /><br /><br />";
    echo
    "</tr>";
    }
    //fine ciclo while che scorre la query e piazza i risultati nell'array temporaneo
    echo "</table></div>";
    }
    else{
    //se non ha trovato record
    echo "complimenti! nessuno ha finora inserito un messaggio.. tu puoi essere il primo!! <a href=\"modulo_guest_locale.php\">che aspetti??</a>";
    }
    }
    //fine function read_guest()


    switch($_GET['azione']){
    case
    "inserisci":
    modulo_guest_locale();
    break;
    case
    "elabora":
    elabora_guest_locale();
    break;
    case
    "leggi":
    read_guest();
    break;
    }
    //switch sulla variabile "azione" passata nella url
    ?>

    <?php
    include("footer_per_non_stampare.html");
    ?>

    </body>
    </html>
    Qualche idea?
    Ciao e grazie.
    Ultima modifica di musicanapoli : 26-10-2010 alle ore 01.18.18

  2. #2
    Guest

    Predefinito prova

    Codice PHP:
    $query=mysql_query("select nome_utente from messaggi") or die(mysql_error());
    while(
    $array=mysql_fetch_array($query))
    {
    $nick=$array["user"];
    if(
    $nick==$_POST['nome_utente']){die("Il nickname da te inserito è già presente nel database...usa un altro nickname";);
    }

    ;}
    dove nella prima riga per "messaggi" intendo la tabella e per "nome_utente" la colonna

  3. #3
    Guest

    Predefinito

    Ciao,

    Allora il codice che mi hai indicato ha lo stesso problema del mio, ovvero se nel database il nickname scelto da un utente è già presente, mi appare sia la scritta che l'utente deve compilare tutti i campi che quella indicante (qui in modo esatto), che è stato scelto un nickname già usato da qualcun altro.

    Io dovrei far apparire le due scritte in base all'errore che compie un possibile visitatore del mio sito: ovvero nel caso non compili tutti i campi, la prima scritta, mentre nel caso di scelta errata del nickname, il secondo avviso.
    Ho provato varie modifiche al codice, ma non ci riesco.
    Grazie e ciao.

  4. #4
    Guest

    Predefinito

    Devi separarli logicamente.
    Fare cioè una situazione logica in modo che se si verifica uno, l'altro non si verifica perchè sono per esempio separati da un if(){} else {}

    Altrmenti un return; che blocca tutto il codice php, fermando lì le azioni.

  5. #5
    Guest

    Thumbs up

    Ciao,

    Immaginavo di dover dare delle istruzioni simili a PHP affinché potesse far apparire le scritte in modo esatto. In effetti non riuscivo ad "aggiustare" il tutto.
    Alla fine, grazie ai vostri suggerimenti ci sono riuscito.
    Posto il codice così che possa essere d'aiuto anche ad altri:
    Codice PHP:
    <?php
    function elabora_guest_locale(){ // inizio function
    // cerco se l'utente ha già scritto dei messaggi
    $ricerca = mysql_query("select messaggio from messaggi where nome_utente = '" . htmlspecialchars($_POST['nome_utente']) . "' limit 1");
    // se la query restituisce righe, allora l'utente ha già scritto in database
    if (mysql_num_rows($ricerca) ) {
    echo
    "<div class=\"h2\">Devi scegliere un altro nickname! Quello da te inserito &egrave; gi&agrave; presente nel database...usa un altro nick,ciao.</div> <br /><div class=\"centra\"><a href=\"nuovo_guest.php?azione=inserisci\">Torna indietro e scegli un altro nome</a></div>
    <br /><br /><br /><br /><br /> "
    ;
    }
    else {
    $flag_controllo = 0; // inizializzo la variabile flag a valore zero
    while (list ($chiave, $valore) = each ($_POST)) { // con un ciclo while controllo che l'utente abbia compilato tutti i campi del form
    if ($valore == "") { // se uno dei campi non é stato compilato, eseguo le istruzioni che seguono
    echo "<div class=\"h2\"> Devi inserire il tuo nome e il tuo messaggio, grazie!</div>
    <div align=\"center\"><br /><br /><br /><br /><br /> <img src=\"immagini/scimmia_che_scuote_testa.gif\" width=\"120\" height=\"82\" border=\"0\" alt=\"scimmia che scuote testa\" title=\"mi spiace, hai sbagliato, riprova!\" /></div> <br /> <div class=\"centra\"><a href=\"nuovo_guest.php?azione=inserisci\">Torna indietro e compila tutti i campi</a></div>
    <br /><br /><br /><br /><br />"
    ;
    $flag_controllo = 1; // dichiaro che in tal caso la variabile flag assuma valore 1 cioé di errore
    break; // interrompo allora l'esecuzione del codice successivo, poiché appunto c'é un campo vuoto nel form
    }
    }
    if (
    $flag_controllo == 0) {
    $nome_utente_formattato=htmlspecialchars($_POST['nome_utente']);
    $messaggio_formattato=htmlspecialchars($_POST['testo']);
    $inserimento=mysql_query("insert into messaggi (nome_utente, messaggio, data_ora) values (\"$nome_utente_formattato\", \"$messaggio_formattato\", now())") or die (mysql_error());
    include(
    "middle.html");
    }
    // fine del primo if
    } // fine function
    } //fine dell'else
    ?><!-- fine function elabora_guest_locale //-->
    Così finalmente faccio apparire le scritte giuste, in base all'errore che un utente commette compilando il form del mio sito.
    Vi ringrazio e un saluto.

    Ciao.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •