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

Discussione: Area Riservata

  1. #1

    Area Riservata

    Un saluto a tutti gli utenti, è la prima volta che scrivo e chiedo scusa in anticipo se vado a postare una domanda sciocca ma mi sono da poco avvicinato al php.
    Sto creando un accesso riservato, prendo i dati dalla tabella “utenti” del db “prova” (ID, username, password), la pagina funziona correttamente anche se quando la visualizzo mi da degli errori che non capisco e non riesco ad eliminare.

    Ecco il codice:

    Codice PHP:
    <?php
    //variabili di connessione
    $db_host "localhost";
    $db_user "root";
    $db_name "prova";
     
    //connetto il database
    $db mysql_connect($db_host$db_user) or die ('Errore durante la connessione');
    mysql_select_db($db_name$db) or die ('Errore durante la selezione del db');
    ?>
    <html>
    <head>
    <title>Accesso</title>
    </head>
    <body>
     
    <form action='<? echo $_SERVER['PHP_SELF']; ?>?login=ok' method='POST'>
     
    <b>Username</b><br>
    <input type='text' name='user'><br>
    <b>Password</b><br>
    <input type='password' name='pass'><br>
     
    <input type='submit' value='Effettua il login'>
     
     
    </form>
     
    <?php
     
    // recupero di valori inviati dal form: user e pass
     
    $user $_POST['user'];
    $pass $_POST['pass'];
     
    $risp "ok";
    $login $_GET['login'];
     
    // evito di ricevere subito un messaggio dallo script
     
    if ( $login == $risp ) {
     
    // controllo che entrambi i valori siano stati compilati
     
    if ( $user && $pass ) {
     
    // effettuo l'escape per i valori speciali per evitare problemi con le query
     
    $user mysql_real_escape_string($user);
    $pass mysql_real_escape_string($pass);
     
    // preparo una queryper vedere se esistono i valori appena inseriti nella tabella creata precedentemente
     
     
    $sql "SELECT * FROM utenti WHERE username = '$user' AND password = MD5('$pass')";
    $res mysql_query($sql) or die (mysql_error());
     
    //  effettuo il login
     
    if ( $res == TRUE ) {
     
    // creo una sessione con l'id dell'utente  che lo farà restare connesso tutto il tempo della navigazione
     
     
     
    while($row mysql_fetch_array($res)) {
     
    session_start();
     
    $idutente $row['id'];
     
    $nomeutente $row['username'];
     
    $_SESSION['id_utente'] = $idutente;
     
    $_SESSION['nome_utente'] = $nomeutente;
     
    // reindirizzo l'utente nella pagina protetta da login
     
    header("location: paginariservata.php");
     
     
    }
     
     
    }
     
     
     
    echo 
    "Username o Password non corrette";
     
     
     
     
     
    } else {
     
    echo 
    "Non sono stati compilati tutti i dati obbligatori";
     
     
    }
     
    }
     
     
    ?>
     
     
    </body>
    </html>

    Gli errori sono questi:

    Notice: Undefined index: user in ... on line 33

    Notice: Undefined index: pass in on line 34

    Notice: Undefined index: login in on line 37


    Si riferiscono:

    $user = $_POST['user'];

    $pass = $_POST['pass'];

    $login = $_GET['login'];

  2. #2
    Ovviamente la prima volta che accedi allo script gli indici che cerchi di recuperare non esistono.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Sposta il controllo di username e password in testa a file: considera che non devi produrre output prima di settare un cookie od una sessione. Rimuovi il parametro GET e lavora con la funzione isset

    Prova a riorganizzare il tuo codice in questo modo:
    codice:
    <?php
    
    
    	<Variabili>
    	<Controllo la Sessione(?)>
    	
    	$mess="";
    	if(isset($_POST['user']) && isset($_POST['pass']) {
    		<Recupero valori>
    		<Escape Valori>
    		<Query>
    		if(<Login Corretto>) {
    			<Setto ls Sessione>
    			<Redirect>
    		} else {
    			$mess = "Credenziali errate";
    		}
    	}
    ?>
    <html>
    	<head>...</head>
    	<body>
    		<p><?php echo $mess; ?></p>
    		<form action='<? echo $_SERVER['PHP_SELF']; ?>?login=ok' method='POST'>...</form>
    	</body>
    </html>
    Experience is what you get when you don’t get what you want

  4. #4
    Grazie mille per la risposta. Allora ho modificato il codice in questo modo:

    Codice PHP:
    <?php
    //variabili di connessione
    $db_host "localhost";
    $db_user "root";
    $db_name "prova";
     
    //connetto il database
    $db mysql_connect($db_host$db_user) or die ('Errore durante la connessione');
    mysql_select_db($db_name$db) or die ('Errore durante la selezione del db');


        
    $mess="";
        if(isset(
    $_POST['user']) && isset($_POST['pass']) {
        
        
    $user $_POST['user'];
        
    $pass $_POST['pass'];        
            
    // effettuo l'escape

    $user mysql_real_escape_string($user);
    $pass mysql_real_escape_string($pass);
            
            
    // controllo che entrambi i valori siano stati compilati

    if ( $user && $pass ) {

    // preparo la query

    $sql "SELECT * FROM utenti WHERE username = '$user' AND password = MD5('$pass')";
    $res mysql_query($sql) or die (mysql_error());


    if ( 
    $res == TRUE ) {


    // Setto la Sessione

    while($row mysql_fetch_array($res)) {

    session_start();

    $idutente $row['id'];

    $nomeutente $row['username'];

    $_SESSION['id_utente'] = $idutente;

    $_SESSION['nome_utente'] = $nomeutente;            
                
                
    // reindirizzo l'utente nella pagina protetta da login
    header("location: paginariservata.php");

            }
        }

            } else {
                
    $mess "Credenziali errate";
            }
        }
    ?>

     
    <html>
    <head>
    <title>Accesso</title>
    </head>
    <body>
    <p><?php echo $mess?></p>
    <form action='<? echo $_SERVER['PHP_SELF']; ?>?login=ok' method='POST'>
    <b>Username</b><br>
    <input type='text' name='user'><br>
    <b>Password</b><br>
    <input type='password' name='pass'><br>
    <input type='submit' value='Effettua il login'>
    </form>
    </body>
    </html>

    Sicuramente ho sbagliato le chiusure, la pagina non mi funziona più e mi da questo errore:

    Parse error: syntax error, unexpected '{' in on line 13

  5. #5
    Controlla alla riga 13 ...ti dice anche la riga!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    controlla le parentesi
    if(isset($_POST['user']) && isset($_POST['pass']) {

  7. #7
    Ho chiesto scusa all'inizio di essere un pivello di php, non ti volevo certo disturbare satifal!
    La riga 13 l'ho vista, più che altro chiedevo a Xaratroom se è come mi ha consigliato lui.

    Grazie clasku

  8. #8
    Quote Originariamente inviata da Giorgiom77 Visualizza il messaggio
    Ho chiesto scusa all'inizio di essere un pivello di php, non ti volevo certo disturbare satifal!
    La riga 13 l'ho vista, più che altro chiedevo a Xaratroom se è come mi ha consigliato lui.

    Grazie clasku
    Non è questione di essere o meno pivello in PHP, ma se hai la riga dell'errore e sai già che è dovuto alle parentesi non capisco quale sia il problema?!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  9. #9
    La parentesi la risolvo, come ho scritto prima volevo sapere da Xaratroom se è come mi ha consigliato di fare o ho aggiunto qualcosa di troppo.

    Guarda mi sono iscritto ieri e non voglio certo far polemica, anzi capisco che domande stupide possano dar fastidio. Ti saluto.

  10. #10
    Quote Originariamente inviata da Giorgiom77 Visualizza il messaggio
    La parentesi la risolvo, come ho scritto prima volevo sapere da Xaratroom se è come mi ha consigliato di fare o ho aggiunto qualcosa di troppo.
    E' stata una svista: all'inizio avevo scritto solo
    codice:
    if(isset($_POST['user'])) {
    e quando ho aggiunto il controllo sulla password ho dimenticato una parentesi:
    codice:
    if(isset($_POST['user']) && isset($_POST['pass'])) {
    Il codice dovrebbe andare bene. Per una maggiore sicurezza dovresti impostare un cookie che possa identificare l'utente in modo univoco per quella sessione. In pratica un auth code random... e per le password andrebbe usato un seed.
    In linea di massima, come esercizio, va abbastanza bene.
    Experience is what you get when you don’t get what you want

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.