• User

    Problemi Con Login Area Riservata

    Ciao a tutti!!
    Sto studiando php da qualche mese...
    Vorrei creare un'area amministrazione di mio pugno, senza copiare gli esempi..altrimenti che piacere c'è!!
    ma mi sono impallato su una cosa.
    vi prego di indicarmi la soluzione giusta.
    il login che ho progettato prevede (senza sessione):

    1. form per il login (campi di testo USERN e PASS).
    2. pagina di verifica.
    3. pagina riservata (che creerò in seguito, se passo questo esame!!)
      ho creato due campi MYSQL username e password...
      Il login funziona, ma solo con la prima user e pass, con le altre no.
      riuscite ad indicarmi il problema di sicuro elementare.
      vi posto il codice...e grazie

    pagina di verifica
    <?

    $query="select * from elenco'";
    $risultato= mysql_query($query);
    $rigo=mysql_fetch_array($risultato);

    if(($_REQUEST['usern'] == $rigo['username'] ) && ($_REQUEST['pass'] == $rigo['password'] )){
    	
    echo "eh vai!!!!";
    	
    }else{
    	echo"riloggati gentilmente che ci sono problemi";
    }
    

    ?>


  • User

    secondo me andrebbe bene anche un campo "privilieggi" capisci a mia ^_^


  • User Attivo

    Nel tuo script leggi solo il primo record del risultato della query.
    Ed è per quello che funziona solo con un account. 🙂

    Devi fare un bel ciclo while su mysql_fetch_row($risultato) così leggi fino all'ultimo record.

    Dal manuale online di PHP, quello con i commenti, puoi trovare tutto quello che ti serve...
    http://us2.php.net/manual/en/ref.mysql.php


  • User Attivo

    E' giusto quello che ti ha detto InuYaksa, in più credo che sarebbe ancora meglio se facessi direttamente la query dello user. Quindi qualcosa tipo:

    
    $query = "select * from elenco where username = '" . $_REQUEST['usern'] . "'";
    
    

    In questo modo puoi togliere una condizione dal test che segue e non devi fare il ciclo.


  • User

    grazie prima di ogni cosa per avermi risposto...
    la mia inesperienza mi ha portato a scrivere questo codice e come è facile intendere non funge.
    vi posto cosa ho creato con il vostro consiglio (magari non lo so fondere con quello che avevo creato)....
    se mi loggo con il secondo user mi da
    "riloggati gentilmente che ci sono problemieh vai!!!!riloggati gentilmente che ci sono problemi" (eh vai me lo dà?!?).

    <?
    $query= mysql_query("select * from elenco");
    while ($rigo= mysql_fetch_array($query)) {
    if(($_REQUEST['usern'] == $rigo['username'] ) && ($_REQUEST['pass'] == $rigo['password'] ))
    {
    echo "eh vai!!!!";
    }
    else
    {
    echo "riloggati gentilmente che ci sono problemi";
    }
    }
    ?>


  • User

    ho fatto un'altra prova e adesso funziona!!!
    ho utilizzato il metodo "Senamion" senza ciclo while....
    Solo resta un problema...
    se chiudo la finestra e vi riaccedo in una nuova..
    mi dà "riloggati", ma mi restituisce il seguente messaggio

    Notice: Undefined index: loggato in c:\programmi\easyphp1-7\www\dipartimento\pa3.php on line 4
    login non valido! loggati

    che corrisponde
    alla seguente riga....

    if($_COOKIE['loggato']=="si"){

    Ad ogni modo vorrei che mi rimandi alla pagina di login
    cosa dovrei inserire secondo voi nel codice che o creato nella pagina riservata?

    pa3.php

    <?
    if($_COOKIE['loggato']=="si"){
    ?>
    benvenuto
    <?
    }else{
    echo" login non valido non rompere i coglioni e loggati";
    }
    ?>

    grazie sempre


  • User Attivo

    Non usate mai una $_REQUEST dentro una query...
    perché qualunque cracker alle prime armi sarebbe così in grado i bucarvi il sito in 5 minuti.

    Se il parametro arriva da post allora usa $_POST se invece arriva da url allora usa $_GET.... la $_REQUEST solo in casi estremi.

    Successivamente devi "ripulire" il valore da eventuali trucchi sporchi con una banale addslashes.

    percui ti consiglio $nome = addslashes($_POST['nome'])
    così poi usare $nome con più sicurezza.
    Ricordati sempre di controllare che esistano i parametri con ISSET sennò PHP si arrabbia!

    :fumato:


  • User Attivo

    Quoto InuYaksa, il mio era solo un esempio (non sapendo com'era fatto il form), giustamente fai controlli su cosa ti viene passato.
    Per il tuo problema controlla sempre le variabile con isset(), nel tuo caso specifico:

    
    if(isset($_COOKIE['loggato']) && $_COOKIE['loggato']=="si"){
    
    

  • User

    @Senamion said:

    Quoto InuYaksa, il mio era solo un esempio (non sapendo com'era fatto il form), giustamente fai controlli su cosa ti viene passato.
    Per il tuo problema controlla sempre le variabile con isset(), nel tuo caso specifico:

    
    if(isset($_COOKIE['loggato']) && $_COOKIE['loggato']=="si"){
    
    

    ti ringrazio molto per l'aiuto, adesso funziona!!!

    ad ogni modo mi hanno sconsigliato di usare le sessioni, piuttosto che i cookies per maggiore sicurezza e adattabilità.

    ho provato quindi con questo codice ma non capisco come inserire un header che mi reindirizzi se "ok" alla index.php?id_utente=<?=$rigo['id_utente']?> (metodo che utilizzavo con i cookies) dell'utente che si è loggato....
    potreste dargli un'occhiata?grazie dell'aiuto!!

    <?php
    session_start();
    dbconnect();
    if ($_POST['action'] == "login") {
    $_SESSION['verified_user'] = "";
    $result = mysql_query("SELECT * FROM elenco_utenti WHERE user='".$_POST['username']."' AND pass='".$_POST['psw']."'");
    if (mysql_num_rows($result) > 0) list($_SESSION['verified_user']) = mysql_fetch_row($result);
    }
    ?><html><head></head><body>
    <br><a href="log-in.php">Log in</a> - <a href="index.php">Index</a> - <a href="log-out.php">Log out</a><br>
    <?php
    echo"<br>";
    if ($_SESSION['verified_user'] != "") {
    echo"<b>Welcome.</b><br>";
    } else {
    if ($_POST['action'] == "login" && $_SESSION['verified_user'] == '') {
    echo"<font color="red">Login error!</font><br><br>";
    }
    ?>
    <form name="login_form" action="log-in.php" method="post">
    <input type="hidden" name="action" value="login">
    Username: <input type="text" name="username">
    Password: <input type="password" name="psw"> <input type="submit" name"Login" value="Login"></form>
    <?php
    }
    function dbconnect() {
    mysql_connect("localhost", "root", "");
    @mysql_select_db("utenti") or die ("Unable to select database");
    }
    ?></body></html>


  • User Attivo

    Il posto dovrebbe essere al posto della riga:

    echo"<b>Welcome.</b><br>";