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

    Form,variabile d'ambiente vuota?!?

    Salve a tutti,sono nuovo di queste parti.
    Mi sono imbattuto in un problemino di cui non riesco a capacitarmi .Sono alle prime armi e stavo creando la parte di registrazione e di login di un ipotetico sito.
    Nessun problema con la registrazione,che avviene a dovere,senza doppi inserimenti o quant altro. Passando al login mi sono accorto che al submit dei form user e password (ho provato sia col metodo get che con post) le variabili d'ambiente son vuote... o meglio,utilizzate nella query di SELECT non mi danno il risultato sperato. il codice

    Codice PHP:
    <?php echo"<html> <head></head> <body>";
     echo (
    "<form method='post'>          
    Username 
     <input type='text' name='user'/>

    Password 
    <input type='text' name='password' /> 

              
    <input type='submit' value='Submit' > </form>"
    );
     
    $con mysql_connect("localhost","root","pass");
      if (!
    $con)   {   die('Could not connect: ' mysql_error());   }
     
    mysql_select_db("test"$con);  
    $sql="SELECT * FROM  utenti WHERE user_utente=".($_POST['user']); 
    if (!
    mysql_query($sql,$con))   {  
     die(
    "User o password sbagliati. Assicurati inoltre di essere registrato");   }
     echo 
    "Login riuscito con successo";  mysql_close($con);  echo "</body> </html>"?>
    Mi chiedo perchè la insert mi funziona e la select no.
    Vi ringrazio per le delucidazioni e l'aiuto.

  2. #2
    questo codice è scritto veramente male.
    Non ci sono condizioni verificate sull'effettiva compilazione del form, non ci sono filtri sulle variabili passate, la connessione creata lì al momento, e l'action mancante nel tag <form>
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    La select si basa su una variabile $_POST sulla quale non fai nessun controllo
    per verificare che esista o meno (isset,empty o altri...), quindi se non viene inviato
    il form è ovvio che non vada, inoltre ci sono molte cose che non tornano per
    essere una pagina di login.

    Il primo echo è inutile potevi lasciarlo semplicemente libero, stabilisci la connessione
    in una pagina a parte ed includila dove ti serve, rendi sicure variabili pubbliche
    tipo i $_POST o i $_GET con addslashes o mysql_real_escape_string o oltre funzioni
    che aggiungono gli slash agli apostrofi quando le usi in una query, per verificare
    il login conta i risultati non controllare se la query è riuscita o meno, setta una sessione
    se è riuscito il login e controlla anche la password poi magari criptandola in md5
    e basati poi su quella sessione per vedere se è loggato, perchè ora come ora
    come login non ha molto senso.

  4. #4
    Non voglio essere polemico.
    Sicuramente per una maggiore chiarezza avrei potuto indentare e tenere piu pulito e organizzato il codice.
    Tu non mi hai risposto,l azione è implicita sulla pagina stessa quando non specificata. E come ho detto sono alle prime armi,tutto ciò è puramente a scopo didattico.
    Se sai dirmi qualcosa di costruttivo ti ascolto volentieri

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Premesso che il codice per creare il form puoi anche metterlo fuori dal codice php in modo che il tutto venga un po' più ordinato, al tag form devi anche metterci quantomeno l'action, o alla pressione del pulsante submit non vai da nessuna parte.
    Se vuoi usare la stessa pagina puoi specificare $_SERVER['PHP_SELF'] come action, ma devi poi eseguire il codice del login solo se $_POST è settata (dovrai verificarlo) altrimenti la select viene eseguita anche la prima volta che arrivi sulla pagina.

    Cerca di scrivere codice un po' pulito che quello che hai proposto è da mettersi le mani nei capelli.

    Codice PHP:
    <?php
    $con 
    mysql_connect("localhost","root","pass") or die('Could not connect: ' mysql_error());
    mysql_select_db("test"$con) or die('Impossibile selezionare il database: '.mysql_errno().': '.mysql_error());
    ?>
    <html>
        <head></head>
        <body>
            <form method='post'>
                Username 
     <input type='text' name='user' />

                Password 
    <input type='text' name='password' /> 

              
                <input type='submit' value='Submit' />
            </form>
        </body>
    </html>

  6. #6
    Originariamente inviato da RoTeam
    La select si basa su una variabile $_POST sulla quale non fai nessun controllo
    per verificare che esista o meno (isset,empty o altri...), quindi se non viene inviato
    il form è ovvio che non vada, inoltre ci sono molte cose che non tornano per
    essere una pagina di login.

    Il primo echo è inutile potevi lasciarlo semplicemente libero, stabilisci la connessione
    in una pagina a parte ed includila dove ti serve, rendi sicure variabili pubbliche
    tipo i $_POST o i $_GET con addslashes o mysql_real_escape_string o oltre funzioni
    che aggiungono gli slash agli apostrofi quando le usi in una query, per verificare
    il login conta i risultati non controllare se la query è riuscita o meno, setta una sessione
    se è riuscito il login e controlla anche la password poi magari criptandola in md5
    e basati poi su quella sessione per vedere se è loggato, perchè ora come ora
    come login non ha molto senso.
    Ti ringrazio,come ho detto sto imparando,non ho ancora bisogno di appesantire,un passo ala volta e ci inserisco piu controlli e cose possibili!
    Ovviamente il controllo sulla password (che non è cifrata,non è nascosta da asterischi in fase di battitura) l avrei messo,ma dal momento in cui non mi andava neanche quello sullo user l avevo tolto.
    Saluti

  7. #7
    Originariamente inviato da Alhazred
    Premesso che il codice per creare il form puoi anche metterlo fuori dal codice php in modo che il tutto venga un po' più ordinato, al tag form devi anche metterci quantomeno l'action, o alla pressione del pulsante submit non vai da nessuna parte.
    Se vuoi usare la stessa pagina puoi specificare $_SERVER['PHP_SELF'] come action, ma devi poi eseguire il codice del login solo se $_POST è settata (dovrai verificarlo) altrimenti la select viene eseguita anche la prima volta che arrivi sulla pagina.

    Cerca di scrivere codice un po' pulito che quello che hai proposto è da mettersi le mani nei capelli.

    Codice PHP:
    <?php
    $con 
    mysql_connect("localhost","root","pass") or die('Could not connect: ' mysql_error());
    mysql_select_db("test"$con) or die('Impossibile selezionare il database: '.mysql_errno().': '.mysql_error());
    ?>
    <html>
        <head></head>
        <body>
            <form method='post'>
                Username 
     <input type='text' name='user' />

                Password 
    <input type='text' name='password' /> 

              
                <input type='submit' value='Submit' />
            </form>
        </body>
    </html>
    Grazie,sei stato chiaro

  8. #8
    Originariamente inviato da Filgioint
    Non voglio essere polemico.
    Sicuramente per una maggiore chiarezza avrei potuto indentare e tenere piu pulito e organizzato il codice.
    Tu non mi hai risposto,l azione è implicita sulla pagina stessa quando non specificata. E come ho detto sono alle prime armi,tutto ciò è puramente a scopo didattico.
    Se sai dirmi qualcosa di costruttivo ti ascolto volentieri
    ah io non lo dicevo certo per fare il sapientone, ti stavo solo suggerendo di rivedere il modo in cui strutturi quello che devi fare, proprio perché sei alle prime armi è molto meglio abituarsi dal principio ad effettuare determinati controlli, condizioni, e strutturare il codice in maniera più pulita per le tue modifiche future.
    Al contrario invece è più difficile "cambiarsi" quando ci si è abituati a certi schemi.

    La soluzione al tuo problema specifico te l'hanno già data gli altri, io ti consiglio di rivedere il resto perché potrebbero sorgere problemi più importanti in seguito.
    http://codecanyon.net/category/all?ref=Manuelandro
    And I bet she told a million people that she'd stay in touch, Well all the little promises they dont mean much,When theres
    memories to be made

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.