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

    istruzione IF che fallisce in php5...!

    allora non che io sia un mago del php ma questo ha sempre funzionato con php su linux... ora lo stesso con php5 su win... na ceppa!
    ho uno script che posta su se stesso per fare un semplice login... intercetto l'invio dei dati:

    if($_POST['invia']) {
    print "submit";
    $username = $_POST['username'];
    $password = $_POST['password'];
    $login->login($username, $password);

    }

    questo è il metodo che fa il login, un po brutale ma ha sempre funzionato:

    function login($username, $password) {

    $sql = "select * from users where username = '$username' and password = '$password' and confirm = 1";
    $result = DB::query($sql);
    if(mysql_numrows($result) == 1) {
    $row = mysql_fetch_array($result);
    session_start();
    $_SESSION['sessid'] = $row['id'];
    header("Location: /users");
    exit;
    }
    else {
    header("Location: /users/login.php");
    exit;
    }
    }

    la cosa incredibile è che fallisce all'istruzione:
    if(mysql_numrows($result) == 1)
    ma se scrivo
    if(1)
    fallisce lo stesso. insomma è la if.
    se prima della if metto un print "ciccio" e un return il tutto viene esegiuito correttamente, viene stampata anche la print del primo script (print "submit". In caso contrario nemmeno quella che si trova prima della chiamata al metodo...
    qualche suggerimento?
    ciao e grazie

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  2. #2
    UP

    qualcuno ha qualche idea in proposito?
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  3. #3

    Re: istruzione IF che fallisce in php5...!

    Originariamente inviato da Manuel.s
    questo è il metodo che fa il login, un po brutale ma ha sempre funzionato
    spera che nessuno trovi mai quel login perche' e' uno dei piu' facili in assoluto da scavalcare ...

    sqlinjections => OK
    errorigenerabili => OK
    notice => OK

    c'e' tutto quello che non dovrebbe esserci in una pagina php ...


    cmq sia, un IF buggato penso sia impossibile, molto piu' probabile che

    $result = DB::query($sql);

    generi un errore bloccando, giustamente, lo script in quella riga, evitando di andare a quella successiva, guarda caso l' if.

    Un consiglio, impara a scrivere PHP con error_reporting E_ALL e leggiti a video quanti errori ci sono nel codice che usi, ogni errore una possibile falda, ogni notice una non curanza nell' utilizzo del linguaggio .

    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Originariamente inviato da Manuel.s
    UP

    qualcuno ha qualche idea in proposito?
    Le idee sono quelle che mancano un po ovunque....

    Questo sotto lo hai messo per vedere se eravamo attenti oppure e' proprio scritto cosi'?

    if(mysql_numrows($result) == 1) {


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ciao
    ti ringrazio per la risposta
    error_reporting è impostato a ALL come sempre faccio in fase di sviluppo ma non viene riportato nessun errore
    inoltre se l'errore è generato dal metodo che esegue la query dovrebbe stampare un messaggio. ti riporto il codice semplice semplice:
    function query($sql) {
    $result = mysql_query($sql) or die("query error:
    ".mysql_error()."
    ".$sql);
    return $result;
    }

    il problema semmai è che non stampa messaggi prima della chiamata del metodo, e non essendoci fatal errors questo non è regolare.
    quanto ai problemi di sicurezza sicuramente sono inesperto ma non ne vedo, puoi dirmi quali sarebbero e come posso rimediare?

    ciao e grazie

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  6. #6
    Originariamente inviato da piero.mac
    Le idee sono quelle che mancano un po ovunque....

    Questo sotto lo hai messo per vedere se eravamo attenti oppure e' proprio scritto cosi'?

    if(mysql_numrows($result) == 1) {

    no è proprio scritto cosi

    ma che è il forum degli indovinelli? se sto a far casino ditemelo subito

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  7. #7
    non dovrebbe essere mysql_num_rows??
    debian:~$ uname -r
    2.6.18-1-686
    debian:~$

    Il quiz manager è nato!!! visitate http://shenk.altervista.org !!

  8. #8
    Originariamente inviato da Manuel.s
    Ciao
    ti ringrazio per la risposta
    error_reporting è impostato a ALL come sempre faccio in fase di sviluppo ma non viene riportato nessun errore
    se non viene riportato nessun errore dubito tu stia sviluppando in reporting E_ALL ( solo E_ALL, senza E_NOTICE dopo ... ) perche' il primo if

    if($_POST['invia'])
    e' gia' un errore ... if cosa ? $_POST['invia'] chi e' , sei sicuro che e' settato ? controlli il nulla ?

    if(isset($_POST['invia']))
    ... gia' va molto meglio ....



    Originariamente inviato da Manuel.s
    inoltre se l'errore è generato dal metodo che esegue la query dovrebbe stampare un messaggio. ti riporto il codice semplice semplice:
    function query($sql) {
    $result = mysql_query($sql) or die("query error:
    ".mysql_error()."
    ".$sql);
    return $result;
    }
    se questo e' quanto presente all' interno del metodo query dell' oggeto DB , peraltro e' sconsigliabile usare l' or die col mysql_error in un lavoro pubblicato on-line , se lo script non ti da alcun errore mai, significa che hai lo show_errors impostato a Off sul php.ini perche' come ti ripeto dovresti avere almeno dei notices, mentre cosi' non e' ... il php5 l' hai installato tu o hai un easyphp o programmini simili ???



    Originariamente inviato da Manuel.s
    il problema semmai è che non stampa messaggi prima della chiamata del metodo, e non essendoci fatal errors questo non è regolare.
    non e' solo questioni di fatals, e' questione che non ti stampa niente di cio' che dovrebbe stampare, a partire dai notice



    Originariamente inviato da Manuel.s
    quanto ai problemi di sicurezza sicuramente sono inesperto ma non ne vedo, puoi dirmi quali sarebbero e come posso rimediare?
    non ne vedi ... allora, passi senza fare alcun controllo di alcun tipo 2 variabili dentro il database ... basta scrivere un login con un apice e ti salta tutto, basta scrivere una sintassi molto semplice e si entra loggati , basta che la versione di mysql supporti le subquery e ti prendo quello che mi pare dal database, o posso settarlo ... mi creo un account o faccio altro ...

    eccoti un inizio:
    http://freephp.html.it/articoli/view...olo.asp?id=123






    Originariamente inviato da Shenk87
    non dovrebbe essere mysql_num_rows??
    oltretutto ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #9
    hai ragione è meglio num_rows ma numrows è ancora valida è c'ho l'abitudine a scrivere cosi... cmq non è quello che va in errore

    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

  10. #10
    hai ragione il reporting era a E_ALL & ~E_NOTICE ora l'ho rimesso a E_ALL. Show errors è On
    ho messo isset($_POST['invia']) per far scomparire i warning ma come prima non visualizzo nessun errore... se stampo una stringa dopo l'esecuzione della query e subito dopo metto un return va tutto bene, stampo anche il numero di righe restiruite dalla query... se poi faccio un confronto su quel risultato (togliendo il return) sembra che dai false tutta la if nel primo script...
    non ci capisco piu niente...



    Originariamente inviato da andr3a
    se non viene riportato nessun errore dubito tu stia sviluppando in reporting E_ALL ( solo E_ALL, senza E_NOTICE dopo ... ) perche' il primo if

    if($_POST['invia'])
    e' gia' un errore ... if cosa ? $_POST['invia'] chi e' , sei sicuro che e' settato ? controlli il nulla ?

    if(isset($_POST['invia']))
    ... gia' va molto meglio ....




    se questo e' quanto presente all' interno del metodo query dell' oggeto DB , peraltro e' sconsigliabile usare l' or die col mysql_error in un lavoro pubblicato on-line , se lo script non ti da alcun errore mai, significa che hai lo show_errors impostato a Off sul php.ini perche' come ti ripeto dovresti avere almeno dei notices, mentre cosi' non e' ... il php5 l' hai installato tu o hai un easyphp o programmini simili ???




    non e' solo questioni di fatals, e' questione che non ti stampa niente di cio' che dovrebbe stampare, a partire dai notice




    non ne vedi ... allora, passi senza fare alcun controllo di alcun tipo 2 variabili dentro il database ... basta scrivere un login con un apice e ti salta tutto, basta scrivere una sintassi molto semplice e si entra loggati , basta che la versione di mysql supporti le subquery e ti prendo quello che mi pare dal database, o posso settarlo ... mi creo un account o faccio altro ...

    eccoti un inizio:
    http://freephp.html.it/articoli/view...olo.asp?id=123







    oltretutto ...
    Manuel

    View my profile on LinkedIn
    Ubertini: amo solo te!

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.