Newsgroup: it.comp.www.php
Titolo: newbie in difficoltà...

Ciao a tutti, stò realizzando un database Mysql i cui dati li faccio
interpretare al php innanzitutto per cercare di fare esperienza con questo
linguaggio e, per cercare di catalogare i miei centinaia di cd che vagano
per la mia camera.
tutto funziona correttamente per quanto riguarda l'inserimento e la
selezione dei dati tramite query con un solo parametro di ricerca.
Ora, per concludere il tuto stò creando una pagina di ricerca composta da
quattro caselle di testo entro le quali inserisco i parametri da ricercare,
li assegno alle rispettive variabili le quale a sua volta vengono passate
alla query.
Dunque, quà viene il difficile: ho la necessità di individuare quale siano
le caselle di testo vuote (almeno, spero che tutto questo abbia un senso...
;-)) piuttosto che quelle dove ho inserito i parametri per associagli la
rispettiva query.
Inizialmente avevo pensato di scrivere un codice simile a questo;
elseif ($titlo!=" " && $autore!=" " && $data<="0" && $tipo<="0") {
   $query = "select * FROM cd where (autore='$autore' AND
titolo='$titolo')";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
però mi sono reso subito conto che se lo metto singolarmente nella pagina
funziona ma se gli antepongo il seguente codice :
if ($titolo!=" " && $autore<="0" && $tipo<="0" && $data<="0") {
   $query = "SELECT * FROM cd where titolo='$titolo'";
    $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
che utilizzo per la query con un solo criterio di ricerca (moltiplicato per
4 che sono le diverse possibili variabili che posso riempire con il form)
non funziona più o meglio, mi restituisce sempre il risultato della query
con un solo criterio di ricerca.
1) Mi rendo conto che questo metodo sia molto ma molto macchinoso però non
c'è nessuno che sia in grado di aiutarmi???
2) In parole povere, come posso effettuare una ricera di con più
variabili???
3) Sono costretto ad eliminare le variabili che non vengono riempite perche
altrimenti andrebbe a cercarmi nel database i campi nulli oppure no???
4) Esiste un metodo meno macchinoso??? avevo pensato ad una sola query dove
inserivo tutte le variabili ma non mi ha funzionato....
5) Scusate se le mie conoscenze sul php sono scarse ma sono un autodidatta e
è solo da poche settimane che stò "studicchiando il php..."
Di veguito vi posto il codice dell'intera pagina...sperando che qualcuno mi
possa aiutare...grazie ciao!!!
<?
 include ('taghtml.inc.php');
 include ('config.inc.php');
apertura();
?>
<table align="center"><tr><td>
<?
if ($titolo!=" " && $autore<="0" && $tipo<="0" && $data<="0") {
   $query = "SELECT * FROM cd where titolo='$titolo'";
    $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore<="0" && $data<="0" && $tipo!=" ") {
   $query = "select * FROM cd where tipo='$tipo'";
    $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore<="0" && $data!=" " && $tipo<="0") {
   $query = "select * FROM cd where data='$data'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore!=" " && $data<="0" && $tipo<="0") {
   $query = "select * FROM cd where autore='$autore'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo!=" " && $autore!=" " && $data<="0" && $tipo<="0") {
   $query = "select * FROM cd where (autore='$autore' AND
titolo='$titolo')";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore<="0" && $data!=" " && $tipo!=" ") {
   $query = "select * FROM cd where data='$data AND tipo='$tipo'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo!=" " && $autore<="0" && $data!=" " && $tipo<="0") {
   $query = "select * FROM cd where titolo='$titolo AND data='$data'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo!=" " && $autore<="0" && $data<="0" && $tipo!=" ") {
   $query = "select * FROM cd where titolo='$titolo AND tipo='$tipo'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore!=" " && $data!=" " && $tipo<="0") {
   $query = "select * FROM cd where autore='$autore AND data='$data'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
elseif ($titlo<="0" && $autore!=" " && $data<="0" && $tipo!=" ") {
   $query = "select * FROM cd where autore='$autore AND tipo='$tipo'";
   $result = mysql_query($query, $db);
    while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." ".$row[2]."<br>");
    }
else print ('non ricerco per titolo'); ?>
</td></tr></table>
<? chiusura(); ?>


se vuoi fare una query dinamica puoi fare così:
if (trim($autore)=="") $condi1="AND autore=".addslashes($autore);
else $condi1="";
if (trim($titolo)=="") $condi2="AND titolo=".addslashes($titolo);
else $condi2="";
$query = "select * FROM cd where condizionefarlocca $condi1 $condi2";


ehm....grazie innanzituto per avermi risposto...volevo chiederti qualcosa a
riguardo:
 if (trim($autore)=="")
