query che non riesco a far funzionare

megarospo

Utente Attivo
25 Set 2007
147
0
0
Ho una query che non riesco a far funzionare correttamente.
Il risultato che voglio ottenere è che un utente non immetta nulla e ottenga tutti i record.
Ciò non avviene perché vengono esclusi quelli “NULL”.
Pensavo fosse banale ma non ci riesco! Sing!

Partiamo del form.
Questo ha solo tre campi.

<form action="editaoggetto2.php" method="post" enctype="multipart/form-data" name="formricerca" id="formricerca">
<label align="center"><div align="center">
<span class="oggettotesto">
<table align="center" style="text-align: left; width: 600px;" border="0"
cellpadding="2" cellspacing="2">
<tr>
<td colspan="1" rowspan="1" style="vertical-align: top;"><p align="left"><span class="oggettotestomedio"><strong>Ricerca</strong><br></p>

Nome Oggetto
<input name="nome" type="text" id="nome" size="50" />
</div>
</label>
<p align="left">
<label>Formato Oggetto
<select name="formato" id="formato">
<option value="%" selected>Tutti</option>
<option value="OGGETTO1">OGGETTO1</option>
<option value="OGGETTO2">OGGETTO2</option>
</select>
</label>
</p>
<p align="left">
<label>Descrizione Oggetto
<input name="descrizione" type="text" id="descrizione" size="50" />
</label>
</p></span>
<p align="left">
<label></label>
<label>
<input type="submit" name="Submit" value=" Ricerca " />
</label>
</td>
<tr>
</tr>
</table>
</form>





La query successiva è questa:
…..
if (isset($_POST['nome'])) {
$varnome_ricerca = (get_magic_quotes_gpc()) ? $_POST['nome'] : addslashes($_POST['nome']);
echo "<br> ----$varnome_ricerca----<br>";
}else {$varnome_ricerca = "%";}


if (isset($_POST['formato'])) {
$varformato_ricerca = (get_magic_quotes_gpc()) ? $_POST['formato'] : addslashes($_POST['formato']);
echo "<br> ----$varformato_ricerca----<br>";
}else {$varformato_ricerca= "%";}

$vardescrizione_ricerca = "%";
if (isset($_POST['descrizione'])) {
$vardescrizione_ricerca = (get_magic_quotes_gpc()) ? $_POST['descrizione'] : addslashes($_POST['descrizione']);
echo "<br> ----$vardescrizione_ricerca----<br>";
}
…..

$query_ricerca = "SELECT oggetto.id, oggetto.nome, oggetto.formato, oggetto.descrizione, oggetto.altrooggetto, user.nick, user.colore, user.dimensioni, user.email, user.altrouser FROM oggetto INNER JOIN user ON oggetto.id_user=user.id WHERE oggetto.nome LIKE '%$varnome_ricerca%' AND oggetto.formato LIKE '%$varformato_ricerca%' AND oggetto.descrizione LIKE '%$vardescrizione_ricerca%' AND oggetto.id_user LIKE '%$risultatoid%' ORDER BY oggetto.nome";

Ho dovuto togliere prima di SELECT, il “sprintf “. Mi dava degli errori. (parametri insufficienti)

Da cosa può dipendere? Come devo impostare la query?
Mille grazie per l’aiuto.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
potresti con una serie di if costruirti la clausola whwre, es.

f($_POST['nome']==""){
$clausola="";// li cerca tutti
}else{//io ho messo else, ma se servono ifelse
$clausola=" WHERE pinco='".$_POST['nome']."'";
}

poi la query diventa

$query_ricerca = "SELECT oggetto.id,ecc ecc ".$clausola." ORDER BY oggetto.nome";

qundi ti costruisci il where in funzione dei vari input
 

megarospo

Utente Attivo
25 Set 2007
147
0
0
Si! Ci avevo pensato ma mi è sembrata una strada non corretta.
Capisci? intendo dire che la soluzione che hai proposto è valida, ma io vorrei capire se è possibile ottenere il risultato direttamente tramite query. Se sono io che sbaglio ad impostarla o proprio non ce modo di farla.
Teoricamente sembrava semplice.
Pensavo: se nel campo 'nome' trovi una corrispondenza, AND se nel campo 'formato' trovi una corrispondenza AND nel campo 'descrizione' trovi una corrispondenza, stampa il risultato della ricerca.
Il punto del problema è che per la query un campo vuoto, che da origine a sua volta ad una variabile vuota ( $variabile = "" ) non corrisponde a NULL.

Per informazione ho provato a trasformare la variabile vuota in altre cose tipo:

if($_POST['nome']==""){
$clausola="NULL";}

oppure

if($_POST['nome']==""){
$clausola="%";} // che dovrebbe corrispondere a "cerca tutto" giusto?

ma non ha funzionato!
Ciao!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
forse avevo capito male, intendi dire che (vedo il campo in grassetto nella quary)

...$varformato_ricerca%' AND oggetto.descrizione LIKE '%$vardescrizione_ricerca%' AND oggetto.id_user LIKE ...

quindi ti riferisci al campo che può essere vuoto? e qundi la like non funzia?

non postrest mettere un OR

...$varformato_ricerca%' AND (oggetto.descrizione LIKE '%$vardescrizione_ricerca%' OR oggetto.descrizione='') AND oggetto.id_user LIKE ...
 

megarospo

Utente Attivo
25 Set 2007
147
0
0
Si. Avevo provato ma non funzionava correttamente. Comunque ne ho provate talmente tante e una in fila all'altra che non escudo che abbia fatto confusione e piccoli errori. Appena ho un pò di tranquillità ci riprovo con calma. Grazie mille :book:
 

megarospo

Utente Attivo
25 Set 2007
147
0
0
Nopn ho resistito e ho dovuto provare subito :)

