• ModSenior

    mysql_num_rows si chiama la funzione


  • User

    La query che fai probabilmente fallisce, ricontrolla bene il tutto.
    Prova ad aggiungere:

    
    $result = mysql_query($sqlquery) or die(mysql_error());
    
    

    Così dovresti riuscire ad individuare eventuali errori.

    Per quanto riguarda il recupero ed il confronto dei valori basta inserire la pagina PHP che vuoi caricare dopo la submit della form nell'attributo action ed in quest'ultima recuperare i parametri che ti servono mediante l'istruzione $_GET['nome_attributo'] oppure $_POST['nome_attributo'] a seconda del method che hai utilizzato nella form (GET o POST).


  • User

    salve, rieccomi. Allora...stò provando a seguire la guida di Thedarkita. Ho inseirto nel mio sito la pagina index.php contenente questo:

    <?php
    // Includo la connessione al database
    require('config.php');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
    <html xmlns="">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Tutorial by TheDarkITA</title>
    </head>
    <body>
    Menu:<br />
    <br />
    <br />
    <?php
    if(isset($_SESSION['login']))
    echo '<a href="privata.php">Area privata</a><br /><a href="logout.php">Logout</a><br />';
    else
    echo '<a href="registrati.php">Registrazione</a><br /><a href="login.php">Login</a><br />';
    ?>
    </body>
    </html>

    poi ho inserito la pagina di login:
    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $Username = (isset($_POST['Username'])) ? trim($_POST['Username']) : '';    // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato d di default ''
    $Password = (isset($_POST['Password'])) ? trim($_POST['Password']) : '';    // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato d di default ''
    
    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
        $Username = addslashes($Username);
        $Password = addslashes($Password);
    }
    
    // Crypto la password e la confronto con quella nel database
    $Password = md5($Password);
    
    // Controllo l'utente esiste
    $query = mysql_query("SELECT id FROM utenti WHERE username = '$Username' AND pass = '$Password' LIMIT 1");
    
    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
        // prelevo l'id dal database
        $login = mysql_fetch_array($query);
        
        // Creo una variabile di sessione
        $_SESSION['login'] = $login['id'];
        
        // reindirizzo l'utente
        header('Location: privata.php');
        exit;
    }
    // se non esiste da l'errore
    else
        die('Nome Utente o Password errati');
    

    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
    <html xmlns="">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Login</title>
    </head>
    <body>
    <form action="" method="post">
    <input name="username" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="password" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="login" type="submit" value="Login" /><br />
    </form>
    </body>
    </html>

    Nel mio database c'è un utente (io) provo a "cercarmi" ma mi dice che Nome utente o password errati.
    Le uniche differenze tra me e la guida, sono che:
    1-Non ho inserito nel database il campo "id"...è un problema?
    2-Non ho inserito la pagina privato.php

    ah, scusate....ho inserito nel sito anche la pagina config.php contenente:

    <?php
    // avvio la sessione
    session_start();
    // Dati connessione al database
    $db_host = 'mysql5.netsons.org';
    $db_utente = 'quello fornito da netsons';
    $db_password = 'fornita da netsons';
    $db_nomedb = 'ture70';
    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
    mysql_select_db($db_nomedb);
    ?>

    GRAZIE 1000.


  • ModSenior

    $_POST['Username']

    hai messo la maiuscola che nel form invece è scritta minuscola:
    <input name="username">

    se non metti il campo id, è logico che da effetti indesiderati...


  • User

    Ah....allora ha ragione il mio prf di matematica quando diceva che nn ho molta logica.....:?:?:x...cmq ora vedo di correggere. Una domanda, ora inserisco il campo "id"...cosa ci devo mettere??? cioè, ad esempioio sono il primo iscritto...nel campo id devo mettere 1? il secondo che si iscrive devo mettere 2??? e continuando...o serve ad altro???
    Grazie 1000 per la pazienza.


  • ModSenior

    il campo id va messo come auto increment in modo che prenda automaticamente il numero successivo


  • User

    Boh, non so cosa dire....ancora mi da errore...perfavore, aiutami tu...dimmi se secondo tè c'è qualche errore.
    Questa è la pagina login.php:

    <?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''

    // Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza
    if (!get_magic_quotes_gpc()) {
    $user = addslashes($user);
    $pass = addslashes($pass);
    }

    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);

    // Controllo l'utente esiste
    $query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");

    // Se ha trovato un record
    if(mysql_num_rows($query) == 1)
    {
    // prelevo l'id dal database
    $login = mysql_fetch_array($query);

    // Creo una variabile di sessione
    $_SESSION['login'] = $login['id'];

    // reindirizzo l'utente
    header('Location: privata.php');
    exit;
    }
    // se non esiste da l'errore
    else
    die('Nome Utente o Password errati');
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">
    <html xmlns="">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Login</title>
    </head>
    <body>
    <form action="" method="post">
    <input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
    <input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
    <input name="login" type="submit" value="Login" /><br />
    </form>
    </body>
    </html>

    Mentre questo è il database:

    • phpMyAdmin SQL Dump
      -- version
      -- "link di php my admin"
      -- Host: mysql5.netsons.org
      -- Generato il: 02 Set, 2008 at 10:56 PM
      -- Versione MySQL: 5.0.51
      -- Versione PHP: 5.2.6-0.dotdeb.1
      --
      -- Database: ture70
      --

    --
    -- Struttura della tabella utenti

    CREATE TABLE utenti (
    id int(30) NOT NULL auto_increment,
    Nome varchar(30) NOT NULL,
    Cognome varchar(30) NOT NULL,
    user varchar(30) NOT NULL,
    pass varchar(30) NOT NULL,
    mail varchar(30) NOT NULL,
    PRIMARY KEY (id)
    ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

    -- Dump dei dati per la tabella utenti

    INSERT INTO utenti VALUES (1, 'Salvatore', 'Di Maria', 'Amministratore', '17041991', 'mio indirizzo e-mail');

    Mi dice che la password o il nome utente sono sbagliati


  • ModSenior

    la password nel database va inserita in hash md5


  • User

    cioè??? cosa dovrei fare???


  • ModSenior

    <?php echo md5('Di Maria'); ?>
    ti restituisce l'hash della password devi mettere quello nel database


  • User

    scusami, non prendermi per stupido ma non ho ancora capito....


  • ModSenior

    La password non devi inserirla normalmente, perchè nello script di login la cerca cryptata quindi tu devi inserirla cryptata altrimenti da password errata...


  • User

    Benissimo!!!!!!! Perfetto!!!! Finalmente funziona...ho levato dalla pagina login.php il pezzo che cripta la password (anche perchè è un sito personale non mi interessa molta protezione)...grazie 1000!!!!!! Sei stato molto paziente e mi hai aiutato tanto...grazie ancora....ciao!!!!


  • ModSenior

    prego

    ciao


  • User

    hem...posso chiedervi un altra cosuccia???
    Allora, vorrei creare una sezione del sito dedica solo alla mia classe.
    Così ho creato nel database la tabella "classe" (era già presente la tabella "utenti")
    ho creato il file config1.php (config.php esisteva già per il login degli altri utenti)
    Nel file config.pHp sotto $db_name= 'ture70' ho inserito
    $table= 'classe' //per farlo connettere alla tabella della classe

    e ho inserito un solo utente nella tabella (l' utente è inserito sia nella tabella "utenti" che in quella "classe")

    provando a fare il login nella sezione della mia classe anche chi è registrato SOLO nella tabella utenti (e non nella tabella "classe") viene fatto entrare...perchè???
    dove sbaglio???

    grazie 1000 ancora una volta


  • ModSenior

    che codice usi dopo?


  • User

    beh...nel file config.php il codice è questo:

    <?php
    // avvio la sessione
    session_start();
    // Dati connessione al database
    $db_host = 'mysql5.netsons.org'; // Host - solitamente localhost
    $db_utente = 'ture70'; // Nome utente del Database
    $db_password = 'sebastiano'; // Password del Database
    $db_nomedb = 'ture70'; // Nome del Database
    $db_table= 'classe';
    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
    mysql_select_db($db_nomedb);
    ?>


  • ModSenior

    bisogna controllare la query... non la connessione


  • User

    nn ho capito cosa vuoi sapere, cmq di query ho trovato questo nel database:

    id,Nome,Cognome,user,pass,mailSELECT * FROMclasse`
    WHERE 1
    LIMIT 0 , 30


  • ModSenior

    nel codice della pagina di login ci deve essere una cosa tipo:

    mysql_query("SELECT * FROM ...........");