[risolto] Istruzione per estrazione di dati casuali dal db

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
PHP:
  $ress2 = mysql_query("SHOW COLUMNS FROM matematica", $con2);  
if($ress2 == FALSE) {
    die(mysql_error()); 
}
  while ($row2 = mysql_fetch_array($ress2))  {
    $columns= implode(",", $row2);  
     $current_col=""; // <- contiene il nome colonna corrente  
     for($i=0; $i<strlen($columns); $i++)  
     {  
        if($columns[$i] != ',')  
           $current_col .= $columns[$i];  
        else  
           break;  
     }  
}
$sqla = "SELECT * FROM matematica WHERE  ".$current_col." LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1";
$ressa= mysql_query($sqla, $con2);  
if($ressa == FALSE) {
    die(mysql_error());
}
         while ($rowa = mysql_fetch_array($ressa))  
         {
         echo "Spiega la procedura del seguente argomento:";
echo $rowa['argomento'];
          }
Dovrebbe estrarmi e stamparmi a video un record casuale della colonna 'argomento' dalla tabella 'matematica' dove i record sono simili a quelli in $ricerca...
E invece non stampa nulla! :(
Ho provato ad individuare gli errori sia con
PHP:
if($ressa == FALSE) {
    die(mysql_error());
}
che inserendo all'inizio del file
PHP:
error_reporting(E_ALL);
, ma non risultano erroi :mad: :mad: :mad: :confused:
Cosa ho sbagliato, secondo voi?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per prima cosa prova a mettere un var_dump per vedere se la querystringa sia come dovrebbe essere
PHP:
<?php
//....
$sqla = "SELECT * FROM matematica WHERE  ".$current_col." LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1";
var_dump($sqla);//poi lo togli o lo commenti
$ressa= mysql_query($sqla, $con2);
//....
?>
dimenticavo dato che hai LIMIT 1 non ti serve il while, ma basta

PHP:
$rowa = mysql_fetch_array($ressa);
 
Ultima modifica:

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Codice corretto secondo le indicazioni:
PHP:
  $ress2 = mysql_query("SHOW COLUMNS FROM matematica", $con2);   
if($ress2 == FALSE) { 
    die(mysql_error());  
} 
  while ($row2 = mysql_fetch_array($ress2))  { 
    $columns= implode(",", $row2);   
     $current_col=""; // <- contiene il nome colonna corrente   
     for($i=0; $i<strlen($columns); $i++)   
     {   
        if($columns[$i] != ',')   
           $current_col .= $columns[$i];   
        else   
           break;   
     }   
} 
$sqla = "SELECT * FROM matematica WHERE  ".$current_col." LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1"; 
var_dump($sqla);
$ressa= mysql_query($sqla, $con2);   
if($ressa == FALSE) { 
    die(mysql_error()); 
} 
$rowa = mysql_fetch_array($ressa);  
         echo "Spiega la procedura del seguente argomento:"; 
echo $rowa['argomento'];

Risultato: string(87) "SELECT * FROM matematica WHERE capitolo LIKE '%quellochehocercato%' ORDER BY RAND() LIMIT 1" Spiega la procedura del seguente argomento:



Mentre invece dovrebbe essere stampato anche un argomento casuale :(
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
da quanto ho capito l'errore si annida qui
Risultato: string(87) "SELECT * FROM matematica WHERE capitolo LIKE '%quellochehocercato%'
da dove salta fuori la variabile $ricerca?
questo perche
1) la query stringa è sintatticamente corretta (occhio dico sintatticamente)
2) non hai errori da mysql_query, quindi la query viene eseguita senza problemi
quindi o c'è un errore nella valorizzazione della variabile $ricerca o non esistono record che nel campo (cito quello che hai usato)
capitolo abbiano come valore una stringa che inizi/contienga/finisca quellochehocercato
poi aspetta ti dico di fare una prova
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova a modificare così
PHP:
<?php
//.....
$sqla = "SELECT * FROM matematica WHERE  ".$current_col." LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1"; 
//var_dump($sqla);
$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']; 
}
//....
?>
se ti da nessun record trovato per qualsiasi ricerca che fai appunto l'errore è in $ricerca o non esistono campi che soddisfino il LIKE
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Sì, scusa, non ho postato questa parte di codice, che è antecedente al resto:
PHP:
$ricerca=$_GET['ricerca'];
Sono sicuro al 100% che esista nella tabella "matematica" 3 record che contengono quellochehocercato

