Visualizzazione risultati 1 fino 8 di 8

Discussione: visualizzare dati in base all'utente connesso

  1. #1
    puntifedelta non è connesso Utente giovane
    Data registrazione
    08-10-2020
    Messaggi
    92

    Predefinito visualizzare dati in base all'utente connesso

    ciao ragazzi eccomi di nuovo qui con una nuova richiesta di aiuto, sicuramente mi sfugge qualcosa ma non riesco a capire cosa.

    Premetto che non esiste una registrazione l'utente accede con i dati che io fornisco.

    Allora il mio problema è che non riesco a visualizzare i dati nome, cognome, telefono ecc ecc in base all'utente che accede questo è quello che utilizzo

    la connessione al database funziona correttamente.

    Login
    Codice PHP:
    <?php
    include("login/config.php");
    session_start();

    if(
    $_SERVER["REQUEST_METHOD"] == "POST") {
    // username and password sent from form

    $myusername = mysqli_real_escape_string($db,$_POST['username']);
    $mypassword = mysqli_real_escape_string($db,$_POST['password']);

    $sql = "SELECT id_login FROM login WHERE username = '$myusername' and password = '$mypassword'";
    $result = mysqli_query($db,$sql);
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC);
    $active = $row['active'];

    $count = mysqli_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row

    if($count == 1) {
    //session_register("myusername");
    $_SESSION['login_user'] = $myusername;

    header("location: index.php");
    }else {
    $error = "Your Login Name or Password is invalid";
    }
    }
    ?>
    Session
    Codice PHP:
    <?php
    include('login/config.php');
    session_start();

    $user_check = $_SESSION['login_user'];

    $ses_sql = mysqli_query($db,"select username from login where username = '$user_check' ");

    $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

    $login_session = $row['username'];

    if(!isset(
    $_SESSION['login_user'])){
    header("location:login.php");
    die();
    }
    ?>
    Select per leggere i dati
    Codice PHP:
    <?php
    require_once("login/admin.php");
    $db_handle = new DBController();
    $result = $db_handle->runQuery("SELECT * FROM admin WHERE id_login = '".$_GET['id_login']."'");
    ?>

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    abilità error_reporting(-1); in alto al tuo script (se includi altri script non occorre reinserire tale funzione) probabilmente Altervista da qualche mese non supporta php 5.3 è probabilmente nemmeno l'include relativo in quel caso dovresti vedere il notice.
    Il file login/config.php non dovrà mai stampare output se vuoi creare la sessione con session_start();

  3. #3
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Hai un sistema per utilizzare le sessioni, ma non lo usi per capire chi è l'utente connesso:
    Codice PHP:
    $result = $db_handle->runQuery("SELECT * FROM admin WHERE id_login = '".$_GET['id_login']."'");
    Dovresti leggere l'id dalla sessione. O l'username. Basta scegliere l'uno o l'altro.

    Occhio ad alcuni altri aspetti:
    Codice PHP:
    $sql = "SELECT id_login FROM login WHERE username = '$myusername' and password = '$mypassword'";
    Da questa query sembra tu stia memorizzando le password in chiaro nel database: col GDPR ti becchi una mazzata atroce facendo una cosa del genere. Usa strumenti come password_hash e password_verify

    Questa query
    Codice:
    select username from login where username = '$user_check'
    è abbastanza inutile: stai chiedendo l'username di un utente di cui sai l'username (che in italiano suonerebbe come chiedere "qual'è di nome di Mario?"). Potrebbe avere un'utilità se la usassi per controllare l'esistenza di un utente col nome utente indicato, ma nel codice questo non c'è. Il che ci porta a...

    ... controlla sempre i valori di ritorno di tutte le funzioni che possono fallire, per esempio:
    Codice PHP:
    $result = mysqli_query($db,$sql); // result potrebbe essere false
    $row = mysqli_fetch_array($result,MYSQLI_ASSOC); // result potrebbe contenere un insieme vuoto
    ...
    Infine: non usare direttamente input esterni per costruire query, ti esponi a SQL Injection. Usa piuttosto i prepared statement

    I suggerimenti che do più spesso:


  4. #4
    puntifedelta non è connesso Utente giovane
    Data registrazione
    08-10-2020
    Messaggi
    92

    Predefinito

    grazie a tutti infatti me ne sono accorto dopo ed ho rifatto il tutto in questo modo

    Login
    Codice PHP:
    <?php

    session_start
    ();

    if(isset(
    $_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: index.php");
    exit;
    }

    require_once
    "config/config.php";

    $username = $password = "";
    $username_err = $password_err = "";

    if(
    $_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty(
    trim($_POST["username"]))){
    $username_err = "Please enter username.";
    } else{
    $username = trim($_POST["username"]);
    }

    if(empty(
    trim($_POST["password"]))){
    $password_err = "Please enter your password.";
    } else{
    $password = trim($_POST["password"]);
    }

    if(empty(
    $username_err) && empty($password_err)){

    $sql = "SELECT id_login, username, password FROM login WHERE username = ?";

    if(
    $stmt = $mysqli->prepare($sql)){

    $stmt->bind_param("s", $param_username);

    $param_username = $username;

    if(
    $stmt->execute()){

    $stmt->store_result();

    if(
    $stmt->num_rows == 1){

    $stmt->bind_result($id, $username, $hashed_password);
    if(
    $stmt->fetch()){
    if(
    password_verify($password, $hashed_password)){

    session_start();

    $_SESSION["loggedin"] = true;
    $_SESSION["id_login"] = $id;
    $_SESSION["username"] = $username;

    header("location: index.php");
    } else{

    $password_err = "The password you entered was not valid.";
    }
    }
    } else{

    $username_err = "No account found with that username.";
    }
    } else{
    echo
    "Oops! Something went wrong. Please try again later.";
    }

    $stmt->close();
    }
    }

    $mysqli->close();
    }
    ?>
    credo che adesso sia migliore o sbaglio ?

    questa invece è la pagina welcome

    Codice PHP:
    <?php

    session_start
    ();

    if(!isset(
    $_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: login.php");
    exit;
    }
    ?>
    questa è la tabella del database login


    questa è la tabella del database admin


    come posso adesso richiamare i dati della tabella admin in base al login effettato ?
    Ultima modifica di puntifedelta : 24-10-2020 alle ore 14.44.32

  5. #5
    puntifedelta non è connesso Utente giovane
    Data registrazione
    08-10-2020
    Messaggi
    92

    Predefinito

    con questo (è corretto?) vado nella pagina del profilo ma vorrei capire come fare per visualizzare i dati
    Codice PHP:
    <?php
    echo '
    <a href="profilo.php?id_login='
    . $_SESSION["id_login"] . '" class="btn btn-icon btn-primary btn-sm" data-toggle="tooltip" title="Aggiungi Punti">
    <i class="fa fa-pencil"></i>

    </a>'
    ;?>
    Ultima modifica di puntifedelta : 24-10-2020 alle ore 15.11.26

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    Devi verificare per username e password nella tua sql si aggiunge AND e continua come il primo attuale parametro del tuo WHERE ma ovviamente con nome campo diverso e il valore crittogafato della password.
    Perché chiami due volte session_start() ? Il codice deve essere usato solo quando necessario e non superfluo.
    Dopo puoi anche recuperare la sessione con session_start() e vedere se $_SESSION["loggedin"].
    In pratica inserisci session_start() prima di output se vuoi creare o recuperare la sessione in tutte le pagine con estensione php e se la variabile $_SESSION["loggedin"] esiste sei loggato.

  7. #7
    puntifedelta non è connesso Utente giovane
    Data registrazione
    08-10-2020
    Messaggi
    92

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Devi verificare per username e password nella tua sql si aggiunge AND e continua come il primo attuale parametro del tuo WHERE ma ovviamente con nome campo diverso e il valore crittogafato della password.
    Perché chiami due volte session_start() ? Il codice deve essere usato solo quando necessario e non superfluo.
    Dopo puoi anche recuperare la sessione con session_start() e vedere se $_SESSION["loggedin"].
    In pratica inserisci session_start() prima di output se vuoi creare o recuperare la sessione in tutte le pagine con estensione php e se la variabile $_SESSION["loggedin"] esiste sei loggato.
    ti ringrazio molto per la risposta, sono uno studente e metto in pratica quello che mi insegnano e quello che trovo su internet facendo delle ricerche, quando dici

    "Perché chiami due volte session_start() ? Il codice deve essere usato solo quando necessario e non superfluo"

    cosa intendi ? saresti così gentile da farmi un esempio pratico di tutto se non è troppo disturbo ?

    te ne sarei grato

  8. #8
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    creazione sessione
    Codice PHP:
    // Nessun output
    session_start();
    // Check se già esiste la sessione
    if(!isset($_SESSION["loggedin"]))
    $_SESSION["loggedin"] = 'valore';
    // Redirect se la sessione crea il cookie
    header("location: index.php");
    // Stesso problema analogo descritto in recupero sessione
    Recupero sessione, ovviamente su pagine php dove non sia mai stato dichiarato session_start altrimenti è una ripetizione inutile
    Codice PHP:
    // Nessun Output
    session_start();
    if(isset(
    $_SESSION['loggedin']))
    echo
    'utente loggato ma forse il periodo della sessione non è più valido, occorre un timestamp che indichi la durata della sessione';
    else
    header("location: login.php");
    Con questa funzione stai anche recuperando la password https://www.php.net/manual/en/mysqli...ind-result.php

    Come puoi constatare session_start crea o recupera la sessione, il codice sarà una ripetizione anche per altre pagine php, dipende dal contesto.
    Ultima modifica di darbula : 25-10-2020 alle ore 01.57.26

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •