Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    problema duplicazione dati DB

    Buongiorno/buonasera.

    Sono qui per chiedervi una mano, in quanto ho riscontrato delle difficoltà. Praticamente ho scritto questo piccolo programma che funge da prototipo per un programma che porterò all'esame. Il fatto che funziona quasi perfettamente (credo?), se non fosse che mi permette di poter inserire un nuovo utente anche se questo esiste già (cosa che non dovrebbe accadere!). Quindi ora vi chiedo: come posso risolvere?
    Qui di seguito vi lascio la parte di codice PHP:

    Codice PHP:

    <?php
       
    if(isset($_POST) && ! empty($_POST)){   

     
    ?>

    <?php
    // info generali utente
    $mod $_POST['modalita'];    // modalità di accesso (accedi o iscriviti)
    $usn $_POST['User'];
    $pass $_POST['Password'];

    // info per collegamento al DB
    $server "127.0.0.1";
    $username "root";
    $password "";
    $database "infotech";

    // connessione al DB
    $conn mysqli_connect($server,$username,$password) or die("Connessione non riuscita");

    /* se il DB esiste, effettua la connessione
       altrimenti no */
    mysqli_select_db($conn,$database) or die("database non presente");



                                        
    // controllo della modalità scelta

    if($mod == "accedi"){
        
        
    /*controllo dei dati inseriti dall'utente nel form
          per verificare correttezza o esistenza dell'utente inserito*/
        
    $query "SELECT nome,conome,username FROM utenti
                    WHERE username = '
    $_POST[User]' AND password = '$_POST[Password]'";

        
    $result mysqli_query($conn,$query) or die("errore");

        
    $num mysqli_num_rows($result);    // può avere valore 0 o 1

        
    if($num == 0)
             echo 
    "password o username errati";

        else{
        
        
    /*stampo l'utente che ha appena fatto l'accesso*/    
        
    echo "<table>";
        echo 
    " <tr bgcolor = 'orange'>";
        echo 
    "<td><b> cognome </b></td>";
        echo 
    "<td><b> nome </b></td>";
        echo 
    "<td><b> username </b></td>";
        echo 
    "</tr>";

    $record mysqli_fetch_row($result);
        echo 
    "<tr>";
        echo 
    " <td> $record[1] </td>";
        echo 
    " <td> $record[0] </td>";
        echo 
    " <td> $record[2] </td>";
        echo 
    "</tr>";
    echo 
    "</table>";
    }

    }


    else{
        
        
    $query "INSERT INTO utenti (username,password,conome,nome) 
                        VALUES ('
    $_POST[User]', '$_POST[Password]', '', '')";
            echo 
    $query;

        
    $result mysqli_query($conn,$query) or die("errore");

        
    $num mysqli_num_rows($result);    // può avere valore 0 o 1

        
    if ($num 0)
            die(
    "utente già esistente");
        else 
            echo 
    "registrazione avvenuta";
    }

    }
    ?>
    Grazie per l'attenzione.

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prima dell’insert devi fare una select identica a quella della parte « accedi » e se trovi (almeno) un record stampi a video « Utente esiste già ».
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Guarda ho modificato ma non è successo nulla. Avrò sbagliato a fare le modifiche

    codice:
    <?php
       if(isset($_POST) && ! empty($_POST)){   
    
     ?>
    
    <?php
    // info generali utente
    $mod = $_POST['modalita'];    // modalità di accesso (accedi o iscriviti)
    $usn = $_POST['User'];
    $pass = $_POST['Password'];
    
    // info per collegamento al DB
    $server = "127.0.0.1";
    $username = "root";
    $password = "";
    $database = "infotech";
    
    // connessione al DB
    $conn = mysqli_connect($server,$username,$password) or die("Connessione non riuscita");
    
    /* se il DB esiste, effettua la connessione
       altrimenti no */
    mysqli_select_db($conn,$database) or die("database non presente");
    
    
    
                                        // controllo della modalità scelta
    
    if($mod == "accedi"){
        
        /*controllo dei dati inseriti dall'utente nel form
          per verificare correttezza o esistenza dell'utente inserito*/
        $query = "SELECT nome,conome,username FROM utenti
                    WHERE username = '$_POST[User]' AND password = '$_POST[Password]'";
    
        $result = mysqli_query($conn,$query) or die("errore");
    
        $num = mysqli_num_rows($result);    // può avere valore 0 o 1
    
        if($num == 0)
             echo "password o username errati";
    
        else{
        
        /*stampo l'utente che ha appena fatto l'accesso*/    
        echo "<table>";
        echo " <tr bgcolor = 'orange'>";
        echo "<td><b> cognome </b></td>";
        echo "<td><b> nome </b></td>";
        echo "<td><b> username </b></td>";
        echo "</tr>";
    
    $record = mysqli_fetch_row($result);
        echo "<tr>";
        echo " <td> $record[1] </td>";
        echo " <td> $record[0] </td>";
        echo " <td> $record[2] </td>";
        echo "</tr>";
    echo "</table>";
    }
    
    }
    
    
    else{
    
        $query = "SELECT nome,conome,username FROM utenti
                    WHERE username = '$_POST[User]' AND password = '$_POST[Password]'";
    
        $result = mysqli_query($conn,$query) or die("errore");
    
        $num = mysqli_num_rows($result);    // può avere valore 0 o 1
    
        if($num > 0)
             echo die('utente già esistente');
        else{
            $insert = "INSERT INTO utenti (username,password,conome,nome) 
                        VALUES ('$_POST[User]', '$_POST[Password]', '', '')";
            echo $insert;
        }
    }
    
    }
    ?>

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Cosa ti stampa a video ?

    Per la parte insert manca il mysqli_query.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Allora quel problema che mi faceva inserire doppioni l'ho risolto. Ora il problema è che non riesco a inserire nuovi utenti

    codice:
    <?php
       if(isset($_POST) && ! empty($_POST)){   
    
     ?>
    
    <?php
    // info generali utente
    $mod = $_POST['modalita'];    // modalità di accesso (accedi o iscriviti)
    $usn = $_POST['User'];
    $pass = $_POST['Password'];
    
    // info per collegamento al DB
    $server = "127.0.0.1";
    $username = "root";
    $password = "";
    $database = "infotech";
    
    // connessione al DB
    $conn = mysqli_connect($server,$username,$password) or die("Connessione non riuscita");
    
    /* se il DB esiste, effettua la connessione
       altrimenti no */
    mysqli_select_db($conn,$database) or die("database non presente");
    
    
    
                                        // controllo della modalità scelta
    
    if($mod == "accedi"){
        
        /*controllo dei dati inseriti dall'utente nel form
          per verificare correttezza o esistenza dell'utente inserito*/
        $query = "SELECT nome,conome,username FROM utenti
                    WHERE username = '$_POST[User]' AND password = '$_POST[Password]'";
    
        $result = mysqli_query($conn,$query) or die("errore");
    
        $num = mysqli_num_rows($result);    // può avere valore 0 o 1
    
        if($num == 0)
             echo "password o username errati";
    
        else{
        
        /*stampo l'utente che ha appena fatto l'accesso*/    
        echo "<table>";
        echo " <tr bgcolor = 'orange'>";
        echo "<td><b> cognome </b></td>";
        echo "<td><b> nome </b></td>";
        echo "<td><b> username </b></td>";
        echo "</tr>";
    
    $record = mysqli_fetch_row($result);
        echo "<tr>";
        echo " <td> $record[1] </td>";
        echo " <td> $record[0] </td>";
        echo " <td> $record[2] </td>";
        echo "</tr>";
    echo "</table>";
    }
    
    }
    
    
    else{
        
        $query = "SELECT nome,conome,username FROM utenti
                    WHERE username = '$_POST[User]' AND password = '$_POST[Password]'";
    
        $result = mysqli_query($conn,$query) or die("errore");
    
        $num = mysqli_num_rows($result);    // può avere valore 0 o 1
    
        if($num == 1)
            die("utente già esistente.");
        else {
            echo "registrazione avvenuta";
            $insert = "INSERT INTO utenti (username,password,conome,nome) 
                        VALUES ('$_POST[User]', '$_POST[Password]', '', '')";
            echo $insert;
    }
    
    }}
    ?>

  6. #6
    ah e poi dovrei effetturare un controllo anche perchè, mettiamo caso che nel mio db esiste già un utente con username "mrossi" e con password "mr22", se inserisco un nuovo utente "mrossi" e una password diversa, per esempio 123, me lo registra come nuovo utente, nonostante l'username esisti già.

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Te l'ho scritto. Ti manca il mysqli_query dopo l'insert.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Quote Originariamente inviata da plaztinum Visualizza il messaggio
    ah e poi dovrei effetturare un controllo anche perchè, mettiamo caso che nel mio db esiste già un utente con username "mrossi" e con password "mr22", se inserisco un nuovo utente "mrossi" e una password diversa, per esempio 123, me lo registra come nuovo utente, nonostante l'username esisti già.
    Quando si controlla l'esistenza di un utente si controlla solo il codice dell'utente mica la password !

    Codice PHP:
        $query "SELECT nome,conome,username FROM utenti
                    WHERE username = '
    $_POST[User]'"
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Poi non so quale sia il livello dell'esame e quali siano le aspettative del professore. Ma com'è fatto adesso il tuo codice non è sicuro.

    1 - bisogna controllare che i dati che devi inserire siano "sani".
    Cosi com'è uno puo' registrarsi usando uno username come ///////\\\\ per esempio.

    Di più uno puo' passare una query e fare una bella sql injection. Prova in modalità "accedi" a mettere nel campo User il valore 'or 1=1 --
    cioé apice spazio or spazio 1=1 spazio trattino trattino

    2 - non si salva mai una password in chiaro.

    3 - ci sarebbero altre cose da dire ma è tardi.
    Ultima modifica di badaze; 30-05-2018 a 23:53
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Allora, sono riuscito a risolvere il problema posto, grazie al tuo aiuto.

    Come faccio a rendere sicuro l'accesso? Siccome dovrei portare la crittografia come argomento di esame in sistemi, mi piacerebbe saperene di più. Inoltre, dove devo porre questo comando "'or 1=1 --"? Inoltre tu che intendi con "password in chiaro"?
    Per ultima cosa, potresti suggerirmi delle fonti da dove possa informarmi? So che sembra che stia facendo troppe richieste, ma il tempo stringe e devo raccogliere più informazioni possibili per finire questo progetto al meglio. Grazie dell'attenzione.

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.