Visualizzazione dei risultati da 1 a 10 su 24

Hybrid View

  1. #1
    zacca94 grazie per l'attenzione e per la tua pazienza.

    Ho deciso di ripartire da zero, settando l'ambiente nel modo corretto, come hai suggerito tu.

    Entro questa settimana dovrei ricevere un manuale di PHP che ho ordinato (Missing Manual di Brett McLaughlin, un libro che ho visto al corso di HTML e che mi pare abbastanza chiaro), e solo dopo averlo letto almeno una volta riprover� a scrivere codice, intanto giochero' con HTML che quantomeno non e' 'pericoloso'.

    Quindi ho davvero apprezzato il tuo aiuto che mi ha chiarito che prima di scrivere devo imparare almeno un po' di grammatica.


    Vorrei pero' tornare su queste tue parole :

    Oltretutto ripeto se il database ha 2 record
    utente_1 | password_1 | email@primo.it
    utente_2 | password_2 | email@secondo.it

    $count = mysql_num_rows($res);
    RESTITUISCE 2.
    Quindi ...

    ecco, non sono d'accordo.
    eseguo :

    $Res=MySQL_query ("Select * from users where email=email@secondo.it)
    - non badare alla sintassi -
    $count=mySQL_num_row($res)


    se la select e' sintatticamente corretta deve quindi restituire 1 o 0
    1 se esiste un records con email=
    email@secondo.it
    0 se nel database non esiste un records con email=email@secondo.it
    un errore se la sintassi e' sbagliata.

    Sebbene avessi pochi dubbi ho cancellato i record nel db lasciandone solo 2 poi
    ho provato e in effetti il risultato e' proprio 1, ho poi aggiunto altri record e
    il risultato non e' cambiato.

    Ovviamente questo perche' quando registro l'utente controllo che l'email sia
    univoca (utilizzando una select).

    Certo non e' il metodo migliore, dovrei impostare un indice univoco sul campo e poi gestire
    l'eventuale errore ma come faccio ora e' piu' semplice, come tutto il resto del codice che utilizzo.

    Quando ero piu' giovane l'avrei definito senza dubbio spaghetti-code,... ecco perche' devo ripartire da zero.

    Grazie ancora per la tua cortesia.


    Mauro










    Ultima modifica di curzio.maria; 26-04-2017 a 20:44

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Quote Originariamente inviata da curzio.maria Visualizza il messaggio
    ecco, non sono d'accordo.
    eseguo :

    $Res=MySQL_query ("Select * from users where email=email@secondo.it)
    - non badare alla sintassi -
    $count=mySQL_num_row($res)


    se la select e' sintatticamente corretta deve quindi restituire 1 o 0
    1 se esiste un records con email=
    email@secondo.it
    0 se nel database non esiste un records con email=email@secondo.it
    un errore se la sintassi e' sbagliata.

    Sebbene avessi pochi dubbi ho cancellato i record nel db lasciandone solo 2 poi
    ho provato e in effetti il risultato e' proprio 1, ho poi aggiunto altri record e
    il risultato non e' cambiato.

    Ovviamente questo perche' quando registro l'utente controllo che l'email sia
    univoca (utilizzando una select).


    Ovvio se metti una clausola che restituisce per forza una riga, la mia era una precisazione generale nel caso da me proposto (per esempio se non hai impostato un set di caratteri adeguato per i nickname e hai un utente che si chiama luca ed uno lùca anche se fai una select con where username='luca' ti restituirà una row con 2 elementi).
    Era solo per sottolineare la pazzia di questa riga:
    if( $count == 1 && $row['userPass']==$password )

    Che è palesemente sviluppata da uno che non solo non ha conoscenza delle potenzialità del linguaggio di PHP e MySQL ma che non ha neanche studiato su un manuale che gli ha indicato come fare una semplice ricerca univoca...


    Cordialmente, Tomas

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    (per esempio se non hai impostato un set di caratteri adeguato per i nickname e hai un utente che si chiama luca ed uno lùca anche se fai una select con where username='luca' ti restituirà una row con 2 elementi).
    Secondo me dovresti andarci piano con le valutazioni. Qui ti stai arrampicando sugli specchi per giustificare quello che hai scritto prima. Una query per nome utente NON PUO' restituire più di una riga, altrimenti hai un problema a monte sulla progettazione del db.
    Poi che quel codice non sia il massimo non ci sono dubbi, ma in ogni caso fare la select solo sull'utente e controllare la password a valle potrebbe essere utile per capire, in caso di errore, se il problema sta nel nome utente che non esiste o nella password sbagliata. A qualcuno potrebbe servire.

    @curzio.maria: sei in grado di postare qui l'output di phpinfo()? ho un vago sospetto...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Quote Originariamente inviata da luca200 Visualizza il messaggio
    Secondo me dovresti andarci piano con le valutazioni. Qui ti stai arrampicando sugli specchi per giustificare quello che hai scritto prima. Una query per nome utente NON PUO' restituire più di una riga, altrimenti hai un problema a monte sulla progettazione del db.
    Poi che quel codice non sia il massimo non ci sono dubbi, ma in ogni caso fare la select solo sull'utente e controllare la password a valle potrebbe essere utile per capire, in caso di errore, se il problema sta nel nome utente che non esiste o nella password sbagliata. A qualcuno potrebbe servire.

    @curzio.maria: sei in grado di postare qui l'output di phpinfo()? ho un vago sospetto...
    Certo... può essere utile anche se fai il salt e l'encrypt della password tramite algoritmi tuoi o altrui, ma rimane il fatto che quelle righe, per il codice che è stato presentato, sono mal progettate.

    - Accetto che mi fai il fetch della password se ci devi fare delle operazioni sopra;
    - Non accetto che progetti una query per scorrere l'intero database;
    - Non accetto che assegni una variabile soprattutto in un linguaggio a tipizzazione dinamica (anche se qui voglio essere fiscale);
    - Non accetto il senso non logico di: if( $count == 1 && $row['userPass']==$password ), per i motivi che ho già spiegato oltre al fatto che a questo punto era possibile evitare porzione dell'if (nel momento in cui estrai la password puoi semplicemente verificare che non sia vuota e che coincida);

    Se qualcuno posta un codice simile a questo:
    codice:
    <?php
      $email = @$_POST["email"];
      if ($email != "" && isset($email) && !empty($email)) {
        // ...
      } elseif ($email == "" || !isset($email)) {
        // ...
      }
    Mi sento costretto a spiegare che qualcosa che non va...

    Di conseguenza mi dispiace essere stato poco chiaro nei primi post, il mio intento era solo quello di delimitare che ci sono dei gravi problemi strutturali.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.