Mi dice effettivamente "nessun record trovato", eppure ho cercato "test" e nella tabella questa parola è presente in tre diversi record D:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
nei record della tabella ok, ma deve essere nel campo su cui effettui la ricerca, cioè prima ho notato che hai usato un campo chiamato capitolo, sei sicuro che ci sia qualche record che nel campo capitolo abbia quellochehocercato?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
ho fatto prima
ho provato questo semplice script adattandolo ad una tabella che ho (quindi a parte i nomi tabella e campi è uguale)
PHP:
<?php
$host = 'localhost';     //nome host
$username = 'root';      //user name
$password = 'password';  //password
$db = 'borgo-italia';  // nome data base
//---connessione----------------------------------------------------
$conn = mysql_connect($host,$username,$password) or die (mysql_error());
$sel = mysql_select_db($db) or die (mysql_error());
$ricerca="Emilia";
$sqla = "SELECT * FROM gli_speciali WHERE  regione LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1";
$ris=mysql_query($sqla);
if(mysql_num_rows($ris)==0){
	echo "<br>nessuno<br>";
}else{
	$riga=mysql_fetch_array($ris);
	echo "<br>trovato id: ".$riga['id']." regione: ".$riga['regione']." file: ".$riga['file']."<br>";
}
?>
su 118 record diversi ho questi 5
Codice:
1 	1294472414 	lagoSanto_parmense.php 	Emilia 	
4 	1300185591 	abbaziapomposa.php 	Emilia 	
80 	1299683008 	dozza.php 		Emilia 	
81	1291489626 	priorato-fontanellato.php 	Emilia 
85 	1311098615 	castelli_ducato.php 	Emilia

ora lanciando lo script me ne tira fuori uno a caso e dando l'aggiorna sempre un'altro a caso
quindi lo script funziona per cui l'errore non è nella query, tra l'altro il LIKE è caseinsensitive (per me è lo stesso scrivere emil o Emil)
comunque provato con ricerca (variando anche le maiscole/minuscole)
=Emilia
=emil
=ilia
=mili
sempre con lo stesso risultato ok es.
trovato id: 4 regione: Emilia file: lagoSanto_parmense.php
quindi è probabile che tu stia sbagliando qualcosa nell'indicargli dove deve cercare o ti porti dietro in $ricerca qualche carattere strano
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Grazie per l'aiuto :D
Ti dico i record che ho attualmente e che contengono "test".

pagina/argomento/argomento_madre/procedura/definizione/attenzione/prima/seconda/terza/ anno_scolastico/capitolo

522/test/test/test/test/test/test/test/test/2013-2014/12

443/questo è un test/questo è un test/questo è un test/questo è un test/questo è un test/questo è un test/questo è un test/questo è un test/2013-2014/12

