Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53

    spiegazione funzione php

    in un sistema di login dopo aver controllato se il tasto login è stato premuto vado a controllare i campi che sono stati inseriti per loggarsi , con questa riga di codice controllo se username inserito è già esistente
    ... volevo capire bene però cosa faceva questa riga di codice!
    mysql query dovrebbe interrogare il database , in particolare la tabella users( dove sono memorizzati gli utenti , la tabella users ha due campi id, username, pass e email) selezionando il campo username che è case insensitive ... e poi?
    aiuto... o.o
    la riga di codice è la seguente... me la spiegate?
    (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username'")) == 0)

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    mysql_num_rows è usato in questo caso per verificate che il numero di record restituito dalla query sia pari a zero

    Estrapolato dal suo contesto non mi pare un codice molto "furbo", magari mi sbaglio però

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53
    il codice mi pare semplice ma non capisco alcuni passaggi...mi aiuteresti?

    <?php
    include('core.php');
    if(isset($_POST['login'])) {
    $username = isset($_POST['username']) ? clear($_POST['username']) : false;
    $password = isset($_POST['password']) ? clear($_POST['password']) : false;
    /*
    //oppure
    $username =clear($_POST['$username']);
    if(empty($username)){
    $username=false;} // azzera i campi appena digitati
    */


    if(empty($username) || empty($password)) {// se almeno uno dei due è verificata
    echo 'Riempi tutti i campi.<br /><br /><a href="javascript:history.back();">Indietro</a>';
    } elseif(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username'")) == 0) {
    // mysql query invia una query al database
    //attualmente attivo sul server associato all'identificativo di conmnessione specificato. Se identificativo_connessione non è specificato,
    //viene considerata l'ultima connessione aperta, restituisce false se la query non è stata eseguita correttamente


    echo 'Username non trovato.<br /><br /><a href="javascript:history.back();">Indietro</a>';
    } else {
    $password = md5($password);
    $ip = $_SERVER['REMOTE_ADDR'];//restituisce id
    if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username' AND password='$password'")) > 0) {
    //non mettiamo like alla password
    $username = mysql_result(mysql_query("SELECT username FROM users WHERE username LIKE '$username'"), 0);
    $userid = mysql_result(mysql_query("SELECT id FROM users WHERE username LIKE '$username'"), 0);
    mysql_query("UPDATE users SET last_login='".time()."', last_ip='$ip' WHERE id='$userid'") or die(mysql_error());
    $_SESSION['username'] = $username;
    $_SESSION['userid'] = $userid;
    header('Location: index.php');
    }
    }
    } else {
    ?><center>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <label>Username: <input type="text" name="username" required maxlength="16" /></label><br />
    <label>Password: <input type="password" name="password" required maxlength="20" /></label><br />

    <input type="submit" name="login" value="Accedi" />
    <input type="reset" name="register" value="Annulla" />
    </center></form>
    <?php
    }
    ?>

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53
    (mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username'")) == 0)


    if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username' AND password='$password'")) > 0) {
    //non mettiamo like alla password
    $username = mysql_result(mysql_query("SELECT username FROM users WHERE username LIKE '$username'"), 0);
    $userid = mysql_result(mysql_query("SELECT id FROM users WHERE username LIKE '$username'"), 0);
    mysql_query("UPDATE users SET last_login='".time()."', last_ip='$ip' WHERE id='$userid'") or die(mysql_error());
    $_SESSION['username'] = $username;
    $_SESSION['userid'] = $userid;




    questa è la parte che non capisco...


  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53
    ps: il codice funziona molto bene!

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Dopo che verifica che la user sia presente nel DB, verifica che user e password siano corretti e assegna con due query il valore username e user id a due variabili. Fatto questo esegue un aggiornamento della tabella per segnare l'ultimo login ed assegna alle variabili di sessione i valori di username e userid, poi reindirizza il browser su index.php

    Secondo me fa troppe query inutili, si potrebbe ottimizzare (ad esempio, due query sulla stessa tabella per prendere due campi...)

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53
    perdona la scocciatura ...sono pesante , lo so! ma ogni guida su internet non è troppo chiara per una principiante come me...
    questo if :
    if(mysql_num_rows(mysql_query("SELECT * FROM users WHERE username LIKE '$username' AND password='$password'")) > 0)
    ci dice di selezionare dalla tabella users il campo username e password e cercare i valori
    '$username' e'$password' appena inseriti dall utente , mysql_num_rows dovrebbe restituisce il numero 2 che essendo maggiore di zero rende l if verificato, giusto?
    la funzione mysql_result cosa restituisce? il secondo argomento passato perchè è zero( dovrebbe essere il numero di riga?)?

  8. #8
    Utente di HTML.it L'avatar di mt19
    Registrato dal
    Jul 2011
    Messaggi
    180
    Mi infiltro nella discussione chiedendo anche io una cosa: perchè utilizza LIKE e non il classico uguale?

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    53
    Serve per rendere l username case insensitive

  10. #10
    Utente di HTML.it L'avatar di mt19
    Registrato dal
    Jul 2011
    Messaggi
    180
    Quote Originariamente inviata da MTERESA Visualizza il messaggio
    Serve per rendere l username case insensitive
    Ah ok, grazie mille, ma l'effettiva utilità? Se scrivo il mio nome utente in maiuscolo è bene che anche nel form di login sia in maiuscolo, no?


    Edit: comunque quella riga dice che se c'è più di una corrispondenza (>0) nell'nome utente e nella password inserita, allora la condizione è verificata.
    Ultima modifica di mt19; 24-08-2014 a 17:02

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.