Il codice quà sopra controlla che la variabile $autore non sia vuota
giusto???
$condi1="AND autore=".addslashes($autore);
Il significato di questo proprio mi sfugge...
$query = "select * FROM cd where condizionefarlocca $condi1 $condi2";
al posto di condizionefarlocca cosa dovrei metterci???? ma le variabili
all'interno di una query non vanno sempre racchiuse dagli ' ????
Scusa se insisto ma mi piacerebbe capirci qualcosa....grazie ciao!


hai ragione ho cannato a scrivere dovevo scrivere:
$condi1="AND autore='".addslashes($autore)."'";
cmq se la variabile è un numero non servono gli apicini
ciaociao

Pav wrote:
parti con:
$query="select * from cd where 1 ";
poi man mano aggiungi le clausole alla stringa:
if ($autore!="") $query.="and autore like'%".$autore."%' ";
if ($titolo!="") $query.="and titolo like'%".$autore."%' ";
etc.etc.
poi esegui la query
$result=mysql_query($query);
e poi la visualizzi a tuo piacimento
ciao
Alesi_27

 altrimenti puoi metterne una farlocca tipo 1=1 (mi pare funzioni)
L' 1 semplice significa vero, quindi basta
where 1 and etc.etc.
ciao
Alesi_27

 
ovviamente nel copia incolla ho sbagliato :)
la riga giusta è ovviamente
if ($titolo!="") $query.="and titolo like'%".$titolo."%' ";
ciao
Alesi_27
(buona questa erbetta!)


avevo fatto lo stesso errore, solo che me ne ero accorto in tempo :-)
-- 
  /\/\/\
[scirio]
  ('_')        
http://scirio.altervista.org
 - Personal sitez
  /||\         
http://iccp.altervista.org
   - Real sitez
  _/\_

GRAZIE A TUTTI!!!!
Funziona tutto correttamente!!!!!!  ;-))))))))))))))))))))))
Ora sono in debito... ^__^
ciao!!!


Azz...ho parlato troppo presto, nel caso in cui la query non mi fornisca
alcun risultato come posso fagli stampare un messaggio di errore???
prima quando utilizzavo elseif (....) per ogni singolo criterio di ricerca
concludevo l'intero blocco con il seguente codice:
else print ('in base ai criteri inseriti non è stato possibile trovare alcun
record all'interno del database.');
e tutto funzionava a dovere....
ora come posso farlo???
inizialmente avevo pensato di inserire una cosa simile a questa appena dopo
la query:
if ($result == false) {
     print ('messaggio errore');
    exit;
 }
ma non funziona....avete altre idee con le quali illuminarmi???
ciao e ancora grazie a tutti!!!!
PS:
Alla fine ho optato per la seguente costruzione della query nella seguente
maniera...
<?
if (($titolo <=" ") &&  ($autore <=" ") && ($tipo <=" ")) {
header ("location: ricerca.php");
exit;}
 $query = "select * FROM cd WHERE 1 ";
  if (trim($autore!=" ")) $query.="and autore
like'%".addslashes($autore)."%'";
  if (trim($titolo!=" ")) $query.="and titolo
like'%".addslashes($titolo)."%'";
  if (trim($tipo!=" ")) $query.="and tipo like'%".addslashes($tipo)."%'";
  if (trim($data!=" ")) $query.="and data like'%".addslashes($data)."%'";
         $result = mysql_query($query, $db);
   while($row = mysql_fetch_row ($result))
    print ($row[0]." ".$row[1]." - ".$row[2]." - ".$row[3]."<br>");
 ?>

 
mysql_num_rows


  ?>
ciao
Alesi_27

 
il modo in cui "monti" i pezzi della stringa non và bene perchè devi 
lasciare uno spazio vuoto dopo ogni clausola, altrimenti viene fuori una 
stringa tipo:
select * from cd where 1 and autore like'%pippo%'and titolo like 
'%pappa%' etc.
quindi
if (trim($autore!=" ")) $query.="and autore
  like'%".addslashes($autore)."%' ";
if (trim($titolo!=" ")) $query.="and titolo
  like'%".addslashes($titolo)."%' ";
(nota lo spazio vuoto prima di chiudere il doppio apice)
ciao
Alesi_27

 >  ?>
Grazie di cuore, senza il tuo aiuto non ci sarei di certo riuscito, FUNZIONA
TUTTO ALLA MERAVIGLIA e cosa più importante è che ho capito il funzionamento
di questi script sempre grazie al tuo aiuto!!!...appena scirio mi ha postato
la funzione da utilizzare sono andato a vedere sul sito del php, avevo
capito a cosa serviva quella funzione ma non avendola applicata nella
maniera in cui l'hai usata tu non riuscivo a farlo andare...
Mi sono segnato tutto nel mio quadernone degli appunti...così se in futuro
mi capiterà ancora di dover eseguire un'operazione simile avrò tutto a
portata di mano!!!
Ancora grazie 1000000000000000!   ciao ciao!!!!

 
E' stato un piacere
ciao
Alesi_27