Cerco tramite il metodo GET "test" e mi viene fuori "nessun record trovato" :(
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, il campo capitolo quindi contiene il numero 12 non la parola test
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Ora sì, prima conteneva "test" anche lui, poi però ho consentito solo valori numerici nella colonna "capitolo" (l'ho impostato su tinyint, prima era varchar) e ho dovuto cambiare il valore
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
prova direttamente su phpmyadmin
Codice:
SELECT * FROM matematica WHERE  argomento_madre LIKE '%test%' ORDER BY RAND() LIMIT 1
e guarda cosa ti risulta
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
visto che su phpmyadmin funzia, la querysrtinga è sintatticamente corrette, mysql non ti da errori ,unica cosa (rimetti il var_dump) è che una delle due variabili che impazzisca o non sia correttamente utilizzata

$sqla = "SELECT * FROM matematica WHERE ".$current_col." LIKE '%".$ricerca."%' ORDER BY RAND() LIMIT 1";

verifica per il valore di $current_col nel suo campo tu abbia almeno un record che soddisfi il like con $ricerca.
cioe dato gli esempi che hai postato verifica che se $ricerca è test la variabile $current_col contenga il nome di un campo con valore test
perchè (sempre da quello che hai postato) se $current_col contiene "capitolo" e $ricerca "test" il risultato sara sempre non trovato in quanto "capitolo" contiene 12
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
$current_col dovrebbe equivalere a
PHP:
pagina LIKE '%".$ricerca."%' or  argomento LIKE '%".$ricerca."%' or  argomento_madre LIKE '%".$ricerca."%' or   procedura LIKE '%".$ricerca."%' or definizione  LIKE '%".$ricerca."%' or attenzione LIKE '%".$ricerca."%' or prima LIKE '%".$ricerca."%' or seconda LIKE '%".$ricerca."%' or terza LIKE '%".$ricerca."%' or anno_scolastico LIKE '%".$ricerca."%' or capitolo LIKE '%".$ricerca."%'
(almeno, l'idea era quella XD), evidentemente non è così...
Il codice per ottenere $current_col è
PHP:
  while ($row2 = mysql_fetch_array($ress2))  { 
    $columns= implode(",", $row2);   
     $current_col=""; // <- contiene il nome colonna corrente   
     for($i=0; $i<strlen($columns); $i++)   
     {   
        if($columns[$i] != ',')   
           $current_col .= $columns[$i];   
        else   
           break;   
     }   
}
è corretto?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
il mio intervento si riferiva a questa tua risposta
Risultato: string(87) "SELECT * FROM matematica WHERE capitolo LIKE '%quellochehocercato%' ORDER BY RAND() LIMIT 1" Spiega la procedura del seguente argomento:
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
come ha detto anche crirc probabilmente l'errore è in $current_col, quindi mette il solito var_dump
PHP:
<?php
//....
 while ($row2 = mysql_fetch_array($ress2))  { 
    $columns= implode(",", $row2);   
     $current_col=""; // <- contiene il nome colonna corrente   
     for($i=0; $i<strlen($columns); $i++)   
     {   
        if($columns[$i] != ',')   
           $current_col .= $columns[$i];   
        else   
           break;   
     }   
}
var_dump($current_col);//punto da verificare
//.....
?>
da quanto hai detto la tua tabella ha i seguenti campi
Codice:
pagina|argomento|argomento_madre|procedura|definizione|attenzione|prima|seconda|terza| anno_scolastico|capitolo
e questo è l'esempio del loro contenuto in due record
Codice:
522|test|test|test|test|test|test|test|test|2013-2014|12
443|questo è un test|questo è un test|questo è un test|questo è un test|questo è un test|questo è un test|questo è un test|questo è un test|2013-2014|12

allara se facendo le possibili prove il var_dump ti restituisce o
string (xy) e un tra questi argomento|argomento_madre|procedura|definizione|attenzione|prima|seconda|terza
ma se ti restituisce
string (xy) e uno di questi pagina|anno_scolastico|capitolo
c'è qualcosa che non va nello script per rilevare il nome del campo che ti serve (a parte che non capisco esattamente quello che vuoi fare)
 
Discussioni simili
Autore Titolo Forum Risposte Data
CristianB72 [RISOLTO] [PHP] Istruzione "if" non funziona PHP 6
A [RISOLTO]Piccolissima istruzione MySQL 7
L (risolto) MySQL 0
B getElementById su piu id(Risolto) Javascript 7
L Esercitarsi con Js [RISOLTO] Javascript 4
C [RISOLTO]Inserimento variabile php in input html PHP 20
L risolto visualizzazione e ordinamento dati PHP 1
moustache [RISOLTO] SQL PHP IIS PHP 8
Sergio Unia Ricezione email con destinatari multipli [Risolto] PHP 2
L update tabelle in php mysql [risolto] PHP 6
M Semplice visualizzatore di immagini [risolto con plugin wp] PHP 7
L [RISOLTO] Stampa a video risultato count in html PHP 13
L [RISOLTO] Eliminare una discussione creata PHP 3
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
elpirata [RISOLTO][Javascript] Datapicker e autocompletamento campo input Javascript 2
elpirata [RISOLTO][Mysql] Problema insert valori apostrofati MySQL 1
elpirata [RISOLTO][Mysql] Contare le occorrenze in un campo tipo varchar MySQL 2
G [MS Access] Gestione biglietti [RISOLTO] MS Access 2
G [MS Access] Casella combinata & Query [RISOLTO] MS Access 4
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
M [RISOLTO]Windows media player non mi funziona più su win 10 pro 64 bit Windows e Software 2
C [RISOLTO][PHP] Errore di sintassi PHP 8
IT9-Gpp [RISOLTO] Leggere variabile restituita da success Ajax 3
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
Sergio Unia Recupero dati da una vecchia versione MySql [Risolto] MySQL 4
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [RISOLTO]Inserimento Immagini da pc a MySql PHP 15
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
felino Risolto - [Wordpress][WooCommerce] PayPal Checkout e campi di fatturazione WordPress 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [Javascript] [RISOLTO] Doppio "submit", in uno stesso "Form" , che puntino ad "action" diversi Javascript 1
marino51 [Risolto]videochat di messenger ha smesso di funzionare sul telefonino Smartphone e tablet 1
A [Javascript] [HTML] RISOLTO...Allungare un box all'apertura della pagina No Mouse over Javascript 9
ken_korn [Javascript][Risolto] browser.tab.Tabs.favIconUrl non funziona Javascript 5
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2

Discussioni simili