Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Dov'è l'errore?

  1. #1
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71

    Dov'è l'errore?

    Ciao, programmo da veramente pochissimo tempo, ed ho un problema con la pagina di login del sito che sto realizzando. Qualcuno saprebbe dirmi dove sbaglio?
    La questione è semplice, ho una pagina di login dove inserendo username e password al momento di cliccare su invia, la pagina non cambia, non succede nulla, e non capisco come mai. questo è il codice dellapagina di login
    Codice PHP:
    <?php
    // Azione per il login3.php?azione=login
    if(isset($_GET['azione']) && ($_GET['azione'] == 'login')){
    if(!isset(
    $_POST['invia'])){
    ?>
    e qui va il form poi c'è il codice di controllo
    Codice PHP:
    $username $mysqli->real_escape_string(stripslashes(strtolower($_POST['username']))); //salvo il nickname tutto in minuscolo onde evitare problemi.
    $password $mysqli->real_escape_string(stripslashes($_POST['password']));

        if (empty(
    $username)) {
            echo 
    "Devi inserire il tuo username";
                } elseif (empty(
    $password)) {
                    echo 
    "Devi inserire la password";
                } else {
                    
    $password_crypt md5($password);    
                    
    $recuperadati $mysqli->query("SELECT * FROM biblionet_nuova_ok WHERE username = '$username' AND password = '$password_crypt'") or die($mysqli->error);    
                    if (
    $recuperadati->num_rows == 1){    
                        
    $sessione $recuperadati->fetch_array();
                        
    $_SESSION['utente'] = $sessione['username'];
                        echo 
    '<div id="login">
                            

    <h3>Ciao, '
    .$username.'</h3></p>
                            </div>'
    ;
                        echo 
    "Login effettuato con successo!";
                        
    header("Refresh: 3; URL= Newindex.php");
        
                    } else {
        
                        echo 
    '<div id="errore">

    <h3>Probabilmente qualcosa &egrave; andato storto, Non abbiamo nessuno registrato con questi dati. Riprova
                         ad inserire i dati, oppure [url="TEST%20FORM%20REAL%20TIME.php"] Registrati[/url], &egrave gratis!
                        Grazie dallo staff Biblionet</h3></p></div>'
    ;
                        echo 
    "<meta http-equiv='Refresh' content='3; URL=Newindex.php'>";
                    }
        
                }

            }
        } 
    mentre questo è il codice che dalla pagina in html porta alla pagina di login
    Codice PHP:
    [*]<?php if (isset($_SESSION['utente'])){ echo "[*]<font color=\"white\">Ciao,&nbsp</font> ".$_SESSION['utente']."[url='login3.php?azione=logout']Esci[/url]"; } else {    echo "<font color=\"white\">Ciao utente,</font> [url='login3.php?azione=login']Entra[/url] <font color=\"white\"> o </font>[url='TEST FORM REAL TIME.php']Registrati[/url]";}?>

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    E il codice del form dov'è?
    Se non succede niente è molto probabile che sia sbagliato l'action del form.

  3. #3
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Ops! mi è sfuggito, eccolo qua
    Codice PHP:
    <form id="jform" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?> method="post">
                    <fieldset>
                        <legend>Login</legend>
                        


                            <label for="username" class="block">Username</label>
                            <input type="text" name="username" id="username" value=""/>
                        </p>
                        


                            <label for="password" class="block">Password:</label>
                            <input type="password" name="password" id="password" />
                        </p>
                        


                        <button type="submit" id="send" name="invia">Entra</button>
                           </p>
                </form>

  4. #4
    Utente di HTML.it L'avatar di neroux
    Registrato dal
    Aug 2009
    Messaggi
    1,973
    Prova cambiare button con input

    www.sitemeer.com » Quando un sito pare irraggiungibile

    Se ti piace ci puoi trovare anche su Facebook

  5. #5
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Putroppo sia cambiando il campo button in input sostituendo la voce type rimane sempre lo stesso problema.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Nella dichiarazione del form leggo id="jform", stai usando Joomla?
    Sicuro che l'indirizzo che viene messo nell'action sia corretto per essere usato dal framework?

  7. #7
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    l'id "jform" è semplicemente il nome dato per il css, non uso joomla, è una pagina normalissima di html.

  8. #8
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    Sono le 4:30 di mattina quindi non fidarti di me ma a occhio il problema è che tu fai un controllo sulle variabili GET e poi passi al POST.. anche se sull'action del form metti PHP_SELF le variabili in GET non verranno lette in quanto fai il submit di un form che ha impostato il method su "POST"..

    la soluzione è inserire un campo hidden nel form chiamato 'azione' (come il parametro GET per capirci) dove gli darai il valore 'login'
    codice:
    <input type="hidden" value="login" name="azione">
    e sostituire
    codice:
    if(isset($_GET['azione']) && ($_GET['azione'] == 'login')){
    con
    codice:
    if(isset($_REQUEST['azione']) && ($_REQUEST['azione'] == 'login')){
    e così dovrebbe funzionare.. sinceramente questa soluzione non mi fa impazzire, è che è "sbagliato" il concetto di base e andrebbe rivisto per migliorare il codice.. ma dato che stai imparando il php lascio a te il compito di migliorare il codice
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

  9. #9
    Utente di HTML.it L'avatar di Paperino78
    Registrato dal
    Aug 2012
    residenza
    Milano
    Messaggi
    71
    Un grazie è comunque doveroso, potresti darmi qualche dritta su come migliorare il codice?
    Giusto un input per indicarmi la strada poi me la vedrò io.

  10. #10
    Utente di HTML.it L'avatar di LuckySevenRoX
    Registrato dal
    Sep 2011
    residenza
    Foligno
    Messaggi
    361
    L'importante è tenere a mente che o decidi di utilizzare GET e POST in modo diviso oppure fai tutto un minestrone con REQUEST (che va a cercare sia parametri get che post).

    Generalmente se usi la stessa pagina (come nel tuo caso) per ricevere informazioni sia in GET che in POST, prima si effettuano i controlli su post poi, se risultano negativi, su get.

    Ovvero, in pseudo-codice:
    codice:
    IF ISSET($_POST['invia']) {
        //Vuol dire che il form è stato inviato, quindi qui dentro $_GET non mi servirà per niente
    } ELSE {
       //Se non esiste la variabile POST vuol dire che non è stato inviato nessun form, quindi posso controllare tranquillamente se ci sono variabili GET, altrimenti rimando a una pagina di default.
    }
    Questo però dipende sempre da come devi strutturare il sito.. se hai 2-3 "pagine" da gestire una soluzione del genere può anche andar bene, altrimenti ti consiglio di standardizzare ancora di più la situazione: ad esempio potresti fare due pagine
    pagina.php
    risultati.php

    la prima pagina si occupa della 'navigazione' vera e propria e quindi riceve solo variabili $_GET per stabilire i risultati da mostrare, mentre risultati.php è dove indirizzerai tutti i form e gestirai i risultati tramite POST.

    Se hai 3 form diversi puoi inserire in ognuno un campo hidden (come nel precedente esempio) con parametro 'azione' diverso in base alle tue esigenze.. ad esempio puoi avere azioni 'contatti', 'login', richieste' e gestirai $_POST['azione'] tramite uno switch() nella pagina risultati.php

    Ovviamente sei agli inizi quindi direi che soluzioni del genere vanno più che bene, divertiti
    Ti rivedrò in un'altra vita…quando saremo tutti e due gatti...

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.