Verificare se un utente è già presente nel db

di il
6 risposte

Verificare se un utente è già presente nel db

Salve ragazzi,
Sono un programmatore alle prime armi ed avrei bisogno del vostro aiuto per un problema che non riesco a risolvere.
Prima di inserire i dati all'interno di un db mysql vorrei effettuare una verica: controllare se un campo, nel mio caso il nome, è già presente.

Vi allego il codice php:

if($_POST){
 
    // include database connection
    include 'config/database.php';
 
    try{
     
        // insert query
        $query = "INSERT INTO products SET name=:name, description=:description, price=:price, created=:created";
 
        // prepare query for execution
        $stmt = $con->prepare($query);
 
        // posted values
        $name=htmlspecialchars(strip_tags($_POST['name']));
        $description=htmlspecialchars(strip_tags($_POST['description']));
        $price=htmlspecialchars(strip_tags($_POST['price']));
 
        // bind the parameters
        $stmt->bindParam(':name', $name);
        $stmt->bindParam(':description', $description);
        $stmt->bindParam(':price', $price);
         
        // specify when this record was inserted to the database
        $created=date('Y-m-d H:i:s');
        $stmt->bindParam(':created', $created);
         
        // Execute the query
        if($stmt->execute()){
            echo "<div class='alert alert-success'>Record was saved.</div>";
        }else{
            echo "<div class='alert alert-danger'>Unable to save record.</div>";
        }
         
    }
     
    // show error
    catch(PDOException $exception){
        die('ERROR: ' . $exception->getMessage());
    }
}
?>
Avete qualche dritta su come fare e dove posizionare il codice di verifica?
Grazie in anticipo.

6 Risposte

  • Re: Verificare se un utente è già presente nel db

    Se sai fare una insert, saprai fare anche una select!
  • Re: Verificare se un utente è già presente nel db

    Si è vero, ma non so come impostare il codice in modo da effettuare prima la verifica e poi la insert
  • Re: Verificare se un utente è già presente nel db

    oigmax ha scritto:


    Si è vero, ma non so come impostare il codice in modo da effettuare prima la verifica e poi la insert
    prima di tutto io non userei prepare se ho intezione di eseguire la query una sola volta,ma ti conviene chiamare direttamente mysql_query.
    Per verificare se il name è già esistente se name è una primary key puoi racchiudere tutto in una try ... catch, oppure prima di chiamare la insert fai una select su nome
    
    select name 
    from products 
    where name="$name"
    
    e verifichi se ritorna zero, uno o più righe.
  • Re: Verificare se un utente è già presente nel db

    Ciao, mysql_query è deprecato e non ti difende da sql injection, per cui io andrei di prepared statements ugualmente. Non penso che qualche millisecondo faccia la differenza in un'applicazione senza esigenze "speciali"
  • Re: Verificare se un utente è già presente nel db

    Se usi il modo procedurale devi usare msqli_query, se usi la classe $con->query, poi, naturalmente sei libero di fare come vuoi
  • Re: Verificare se un utente è già presente nel db

    E' tutto sbagliato.

    Lato PHP ti serve la libreria PDO.
    Lato database invece non puoi fare una select + una insert, a meno che non poni un lock globale sulla tabella intera (esempio myisam).
    Se invece utilizzi innodb, come engine, dovrai usare una transazione, magari impostando direttamente un ACID serializzabile.
    Altrimenti nulla vieta che nel tempo che trascorre tra la select e l'insert "qualcun altro" (cioè un altro client) ti crei proprio la riga di cui vuoi evitare la duplicazione.

    In alternativa potresti generare una chiave univoca, derivata dai dati da inserire, sul quale campo imporrai un vincolo di chiave primaria, andando a verificare all'insert cosa succede.

    Il metodo professionale è quello per innodb
Devi accedere o registrarti per scrivere nel forum
6 risposte