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

    mysql_num_rows() crontrollo tabella

    salve a tutti,

    ho creato una funzione per controllare se un dato è presente nella tabella oppure no
    codice:
    $titolo=$_POST['titolo'];
        $desc=$_POST['desc'];
        $duplicato='';
        
            $sql_cerca="select * from home where home_title = '".$titolo."' ";
            $dati_cerca=mysql_query($sql_cerca,$conn);
            $cerca=mysql_num_rows($dati_cerca);
            
                if($cerca <1)
                
                {$duplicato=1;}
                else{$duplicato=0;}
                
                
                 
                echo $cerca;
    questa funzione funziona correttamente e mi restituisce il valore 0 o 1 a seconda che il dato sia presente o meno nella tabella...
    Il mio problema è quando il controllo lo devo fare su piu elementi della tabella e non su uno; in questo caso il controllo l'ho fatto solo su $titolo ma lo vorrei fare anche su $desc...

    Dovrei fare un'altra richiesta al db con un' query?... sarebbe fattibile, però fino a quando i dati sono pochi ok, ma se dovessi fare un controllo su 20 dati?....

    grazie per le risposte...
    Ciao Michael

  2. #2
    se vuoi contare quanti record ci sono dovresti usare count(*) che ti rende il numero esatto delle ricorrenze senza dover fare la scansione di tutta la tabella.

    mi pare pero' che anche la logica che usi non sia precisa.

    Codice PHP:
    ....
            
    $cerca=mysql_num_rows($dati_cerca);
            
                if(
    $cerca <1)
                
                {
    $duplicato=1;}
                else{
    $duplicato=0;} 
    se $cerca e' inferiore a 1 significa che e' zero. Se e' zero tu metti duplicato = 1 ????

    Per quanto riguarda la ricerca sulla descrizione sara' dura farla esattamente con la stringa identica. Quindi "forse" vuoi solo cercare una parola o una stringa ben precisa, ma sarebbe errato chiamarlo doppione. Doppione puo' esserlo solo se e' esattamente uguale il record oppure "quel" campo ben definito che dovrebbe essere UNIQUE.

    In questo caso la ricerca sarebbe su record/campi duplicati e non su una stringa e andrebbe fatta con una logica diversa.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    se $cerca e' inferiore a 1 significa che e' zero. Se e' zero tu metti duplicato = 1 ????
    si scusa ho messo così ma era solo per fare un test in quel momento mi servivano solo due numeri che si alternassero in base alle informazioni che tento di mettere in una tabella tramite la compilazione di un form...

    Cmq non voglio sapere quanti record ho nella tabella voglio vedere se i dati che ho messo in un form esistono, e se non esistono inserirli nella tabella... quindi se $duplicato è 1 non inserisco se $duplicato è 0 allora inserisco.... questa era la mia logica, però fino a che devo controlalre solo un dato allora funziona tutto, se ne devo controlalr epiu di uno trovo dei problemi... :master:

    Te come faresti?....

  4. #4
    dipende da "cosa" non deve essere duplicato.

    Non puo' essere tutto il record completo altrimenti il problema sarebbe quello di doppio inserimento. Se si tratta di evitare un doppio inserimento (gli stessi dati) ovviamente la mimica dovra' essere diversa.

    Di cosa si tratta esattamente?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    allora,

    Io inserisco tramite la compilazione di un form dei dati in una tabella, questi dati hanno la possibilità di essere rimodificati ad esempio:

    valori della tabella: id con auto increment, titolo, descrizione

    ho creato un if che vede se l'id è 0 o no se è zero allora vuol dire che sto inserendo un modulo completamente nuovo, se è diverso vuol dire che il modulo esiste già e vado a caricarlo per poterlo poi modificare...

    quindi io vorrei creare un controllo che (anche se estremamente improbabile ma non impossibile) prima di questa condizione cene fosse un'altra che mi controlla che i dati che sto inserendo non siano completamente uguali a quelli che ci sono già e se lo sono fare qualcosa...

  6. #6
    e' dura da capire... cioe' volevo dire che io son duro a capire.

    Se e' un nuovo inserimento sara' una insert. Se e' un update vuol dire che gli avrai presentato un qualcosa da aggiornare e quindi sara' un update di un record che e' presente e di cui hai letto l'id.

    Non credo tu faccia fare un update random di un qualcosa che potrebbe esistere o meno sul tuo db. Quindi devi controllare che non sia un doppio inserimento. Ma attenzione che un doppio inserimento significa poi stessa tupla ma con id diverso. Per verificare velocemente se la tupla da inserire e' "identica" ad altra esistente fai un controllo serializzando i dati da controllare e quelli inseriti passandoli ad MD5().

    hai un esempio in una vecchia pillola

    http://forum.html.it/forum/showthrea...64#post7161564

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    inanzitutto grazie mille per la disponibilità e per la pazienza che hai avuto con me,

    certamente non sei te che ci metti tanto a capire, ma sono sicuramente io che essendo alle prime armi non mi sò spiegare molto bene...

    Ho letto il link che mi hai dato e l'ho trovato molto interessante, probabolmente adotterò quella soluzione, però mentre aspettavo la tua risposta mi è venuta in mente un'idea che ho messo in pratica e devo dire che funziona abbastanza bene:
    codice:
    function salva(){
    	global $conn, $id;
    	
    	$titolo=$_POST['titolo'];
    	$desc=$_POST['desc'];
    	
    	if($id==0)
    		
    	{
    		$sql_cerca="select * from home where home_title = '".$titolo."' ";
    		$dati_cerca=mysql_query($sql_cerca,$conn);
    		$cerca=mysql_num_rows($dati_cerca);
    		if($cerca <1)
    		{
    	$sql='insert into home(home_title, home_desc) values("'.$titolo.'","'.$desc.'")';
    	mysql_query($sql, $conn);
    	$output= 'Il contenuto è stato inserito correttamente.
    
    Inserisci nuovo contenuto
    
    Torna alla lista';	
    	}
    		
    	else {$output= 'Il contenuto è stato inserito correttamente.
    
    Inserisci nuovo contenuto
    
    Torna alla lista';}
    
    		}
    		
    		else
    			{
    			$sql='update home set home_title="'.$titolo.'",home_desc="'.$desc.'" where port_id="'.$id.'" ';	
    			mysql_query($sql, $conn);
    			
    $output= 'Il contenuto è stato aggiornato correttamente.
    
    Inserisci nuovo contenuto
    
    Torna alla lista';
    			}	
    	return($output);
    
    	}
    i dati sono raccolti da un piccolo form posizionato in un'altra funtion che mi richiama questa function con una action...
    cosi messa la funzione mi protegge dall'inserimento di un duplicato, dato che la cosa primaria in questo caso è il titolo, quindi non avrebbe senso inserire un nuovo articolo con il solito titolo, e in più mi permette anche di fare l'update nel caso in cui la voglia modificare e mi protegge anche da un'eventuale (f5) una volta conclusa la funzione....

    Cosa ne pensi di questa soluzione? è completamente da scartare o no?

  8. #8
    non capisco da dove spunta $id.

    se lo passi nel form va da se che quella e' un UPDATE altrimenti dove lo avresti preso?

    Hai un modo solo e certo per fare un aggiornamento ed e' quello di prendere il record se esiste passarlo al form tenendoti hidden l'id ed offrendo solo i campi modificabili.

    Se invece il titolo non esiste e vuoi farne l'inserimento allora passi ad un form per inserimento che sicuramente avra' ulteriori campi oltre quei due da compilare.

    Quando riceverai il POST bastera' valutare il submit (inserisci o modifica) per capire cosa devi fare.

    grosso modo direi:

    compilazione e ricerca di un titolo,
    se esiste compili un form aggiorna oppure segnali che il titolo e' gia' esistente e di cambiare se vuole inserire,
    se non esiste compili un form inserisci.

    Se aggiorna puo' ripeterlo tutte le volte che gli pare tanto se il contenuto e' uguale a quello che gia' si trova nel db non viene effettuata alcuna modifica. Se invece e' un insert per impedire un rilancio volontario o casuale che sia, che provocherebbe la scrittura di un record doppio, invii la risposta di inserimento tramite una terza pagina di script in modo da svuotare il POST e rilanciare la home o quel che l'e'. A questo punto se riscrive di nuovo lo stesso titolo la risposta che ricevera' sara' quella di un update.

    quello, cattivissimo, ti aggiunge un cazzobuffo al titolo e reinserisce. Non c'e' pace per i buoni.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    il $id l'ho dichiarato all'inizio del php uguale a 0 per soddisfare if($id=0)

    effettivamente al momento del lancio della funzione mi protegge da tutto, però nel momento di un nuovo inserimento potrebbe essere inserito un nuovo articolo con un nome differente...

    Vabbè però a quel punto selè cercata lui ...

    però se ti riferivi al momento dell'update, non mi crea un doppione perchè l'update viene effettuato tramite la chiave primaria della tabella e non tramite il titolo... quella protezione sinceramente l'ho pensata quasi esclusivamente per proteggermi dall'(f5) ...

  10. #10
    rieccomi...

    e tutto il girono che sto battendo la testa su questo script ma non riesco a trovare l'errore

    codice:
    if(is_uploaded_file($_FILES['upimg']['tmp_name'])){
    			$cartella=date("Y").date("m");
    			
    			$upload_dir=$_SERVER['DOCUMENT_ROOT'].'/upload/'.$cartella.'/';
    			if(!file_exists($upload_dir)){mkdir($upload_dir);}
    			
    			$filename=$id.'_'.$_FILES['upimg']['name'];
    			$estensioni_ammesse=array('jpg','jpeg','gif','png');
    			$estensione=substr($filename,strpos($filename,'.')+1,(strlen($filename)-strpos($filename,'.')));
    			if(in_array($estensione,$estensioni_ammesse)){
    				move_uploaded_file($_FILES['upimg']['tmp_name'],$upload_dir.$filename);
    				$sql='update immagini set img_url="'.$cartella.'/'.$filename.'" where img_port_id='.$id.' ';
    				mysql_query($sql);
    				}
    			else{/*scrivere un'errore*/}
    		}
    il problema è che non riscontro nessun errore... non fa semplicemente niente, l'ho anche messo in una funzione da solo in modo che uan volta richiamata facesse solo quello ma non succede niente .....

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.