Questa è la query. Purtroppo confermo che non mi funziona.
Intendiamoci, non da nessun errore, ma esclude i record dove il campo descrizione è NULL. :confused:

$query_ricerca = "SELECT oggetto.id, oggetto.nome, oggetto.descrizione, user.nick, user.email, FROM oggetto INNER JOIN user ON oggetto.id_user=user.id WHERE oggetto.nome LIKE '%$varnome_ricerca%' AND (oggetto.descrizione LIKE '%$vardescrizione_ricerca%' OR oggetto.descrizione='') AND oggetto.id_user LIKE '%$risultatoid%' ORDER BY oggetto.nome";

Ciao
 

megarospo

Utente Attivo
25 Set 2007
147
0
0
Ho trovato la soluzione.
questa è la chiave del problema:
AND (oggetto.descrizione LIKE '%$vardescrizione_ricerca%' OR oggetto.descrizione IS NULL)

quindi ...OR oggetto.descrizione IS NULL)... va scritto senza il segno uguale e senza apici.

Grazie per l'aiuto!! :book:

P.S. MI CORREGO.
Così impostata, la query restituisce "sempre" i record dove 'descrizione' è "null".
Visto il particolare modo di scrivere sulla query la caratteristica 'IS NULL' inizio proprio a pensare che l'unica soluzione sia applicare un 'if' fuori dalla query che ne modifichi dinamicamente il contenuto a seconda che l'utente inserisca nel campo 'descrizione', un dato oppure no.
per farla breve così:

if (isset($_POST[descrizione]))
{
$var_descrizione = (get_magic_quotes_gpc()) ? $_POST['descrizionea'] : addslashes($_POST['descrizione' ]);
if ($var_descrizione=='')
{ $testo_query="oggetto.descrizione IS NULL";} else{$testo_query="oggetto.descrizione LIKE '%$var_descrizione_ricerca%'"}
}

e poi inserisco '$testo_query' dentro la query.
secondo voi c'è un'altra soluzione?
 
Ultima modifica:

megarospo

Utente Attivo
25 Set 2007
147
0
0
Anche questa soluzione da dei problemi. In particolare con la paginazione. Al click per richiamare la seconda pagina non viene valorizzata la variabile che si inserisce nella query e viene mostrato un errore.
Secondo voi come posso superare questo altro problema?
P.s. per la paginazione uso il codice dell'articolo di scritto da Claudio Garau il 01/11/2007 "Gestire la paginazione dei records di MySQL con una classe PHP"

:book:
 

codesurfer

Nuovo Utente
13 Feb 2008
16
3
0
scusate l'intromissione, non suggerisco soluzioni perchè non ho capito bene quale sia il problema, però mi pare che qui si parli di null come di valore vuoto equiparandoli.
La differenza tra una variabile vuota e una nulla è moooolto grande in qualsiasi linguaggio.
Una variabile vuota è definita e non valorizzata, una nulla non è definita.
Il principio vale anche in SQL e, ad ogni modo è sicuro che al 100% una query del tipo
Codice:
SELECT campo FROM tab WHERE (campo='valore' OR campo IS NULL)
restituisce SIA i campi col valore impostato, SIA i campi nulli.

Per quello che dicevo prima attenzione che 'campo IS NULL' è molto diverso da 'campo=""'.
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Query UPDATE che non mi aggiorna campi seconda tabella PHP 3
T PHP: aggiunta a query che non so fare... PHP 2
S Il metodo $.getJSON() e <select> che non si popola di dati per query troppo grandey Ajax 0
helpdesk Query di UPDATE che non funziona :O PHP 6
S semplice query che non funziona :( PHP 3
M Query in access che non parte MS Access 0
A nome file che contiene punto passato come parametro a query PHP 31
D [PHP] Query che aggiorna tabella PHP 4
D PHP:funzione che opera una query su argomento PHP 8
A jbutton che esegue una query mysql in netbeans Java 1
I Riga tabella HTML creata con cicli PHP e Query Sql che restituisca un campo se si clicca la Riga PHP 4
Z variabile php che raccoglie molti ID e li passa a un'altra query PHP 10
S form che invia la query ogni volta che si rinfresca la pagina PHP 2
G Query che esporta file Database 0
V funzione che esegue query PHP 9
D Combo che passa dati query ad input "hidden" PHP 15
G AVVISO QUERY IN ESECUZIONE PHP 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
S Selezionare ultimo record di una sotto query MySQL 26
G Menù a tendina di ricerca con query PHP 1
V Query per una somma PHP 2
F stampare a video i risultati della query PHP 1
L problema con query select PHP 2
D Query sum Database 1
A form PHP prenotazione tramite query PHP 2
R Problema query con ricerca id numerico PHP 2
G Casella combinata in una query MS Access 4
R Aiuto con le query MS Access 2
Y query di DELETE PHP 4
V Query Oracle Oracle 0
L query somma PHP 8
W Query SQL Classic ASP 2
M Problemi con query a più tabelle PHP 3
Alex_70 Conteggio nella query PHP 0
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
F query e form con select multipla PHP 17
M Problema su query JOIN in tre tabelle PHP 0
M Ordinare una query join PHP 2
Alex_70 Query ORDER BY PHP 18
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
Alex_70 foreach explode query PHP 3
O query con date in formato stringa PHP 3
Tommy03 Unione query di 4 tabelle MySQL 1
Alex_70 Query group actor e film PHP 26
TpD Incolonnare risultati query (mysql_result deprecato...) PHP 3
Tommy03 Query tra 3 tabelle MySQL 2
P Query di ricerca profonda MySQL 0
T Query per ricerca ritardo evento MS Access 7
max1974 2 query not work MySQL 3

Discussioni simili