+ Rispondi alla Discussione
Risultati da 1 a 13 di 13

Miglioramento script

Ultimo Messaggio di marcio il:
  1. #1
    User
    Data Registrazione
    Feb 2011
    Località
    Bologna
    Messaggi
    16

    Miglioramento script

    Ciao ragazzi, ho scritto questo script che inserisce dei dati trasmetti tramite form in un database mysql.

    Mi chiedevo, come posso aggiungere un controllo se i dati inseriti sono già esistenti all'interno del database?

    ps: ho aggiunto un controllo sul nome all'interno di una funzione richiamata all'interno del codice, ho fatto male?
    vedo che lo script funziona.

    <html>
    <head>
    <body>

    come vi sembra?

    <?

    require 'connect.php';
    require 'config.php';

    function controllodati()
    {
    if ( empty($_POST['nome']) ) die ('Il campo nome è obbligatorio');
    }

    $query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
    $result= mysql_query($query);
    if(controllodati()==true) {
    die ('impossibile continuare');
    }

    else {
    if(!$result) {
    die ('Inserimento non riuscito'.mysql_error());
    }
    }
    mysql_close();
    echo 'Inserimento avvenuto con successo';
    ?>
    <br>
    <a href="form.html"> Torna al form di inserimento </a>
    <br>
    <a href="leggi.php"> Visualizza tutti i valori esistenti nel database </a>

    </head>
    </body>
    </html>

  2. #2
    Utente Premium L'avatar di tigrone
    Data Registrazione
    Oct 2009
    Località
    Garlasco... non sono stato io!!!!
    Messaggi
    439
    Citazione Originariamente Scritto da Holden Visualizza Messaggio
    Mi chiedevo, come posso aggiungere un controllo se i dati inseriti sono già esistenti all'interno del database?
    Appunto... il controllo devi farlo PRIMA di inserire i dati nel db.

  3. #3
    User
    Data Registrazione
    Feb 2011
    Località
    Bologna
    Messaggi
    16
    <html>
    <head>
    <body>



    <?
    require 'connect.php';
    require 'config.php';


    function controllodati()
    {
    if ( empty($_POST['nome']) ) die ('Il campo nome è obbligatorio');
    }


    controllodati();

    $query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
    $result= mysql_query($query);

    if(!$result) {
    die ('Inserimento non riuscito'.mysql_error());
    }
    mysql_close();
    echo 'Inserimento avvenuto con successo';
    ?>
    <br>
    <a href="form.html"> Torna al form di inserimento </a>
    <br>
    <a href="leggi.php"> Visualizza tutti i valori esistenti nel database </a>

    </head>
    </body>
    </html>


    vorrei anche inserire un controllo se il nome utente è già esistente
    come potrei fare?

  4. #4
    Utente Premium L'avatar di tigrone
    Data Registrazione
    Oct 2009
    Località
    Garlasco... non sono stato io!!!!
    Messaggi
    439
    Citazione Originariamente Scritto da Holden Visualizza Messaggio
    vorrei anche inserire un controllo se il nome utente è già esistente
    come potrei fare?
    C'è un ottimo tutorial su questo forum:

    http://www.giorgiotave.it/forum/scri...a-privata.html

    Leggi il codice del file 'registrati.php'... c'è un esempio di come si può controllare la presenza di un particolare dato nel db.

  5. #5
    User
    Data Registrazione
    Feb 2011
    Località
    Bologna
    Messaggi
    16
    grazie mille

    posso cogliere l'occasione e chiederti una cosa?

    perchè così mi ritorna sempre la scritta impossibile???
    il simbolo || non significa or?

    <?
    require 'connect.php';
    require 'config.php';

    function controllodati()
    {
    if ( empty($_POST['nome']) || "SELECT * FROM glossario WHERE nome='{$_POST['nome']}'") {
    die ('impossibile');
    }
    }


    controllodati();

    $query= "insert into glossario (nome, descrizione) values ('{$_POST['nome']}', '{$_POST['descrizione']}')";
    $result= mysql_query($query);

    if(!$result) {
    die ('Inserimento non riuscito'.mysql_error());
    }
    mysql_close();
    echo 'Inserimento avvenuto con successo';
    ?>

  6. #6
    Utente Premium L'avatar di tigrone
    Data Registrazione
    Oct 2009
    Località
    Garlasco... non sono stato io!!!!
    Messaggi
    439
    Così è sbagliato...
    Aggiungilo dopo il POST:

    Codice:
    function controllodati()
    { 
    if (empty($_POST['nome'])) die ('Il campo nome è obbligatorio');
    elseif (mysql_num_rows(mysql_query("SELECT * FROM glossario WHERE nome='{$_POST['nome']}' LIMIT 1")) == 1) die ('Nome Utente non disponibile');
    }

  7. #7
    User
    Data Registrazione
    Feb 2011
    Località
    Bologna
    Messaggi
    16
    GRANDISSIMOOOOOO FUNZIONA.


    grazie mille, sei gentilissimo.

    EVVAIIII

  8. #8
    User
    Data Registrazione
    Feb 2011
    Località
    Bologna
    Messaggi
    16
    ti potrei chiedere l'ultima cosa e dopo sparisco senza disiturbarti?

    mi potresti spiegare le cose che hai aggiunto????
    non mi piace fare copia incolla altrimenti la prossima volta rimarrò ancorato allo stesso punto.

    mysql_num_rows -- Ottiene il numero di righe in un risultato? che significa?
    LIMIT 1")) == 1?
    Ultima modifica di Holden; 17-02-11 alle 16:16

  9. #9
    Utente Premium L'avatar di tigrone
    Data Registrazione
    Oct 2009
    Località
    Garlasco... non sono stato io!!!!
    Messaggi
    439
    Ascolta... capisco la tua euforia perchè l'ho provata anch'io...
    Però... ora trasformala in passione ed impegno, documentandoti e studiando... ma senza bruciare le tappe come hai fatto oggi...

    I linguaggi vanno capiti e non imparati a memoria... ma per capirli bisogna cominciare dall'inizio... piano piano... tassello per tassello.

    La Rete con Google, gtforum, html.it, le guide ecc... ci è amica... i libri pure

    Buon studio!

  10. #10
    Utente Premium L'avatar di html5today
    Data Registrazione
    Dec 2010
    Località
    Roma
    Messaggi
    153
    Citazione Originariamente Scritto da tigrone Visualizza Messaggio
    Così è sbagliato...
    Aggiungilo dopo il POST:

    Codice:
    function controllodati()
    { 
    if (empty($_POST['nome'])) die ('Il campo nome è obbligatorio');
    elseif (mysql_num_rows(mysql_query("SELECT * FROM glossario WHERE nome='{$_POST['nome']}' LIMIT 1")) == 1) die ('Nome Utente non disponibile');
    }
    Un paio di considerazioni:

    1. nel codice che suggerisci utilizzi i dati provenienti da $_POST senza validarli nè renderli sicuri - pessimo suggerimento. Assolutamente *sempre* da usare funzioni tipo mysql_real_escape_string per essere (relativamente) sicuri che l'input che riceviamo non possa fare danni nel nostro database
    2. la query che suggerisci non mi sembra molto efficiente per due motivi:
      1. perchè fare un "SELECT * FROM..." (cioè tutti i campi) quando basterebbe un solo campo, tipo "SELECT nome FROM ..."?
      2. mysql_num_rows (anche se unita ad un "LIMIT") obbliga probabilmente MySQL a fare un full table scan. Molto meglio sarebbe prendere direttamente il campo che ci interessa


    Tutto ciò detto, a mio modo di vedere un codice migliore è:

    Codice PHP:
    function controllodati($nome) {
        if (empty(
    $nome)) {
            die (
    'Il campo nome è obbligatorio');
        } else {
            
    $res mysql_query("SELECT nome FROM glossario WHERE nome = '" mysql_real_escape_string($nome) . "'");
            
    $row mysql_fetch_array($res);
            if (
    $row[0]) {
                die (
    'Nome Utente non disponibile');
            }
        }

    Alcune considerazioni poi per l'autore della domanda originale:

    1. con questo codice "pIppo", "PIPPO" e "pippo" sono tutti dei nomi accettati e non duplicati - sicuro di non voler aggiungere un controllo almeno delle maiuscole?
    2. come hai potuto vedere ho chiamato la funzione con un parametro ($nome) e non accedendo direttamente a $_POST: questo perchè potresti aver bisogno di questa funzione in altre situazioni dove non hai dati in $_POST e dunque è utile poter passare il valore alla funzione
    3. non penso sia una buona idea fare un "die" in una funzione, io piuttosto ritornerei "false" e poi gestirei la logica (ad esempio mostrando un messaggio di errore più carino) nel codice che richiama questa funzione
    4. visto che hai voglia di studiare e imparare, esplora un po' questa libreria per utilizzare i DB in maniera molto più efficiente che usando le funzioni "native" di PHP: h t t p ://pear.php.net/package/MDB2

    HTH, ciao!

  11. #11
    Utente Premium L'avatar di tigrone
    Data Registrazione
    Oct 2009
    Località
    Garlasco... non sono stato io!!!!
    Messaggi
    439
    Si... d'accordo in tutto... ma uno che è all'inizio è bene che impari le basi senza troppi 'incasinamenti'... poi viene il resto.
    Non penso che adesso debba programmare un portale...

  12. #12
    Utente Premium L'avatar di html5today
    Data Registrazione
    Dec 2010
    Località
    Roma
    Messaggi
    153
    Citazione Originariamente Scritto da tigrone Visualizza Messaggio
    Si... d'accordo in tutto... ma uno che è all'inizio è bene che impari le basi senza troppi 'incasinamenti'... poi viene il resto.
    Non penso che adesso debba programmare un portale...
    Uhm... permettimi di dissentire.

    Non sto parlando di "programmare un portale", ma imparare fin da subito le "piccole" ma importantissime cose (tipo fare il controllo dell'input prima di inserirlo in una query) è l'essenza dell'apprendimento.

    E' molto importante che chi ha le conoscenze si adoperi per trasmetterle nella maniera più corretta e completa possibile, evitando di pensare "tanto è alle prime armi e non capirà/non gli servirà". Sennò si fanno più danni che altro.

    IMHO, ovviamente

  13. #13
    Utente Premium
    Data Registrazione
    May 2005
    Località
    Tenerife
    Messaggi
    361
    Codice:
    mysql_real_escape_string
    non ti puoi permettere di NON usarlo

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.