Evitare records duplicati nel database

  • Creatore Discussione Creatore Discussione zerobit
  • Data di inizio Data di inizio

zerobit

Utente Attivo
10 Mar 2012
35
0
0
Ciao a tutti !

A rieccomi nel miglior forum di tutto il web

Questo listato mi permette di eseguire un controllo sui dati che vengono digitati in un form , mi spiego meglio :

Se vengono inseriti record doppi , quindi voci già presenti nel db mi rimanda , alla pagina voci-duplicate.php


Vi faccio un esempio che vale più di mille parole :


1 - Digito pancetta affumicata e tutto va a buon fine

2 - Digito nuovamente pancetta affumicata e ANCHE STAVOLTA memorizza i dati nel database

3 - Digito per la terza volta pancetta affumicata e stavolta finalmente mi rimanda alla pagina voci-duplicate.php

Avete capito dove sta l'inghippo ?

Il redirect alla pagina voci-duplicate.php doveva partire quando ho digitato pancetta affumicata la seconda volta , NON LA TERZA !

In altre parole permette l'inserimento di DUE VOCI uguali ( doppioni )


Riuscite a capire da cosa può dipendere ? :confused:


PHP:
<?
$mortadella=$_REQUEST['mortadella'];
$prosciutto=$_REQUEST['prosciutto'];
$bresaola=$_REQUEST['bresaola'];
$db = mysql_connect($dbxxx, $dbxxxxx, $password_db);
if ($db == FALSE)
die ("Errore nella connessione");
mysql_select_db($nome-db, $db)
or die ("Errore");
// campo da verificare
$val =  "mortadella";
// tabella salumi
$tbl = "salumi";
$sql = "select $val,count(*) as cnt from $tbl group by $val having cnt > 1";
$query = mysql_query($sql);

// Se trovi dei dati doppi...
if (mysql_num_rows($query) != 0){ 
header("location: http://localhost/voci-duplicate.php");
}
else   
$query = "INSERT INTO salumi (mortadella, prosciutto, bresaola) VALUES ('$mortadella', 

'$prosciutto', '$bresaola')";
if (mysql_query($query, $db))
echo "L'inserimento è avvenuto correttamente";
else
echo "Errore durante l'inserimento";
mysql_close($db); endif;
?>
 
Ultima modifica:
Ciao, prova così
Tu hai una input text e la chiamiamo categoria, questa passarà dei dati ad un'altra pagina che verificherà il rurro ed elabora il codice restituendo un messaggio
PHP:
<input type='text' name='categoria'>
PHP:
$query_verifica=mysql_query("select * from salumi where descr_categoria = $categoria")
$risultato=mysql_num_rows(query_verifica);
if($risultato > 0)
{echo"categoria già esistente";}
else
{echo"fai l'inserimento";}

Per sommi capi dovrebbe essere così, questa è una cosa fatta in fretta, ma funzionante

Ciao
 
Il problema è che lo stai facendo nel modo sbagliato:
PHP:
<?php
$campo = isset($_POST['campo']) ? trim($_POST['campo']) : '';

if ($campo == '') {
    die('Devi inserire un valore nel campo.');
}

mysql_connect('localhost', 'root', 'pass') or die(mysql_error());
mysql_select_db('database') or die(mysql_error());

$campo = mysql_real_escape_string($campo);
$sql   = "SELECT COUNT(*) FROM tabella WHERE campo = '{$campo}'";
$query = mysql_query($sql) or die(mysql_error());

if (mysql_result($query, 0) > 0) {
    die('Hai già inserito questo record.');
}

// ...
?>
Da dove hai tirato fuori quella query complicatissima?

P.S. La libreria mysql è deprecata. Usa PDO o mysqli.
 
ciao
al massimo non funzia lo stesso, ma prova a mettere

$sql = "select $val,count(*) as cnt from $tbl group by $val having cnt >= 1";
 
Salve a tutti e tre , e grazie per aver risposto

minatore
Ciao, prova così
Tu hai una input text e la chiamiamo categoria, questa passarà dei dati ad un'altra pagina che verificherà il rurro ed elabora il codice restituendo un messaggio
PHP:
    <input type='text' name='categoria'> 
    Codice PHP:
    $query_verifica=mysql_query("select * from salumi where descr_categoria = $categoria")
    $risultato=mysql_num_rows(query_verifica);
    if($risultato > 0)
    {echo"categoria già esistente";}
    else
    {echo"fai l'inserimento";}

Questa riga mi da errore syntax error unexpected t_variable
PHP:
 $risultato=mysql_num_rows(query_verifica);



borgo italia

ciao
al massimo non funzia lo stesso, ma prova a mettere

$sql = "select $val,count(*) as cnt from $tbl group by $val having cnt >= 1";

Purtroppo non va , nel senso che va subito alla pagina del redirect , e non permette l'inserimento di nuovi dati



alessandro1997

Il problema è che lo stai facendo nel modo sbagliato:
PHP:
    <?php
    $campo = isset($_POST['campo']) ? trim($_POST['campo']) : '';

    if ($campo == '') {
        die('Devi inserire un valore nel campo.');
    }

    mysql_connect('localhost', 'root', 'pass') or die(mysql_error());
    mysql_select_db('database') or die(mysql_error());

    $campo = mysql_real_escape_string($campo);
    $sql   = "SELECT COUNT(*) FROM tabella WHERE campo = '{$campo}'";
    $query = mysql_query($sql) or die(mysql_error());

    if (mysql_result($query, 0) > 0) {
        die('Hai già inserito questo record.');
    }

    // ...
    ?>

E vai ! finalmente funziona ( per sicurezza comunque farò altri test , non vorrei essere frettoloso ..... )


Grazie infinite e buona serata a tutti ... :fonzie:


Hei ... se passate dalle mie parti vi offro da bere !
 
Ultima modifica:
Questa riga mi da errore syntax error unexpected t_variable
PHP:
 $risultato=mysql_num_rows(query_verifica);



Ciao, è vero le cose fatte in fretta non sono tanto buone avevo dimenticato la
Comunque hai risolto e va benissimo

Ciao alla prossima

 

Discussioni simili