evitare doppioni

minatore

Utente Attivo
25 Set 2007
410
0
0

Ciao a tutti sto facendo un casino con questo codice, vorrei solo che non venga inserita una categoria già presente nel db
spero in un vostro aiuto
distinti saluti
qui il codice
PHP:
<?php
	if($_POST)
		{
			inserisci_record();
		}
	else
		{
			mostra();
		}
	
	function inserisci_record()
		{
			//richiamo il file di configurazione
			require 'Config.php';
			//richiamo il file di connessione
			require 'Connect.php';
		
			$categoria=trim($_POST['frm_categoria']);
			
			if(get_magic_quotes_gpc())
				{
					$categoria=stripslashes($categoria);
				}
			$categoria=mysql_real_escape_string($categoria);
			if(!$categoria)
				{
					$messaggio=urlencode("Non hai inserito la Categoria");
					header('location:'.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
					exit;
				}
			$query=("SELECT descrizione FROM categorie WHERE descrizione=".$_POST['frm_categoria']);
			if(mysql_num_rows($query)==1)
					{
						$messaggio=urlencode("Categoria già presente");
						header('location:'.$_SERVER['PHP_SELF'].'?msg='.$messaggio);
						exit;
					}
	 		
			//preparo la query di inserimento
			$query="INSERT INTO categorie(descrizione)
			VALUES('$categoria')";
			//invio query
			$result=mysql_query($query);
			//controllo l'esito
			if(!$result)
				{
					die("errore nella query;".mysql_error());
				}
			//chiudo la connessione
			mysql_close();
		}
		
		function mostra()
			{
				if(isset($_GET['msg']))
					{
						echo htmlentities($_GET['msg']);
					}
			}
?>
 
ciao ragazzi, lo so che la cosa che la cosa è alquanto semplice.
Io ci sto ancora lavorando, ma non riesco ad uscirne
ho provato a fare una cosa del genere
PHP:
$query_di_verifica=mysql_query("SELECT descrizione FROM categorie WHERE descrizione=".$_POST['frm_categoria']); 
            mysql_query($query_di_verifica);
			if(mysql_num_rows($query_di_verifica)==1)
			
                    { 
                        $messaggio=urlencode("Categoria già presente"); 
                        header('location:'.$_SERVER['PHP_SELF'].'?msg='.$messaggio); 
                        exit; 
                    }
che ne dite?
P.S. comunque non funziona
Ciao da minatore
 
Ciao,
hai ragione quello era il vecchio script
ecco il nuovo ma uguale non funziona
PHP:
$query_di_verifica="SELECT descrizione FROM categorie WHERE descrizione=".$_POST['frm_categoria']; 
            mysql_query($query_di_verifica);
			$num=mysql_num_rows($query_di_verifica);
			if($num==1)
			        { 
                        $messaggio=urlencode("Categoria già presente"); 
                        header('location:'.$_SERVER['PHP_SELF'].'?msg='.$messaggio); 
                        exit; 
                    }

Grazie


errore che viene visualizzato è:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in insert_categoria.php on line 33
la linea 33 è questa
PHP:
$num=mysql_num_rows($query_di_verifica);

Potrest darmi una mano?
 
E' sempre sbagliata la query! $query_di_verifica è una stringa.
Così dovrebbe andare:
PHP:
$query_di_verifica_stringa="SELECT descrizione FROM categorie WHERE descrizione='".$_POST['frm_categoria']."';";  
$query_di_verifica = mysql_query($query_di_verifica_stringa);
E poi ti consiglio di usare:
PHP:
if ($num > 0)
al posto di == 1
 
Ciao jan267
prima cosa grazie lo script funziona
ma come mai
1 - query_di_verifica_stringa e dopo usi query_di_verifica
2 - perchè > di 0 e non uguale a 0?

Comunque un grazie tante
da minatore

Ti faccio domande per non incappare nello stesso errore

Grazie
 
Ciao, allora: per il primo punto io ho usato due variabili solo per il fatto che tu hai preferito dichiarare la query in una stringa anzichè direttamente (es:)
PHP:
$query = mysql_query("SELECT * FROM tabella;");
per il secondo punto è consigliabile (a mio parere) usare > 0 quando cerchi se è presente il record almeno una volta per evitare un problema: magari quel risultato c'è più di una volta e quindi se fai "== 1" lui non ti stampa l'errore.
 
Ciao, jan267, grazie per la spiegazione, ho capito
forse perchè mi trovo agli inizi, ma è la prima volta che vedo scritto
PHP:
$query_di_verifica_stringa="SELECT descrizione FROM categorie WHERE descrizione='".$_POST['frm_categoria']."';";
Non chiamarmi scocciatore, ma perchè le virgolette singole e poi le doppie, addirittura 2 volte il punto e virgola
Potresti spiegarmelo?

Ah dimenticavo, lo script va bene finchè non inserisco categorie con l'apostrofo, ma il controllo io già l'ho fatto, non dovrebbe darmi errore

cosa c'è che non va?

grazie da minatore
 
Ultima modifica:
  • Virgolette - le virgolette singole racchiudono il testo della variabile $_POST, le virgolette doppie invece servono per evidenziare la variabile
  • Punto e virgola - il primo punto e virgola è facoltativo e serve per impostare la fine della query, il secondo è obbligatorio.
  • Per il terzo punto, prima della stringa della query metti:
    PHP:
    $_POST['frm_categoria'] = addslashes($_POST['frm_categoria']);
Comunque, studia! :book:
 
Ciao jean grazie x le spiegazioni e per l'ultimo consiglio, anche se avevo già cominciato
Ciao e buona domenica :fonzie:
 

Discussioni simili