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

Discussione: Problema su login

  1. #1

    Problema su login

    Codice PHP:
    Premetto che non conosco molto la sintassi.
    Questo e' lo script che mi da problemi.
     
    <?php 

        
    //connessione a mysql
        
    $dbconnidx=mysql_connect ("localhost""root""");
        
    //selezione del database prova
        
    mysql_select_db("calciatori"$dbconnidx);
        
        
    $sqlAdmin "SELECT *
                    FROM login
                    WHERE username = '"
    .$username."'
                    AND   pwd = '"
    .$pwd."'";
                    
        
    //esecuzione query
        
    $result mysql_query($sqlAdmin)
             or die(
    "Query failed");

        
    $adminOK FALSE;

        while(
    $line mysql_fetch_array($result ,MYSQL_NUM) && !$adminOK)
        {
           print 
    "while\n";
           print 
    $line['username'];
           print 
    "
    "
    ;
           
           if(
    $line[sizeof($line) - 1] == 1)
          {
                print 
    "Amministratore\n";
                
    $adminOK TRUE;
           }
        } 
         if (
    $adminOK == FALSE)
            print 
    "Spiacente, non hai i permessi d'amministrazione.\n";
    ?>
    Mi viene sempre fuori che non sono amministratore.
    L'ultimo campo del record e' un intero, che se uguale a 1 mi dice se l'utente e' amministratore.

    grazie

    cialz

  2. #2
    Ho provato anche cosi' ma niente:
    Codice PHP:
      <?php 

        
    //connessione a mysql
        
    $dbconnidx=mysql_connect ("localhost""root""");
        
    //selezione del database prova
        
    mysql_select_db("calciatori"$dbconnidx);
        
        
    $sqlAdmin "SELECT *
                    FROM login
                    WHERE username = '"
    .$username."'
                    AND   pwd = '"
    .$pwd."'";
                    
        
    //esecuzione query
        
    $result mysql_query($sqlAdmin)
             or die(
    "Query failed");

        
    $adminOK FALSE;
        print 
    "Password immessa: ".$pwd."\n"//per debuggare
        
        
    while($line mysql_fetch_array($result ,MYSQL_NUM) && !$adminOK)
        {
           print 
    "while\n";
           print 
    $line[2];
           print 
    "
    "
    ;
           
           if(
    strcmp($line[sizeof($line) - 1], "admin") == 0)
          {
                print 
    "Amministratore\n";
                
    $adminOK TRUE;
           }
        } 
         if (
    $adminOK == FALSE)
            print 
    "Spiacente, non hai i permessi d'amministrazione.\n";
    ?>

  3. #3
    c'e' sempre qualcosa di nuovo almeno per me...

    mi spieghi che cosa dovrebbe fare questa riga, cioe' qual'e' il risultato atteso in $line?

    while($line = mysql_fetch_array($result ,MYSQL_NUM) && !$adminOK)

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

  4. #4
    Non viene fuori in line sotto forma di array il risultato, cioe' il record restituito dalla query?
    Dovrebbe essere un array di dimensione 3 con in ordine:
    username, password e privilegi (una stringa uguale o a "user" o a "admin")

    Il problema che poi per debuggare faccio delle print sui valori dell'array ma non mi stampa nulla!

    Sto sbiellando.

    In un altro script che avevo fatto, con questa query:
    Codice PHP:
    $sqlQuery "SELECT Cognome,Nome,Ruolo,Squadra,indirizzi.URL
                    FROM scheda LEFT JOIN indirizzi ON scheda.codice = indirizzi.Cod_Calciatore
                    WHERE scheda.Squadra LIKE '"
    .$squadra."'"
    questo ciclo funzionava:
    Codice PHP:
    while ($line mysql_fetch_array($result ,MYSQL_NUM))
         {
            print 
    "<tr>\n\t<td class=\"classetd\" align=\"center\">[url=".$line[4]."]<img src = b_select.png>[/url]</td>\n" ;
        
            
    $i=0;
            while(
    $i sizeof($line) - 1)
            {    
                print 
    "<td>\n\t";
                print 
    $line[$i]."\n";
                print 
    "</td>\n";
                
    $i++;
            }
            print 
    "</tr>\n";
         } 

  5. #5
    Allora chiedo piu' precisamente che dovrebbe fare questa roba qui in neretto:

    while($line = mysql_fetch_array($result ,MYSQL_NUM)&& !$adminOK)

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

  6. #6
    continua la ricerca finche' adminOK e' diverso da FALSE.
    Prima lo metto false, se poi lo trovo lo metto true ed esce dal while, o sto pestando e non riesco a capire dove.

    Non e' come il C++ in queste cose il PHP? Chiedo. Non so

    Perche' pero' non mi stampa i valori dell'array? E' questo che mi preoccupa.

    Mi affido a te!

  7. #7
    [supersaibal]Originariamente inviato da cialz
    continua la ricerca finche' adminOK e' diverso da FALSE.
    Prima lo metto false, se poi lo trovo lo metto true ed esce dal while, o sto pestando e non riesco a capire dove.

    Non e' come il C++ in queste cose il PHP? Chiedo. Non so

    Perche' pero' non mi stampa i valori dell'array? E' questo che mi preoccupa.

    Mi affido a te! [/supersaibal]
    Non e' come il C++

    vediamo di chiarire:

    mysql_fetch_array estrae una tupla sotto forma di array che trasferisce in $line.

    Ora mi pare che tu stia complicando e di molto le cose. Se la ricerca la fai su user e pwd, l'attesa e' di UNA sola tupla in risposta, al peggio nessuna. Quindi il while non serve.

    Presumo che adminOK sia un valore inserito nel database. Altrimenti dove? Se e' nel database con SELECT * lo trovi nella tupla estratta.
    Poiche mysql NON ha campi bool, si usa in alternativa 0/1 in un campo tinyint.

    Quando fai il controllo verifica il valore di adminOK. Se 0 lo valuti false, se 1 lo valuti true.

    Vediamo se siamo allineati fin qua.

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

  8. #8
    adminOK e' una variabile di ricera che fisso false fuori dal while, e quando trovo quello che mi servo diventa true ed esco dal while.

    Ho provato in modo piu' semplice, ma questa stramaledetta query e stramaledetto chi ha inventato la sintassi del PHP, mi da' sempre Query Failed:
    Codice PHP:
        //esecuzione query
        
    $result mysql_query("SELECT *
                    FROM login
                    WHERE username = '
    $username'
                    AND   pwd = '
    $pwd'
                    AND   privileges = 1"
    )
             or die(
    "Query failed"); 
    nella tabella login il terzo campo, privileges e' un tinyint.
    Non so se serve, ma uso PHP 4.1.3, Apache 1.3.29, MySQL 3.23.58 e il db l'ho creato con PHPmyAdmin 2.6.1

  9. #9
    Comincio ad avere le info per darti una risposta seria.

    La procedura che dovresti attuare potrebbe essere la seguente:

    codice:
    //esecuzione query 
        $result = mysql_query("SELECT * 
                    FROM login 
                    WHERE username = '$username' 
                    AND   pwd = '$pwd' ") 
             or die("Query failed");
    
    $line = mysql_fetch_assoc($result);
    
    if($line['privileges'] == 1 ) {
         echo "l'utente è un admin cioe' TRUE"  
         } else { echo "l'utente NON e' admin cioe' FALSE" }
    Ho usato mysql_fetch_assoc cioe' indice associativo invece del tuo che prelevava l'indice numerico, ma e' la stessa cosa. Pero' piu' chiaro di un due tre....

    Devi partire dal principio che di accoppiate user/pwd NON devono essercene mai piu' di una. Quindi chi estrai puo' oppure non puo' avere diritti di ADMIN, e questo lo stabilisci tu valutando quanto estrai. Quindi il prosegui finche' lo trovi non ha senso.

    Piuttosto, se vuoi sapere CHI ha i diritti di ADMIN devi cambiare la query in questo modo:

    codice:
    //esecuzione query 
        $result = mysql_query("SELECT * 
                    FROM login 
                    WHERE privileges = 1 ") 
             or die("Query failed");
    // ora ha senso il while
    while($line = mysql_fetch_assoc($result)) {
    
    echo "$line[username] - Utente con diritti ADMIN";
    
    }

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

  10. #10
    Uhm, la risposta mi piace.
    Provo subito e ti ringrazio infinitamente.

    Ti faccio sapere come va.

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.