[risolto] Istruzione per estrazione di dati casuali dal db

  • Creatore Discussione Creatore Discussione Altutto
  • Data di inizio Data di inizio
ciao
scoperto l'inghippo:
quella parte di script che estrae il nome del campo ti estrae sempre il nome dell'ULTIMO campo, nel tuo caso capitolo quindi il like non trova nulla.
spiega bene cosa vorresti ottenere da quello script
 
il mio intervento si riferiva a questa tua risposta

come vedi nel var_dump che ti ha fatto mettere Borgo il nome del campo è "capitolo" che contiene un numero e non del testo, cosi la query non ti restituirà mai un risultato
il problema quindi dovrebbe essere nella variabile $current_col

Ma infatti quando avevo provato a cercare il campo capitolo conteneva anche lui "test", poi, però, l'ho modificato da varchar a tinyint e ho quindi modificato il record in "12" ;)

ciao
scoperto l'inghippo:
quella parte di script che estrae il nome del campo ti estrae sempre il nome dell'ULTIMO campo, nel tuo caso capitolo quindi il like non trova nulla.
spiega bene cosa vorresti ottenere da quello script

Dovrei estrarre un record casuale che abbia almeno una colonna che sia "like" $_GET['ricerca']...
Quindi dovrebbe cercare il termine cercato in tutte le colonne, prendere le righe in cui c'è il termine e stamparne a video una a caso
 
ciao
allora, come detto e se non ho capito male tu hai una tabella del tipo
Codice:
pagina|argomento|argomento_madre|procedura|definizione|attenzione|prima|seconda|terza| anno_scolastico|capitolo
tu vuoi cercare un record che abbia il termine cercato in uno dei campi esclusi pagina| anno_scolastico|capitolo
quindi devi cercare in
argomento|argomento_madre|procedura|definizione|attenzione|prima|seconda|terza
giusto?
quindi, se non ho capito male io farei semplicemente così
PHP:
<?php
//......
$cercare=addslashes(trim($_GET['ricerca']));
//un piccolo controllo
if($cercare==""){
	//se qualcuno non ha immesso niente
	//un ritorno alla pagina di ricerca da cui proviene il get
}else{
	//dati di connessione
	//qui togli o aggiungi i campi che effettivamente ti servono
	$campi=array('argomento','argomento_madre','procedura','definizione','attenzione','prima','seconda','terza');
	//compongo il like per tutti i campi interessati
	$like="";
	foreach($campi as $nome){
		$like.= " $nome LIKE '%$cercare%' OR ";
	}
	//tolgo l'ultimo or
	$lunga=strlen($like)-4;
	$like=substr($like,0,$lunga);
	//costruisco la query stringa
	$sqla = "SELECT * FROM matematica WHERE  $like ORDER BY RAND() LIMIT 1"; 
	$ressa= mysql_query($sqla, $con2) or die (mysql_error()) ;   
	if(mysql_num_rows($ressa)==0) { 
    	echo "nessun record trovato"; 
	}else{
    	$rowa = mysql_fetch_array($ressa);  
    	echo "Spiega la procedura del seguente argomento:"; 
    	echo $rowa['argomento']; 
	}
//....
}
//....
?>
prova e sappi dire

p.s.
usi il $_GET la ricerca non avviene tramite un form? e se si, usa il metodo POST sostituendo anche
$cercare=addslashes(trim($_GET['ricerca']));
con
$cercare=addslashes(trim($_POST['ricerca']));
molto più sicuro
 
Grazie mille, ora funziona perfettamente :D

La ricerca avviene tramite un form, ora che funziona tutto, passerò al metodo POST, in fase di sviluppo di solito uso GET per passare i dati più velocemente inserendoli tramite l'url :)

Grazie per la pazienza infinita che hai avuto nell'aiutarmi :D
 
Bravi!
piccola psservazione per Borgo
PHP:
//tolgo l'ultimo or
$lunga=strlen($like)-4;
$like=substr($like,0,$lunga);
dovrebbe essere uguale a
PHP:
//tolgo l'ultimo or
$like=substr($like,0,-4);
una riga in meno di codice :fonzie:
 

Discussioni simili