Visualizzazione dei risultati da 1 a 6 su 6

Discussione: PHP isset e trim

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442

    PHP isset e trim

    Buonasera, potreste dirmi gentilmente cosa fa esattamente questo gruppo di istruzioni:

    Codice PHP:
        session_start();
        if(!(isset(
    $_SESSION['username'])) && !(isset($_SESSION['password']))){
                
    $_SESSION['username']=trim($_POST['username']);
                
    $_SESSION['password']=$_POST['password'];
        } 
    Grazie.

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Codice PHP:
    // abilita l'uso della sessione nello script corrente
    session_start();

    // se in sessione non sono settate le chiavi "username" e "password"
    if(!(isset($_SESSION['username'])) && !(isset($_SESSION['password'])))
    {
       
    // elimina gli spazi prima e dopo la stringa contenuta in $_POST['username'] e metti la stringa in sessione
       
    $_SESSION['username'] = trim($_POST['username']);

       
    // metti la stringa contenuta in $_POST['password'] in sessione
       
    $_SESSION['password'] = $_POST['password'];

    Comunque quando hai dubbi è sempre una buona idea consultare la documentazione ufficiale:
    session_start()
    trim()
    isset()
    Ultima modifica di Alhazred; 22-09-2017 a 21:29

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Grazie Alhazred, sì ho dato uno sguardo alla documentazione ma comunque non riuscivo a capire benissimo.
    In pratica se in sessione non sono settate le chiavi "username" e "password" (perché magari sono arrivati campi vuoti dal form precedente), mette comunque dei campi vuoti in $_SESSION?
    E questo serve per avere comunque un valore nella sessione, giusto?

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    In realtà un pezzo di codice così io non lo userei, non lo vedo utile.
    Secondo me è stato scritto pensando "L'utente compila il form per il login, nello script che riceve i dati (quello del codice che hai postato) verifico se ci sono già in sessione un username e una password, se non ci sono le inserisco, in caso contrario non faccio niente (non c'è l'else) perché è già loggato".

    Ora ci sono almeno 2 cose che non vanno.
    1) il controllo se uno è loggato o no va fatto non va fatto nello script per il login, nello script di login, se sei già loggato non ci devi proprio arrivare, quindi non deve comparire il form per il login a chi è già loggato. Il codice postato, dato che c'è il controllo, prevede l'eventualità che uno già loggato possa riinviare i dati di login.

    2) in sessione non va mai messa la password, men che meno in chiaro come si fa in quel pezzo di codice.

    In teoria si, se uno non compila i campi, lo script assegna delle stringhe vuote a $_SESSION['username'] e $_SESSION['password'], il che è sbagliato, ci vorrebbe un controllo per verificare che siano stati compilati e mostrare un errore in caso contrario, i campi username e password dovrebbero essere obbligatori in fase di login.

    Insomma, se stai studiando PHP da qualche parte dove ti propongono questo codice, cambia aria e cerca altro.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Tieni presente che non è un programma "vero" è un progetto d'esame il cui focus non è su php ma sulla progettazione di database. Per cui ecco certe "finezze" non sono richieste. Inoltre non è una pagina di login ma è una pagina di registrazione: in pratica dalla pagina di registrazione gli passo username e password e poi in quella pagina verifico che i campi siano stati compilati (altrimenti mesasggio di errore e ritorno alla pagina precedente) e si prosegue con l'inserimento degli altri campi della registrazione.
    Invece in questo pezzo di codice:

    Codice PHP:
    if (is_null($username) || is_null($password) || strlen($username) < || strlen($password) < 5) {
        echo 
    "<script>
            alert('Username e password devono essere di almeno 5 caratteri!');
            window.location.assign('registrazione.php');
            </script>"
    ;
    }
    //header("Location: registrazione.php");
    else {
        
    //query di connessione al db che visualizza il profilo per controllare se lo username inserito è già presente nel sistema
        
    try {
            require 
    'connessione.php';
            
    $sql "SELECT * FROM UTENTE WHERE Username = '".$username."'";
            
    $result $dbConn->query($sql);
            
    $numRows mysqli_num_rows($result);
        } catch (
    PDOException $e) {
            
    $alert $e->getMessage();
            echo 
    '<script language=JavaScript>alert("Accesso NON riuscito ' $alert ' ! ")</script>';
            echo 
    '<script language=javascript>document.location.href="registrazione.php"</script>';
        }

        if (
    $numRows 0) {
            echo 
    "<script> 
                alert('Username già presente! Inserirne uno diverso e riprovare');
                window.location.assign('registrazione.php');
                </script>"
    ;
        } else { 
    Dopo aver verificato che lo username e la pass non siano vuoti o meno di 5 caratteri, devo controllare se lo username è già presente nel database. Però non va e non riesco a capire perché.
    In pratica l'idea è che con numRows controllo se l'interrogazione ha restituito più di 0 righe (il che significa che c'è già uno username con quel nome).
    Ma se inserisco uno username già presente ottengo questo errore:

    Accesso NON riuscito SQLSTATE[42000]: Syntax error or access violation: 1305 PROCEDURE unibosss.VisualizzaStudio does not exist !

    Che riguarda però una sezione che sta più avanti (la procedura in effetti non c'è) ma in realtà dovrei ricevere il messaggio d'errore Username già presente!
    Inoltre in sottofondo vedo Warning: mysqli_num_rows() expects parameters 1 to be mysqli result, object given in C:\path_to_my_www_line44.
    Non riesco a capire Purtroppo di php so pochissimo, ma devo necessariamente finire questa parte!
    Grazie mille.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Nel frattempo ho modificato il gruppo di istruzioni in questo modo, dato che sembra che i prepared statement siano da preferire per l'invio dei comandi al dbms:

    Codice PHP:
             $statement $dbConn->prepare("SELECT * FROM UTENTE WHERE Username = '" $username "'");
            
    $statement->bindParam(':Username'$usernamePDO::PARAM_STR);
            
    $statement->execute();
    $numRows =$statement->fetchColumn();
            
    print_r($_numRows); 
    Tuttavia quel $statement->fetchColumn(); non mi restituisce nulla, infatti print_r($_numRows) non stampa niente. Perché?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    442
    Ho risolto. L'istruzione che va bene è:
    $numRows =$statement->fetchAll();

    Riedito di nuovo perché l'istruzione di cui sopra mi restituisce un valore superiore a 0 anche se c'è una sola corrispondenza.

    Quella che va bene è infine:
    $numRows = $statement->rowCount();
    Ultima modifica di Jamie04; 23-09-2017 a 15:00

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 © 2024 vBulletin Solutions, Inc. All rights reserved.