Query che non va

di il
4 risposte

Query che non va

Salve a tutti,
sto impazzendo appresso a un problema veramente stupido su una query.
In pratica, si svolge tutto nella pagina query.php: se isset($_GET['sar']), allora vuol dire che sto facendo una ricerca.
I casi sono 2:
- Se sar==0 -> visualizzo il form di ricerca
- Se sar==1 -> visualizzo i risultati
Ecco il codice:

<?php
if (isset($_GET['sar'])){
		if($_GET['sar']==1){
			if (isset($_GET['titolo'])) $ttt = "".$_GET['titolo']; else $ttt="gioco";
			if (isset($_GET['annomin'])) $iii = (int)($_GET['annomin']); else $iii=0;
			if (isset($_GET['annomax'])) $mmm = (int)($_GET['annomax']); else $mmm=3000;
			if (isset($_GET['votomin'])) $nnn = (int)($_GET['votomin']); else $nnn=1;
			if (isset($_GET['votomax'])) $xxx = (int)($_GET['votomax']); else $xxx=10;
			//echo $ttt." ".$iii." ".$mmm." ".$nnn." ".$xxx; I PARAMETRI PASSATI LI VISUALIZZA CORRETTAMENTE
			$riga = $data->query("SELECT il.id_libro, il.titolo, il.pagine, il.voto, il.copertina FROM infolibri il WHERE il.titolo LIKE '%".$ttt."%' AND il.anno BETWEEN '".$iii."' AND '".$mmm."' AND il.voto BETWEEN '".$nnn."' AND '".$xxx."' ORDER BY il.id_libro DESC LIMIT ".$primo.",".$per_page);		
	} else if ($_GET['sar']==0){ ?>
			<div id='page' class='textimage'><form id='search' action='query.php?sar=1' method='get' enctype='multipart/form-data'>
	<input type='hidden' name='sar' id='sar' value='1' />
	<table class='searchtable'>
		<tr><td><b>Titolo </b></td><td><input type='text' name='titolo' id='titolo' size='50'></td></tr>
		<!-- <tr><td><b>Autore </b></td><td><input type='text' name='autore' id='autore' size='50'></td></tr> -->
		<tr><td><b>Anno compreso tra </b></td><td><input type='text' name='annomin' id='annomin' size='4'>
		 e <input type='text' name='annomax' id='annomax' size='4'></td></tr>
		<!--<tr><td><b>Genere </b></td><td><input type='text' name='' size='50'></td></tr>-->
		<tr><td><b>Voto compreso tra </b></td><td>
			<select name='votomin' id='votomin' size='1' tabindex='1'>
					<option selected>1</option>
					<option>2</option>
					<option>3</option>
					<option>4</option>
					<option>5</option>
			</select><b> e </b>
			<select name='votomax' id='votomax' size='1' tabindex='1'>
					<option>1</option>
					<option>2</option>
					<option>3</option>
					<option>4</option>
					<option selected>5</option>
			</select></td></tr>
		<tr><td><input type='submit' value='Cerca!' /></td><td></td></tr>
		</table>
	</form>
	</div> <?php
	}
}
?>
Il problema, probabilmente, sta nell'assegnazione dei parametri passati alle variabili, perchè se manualmente digito l'url compreso di query.php?sar=1, mi si vedono tutti i libri che nel titolo contengono la parola "gioco".
Inoltre, se faccio un echo di ciò che ho passato, mi si vede, però la query non la fa lo stesso, la schermata resta bianca!

4 Risposte

  • Re: Query che non va

    Allora, ho parzialmente risolto.
    Io scrivevo nella pagina query.php:
    <form id='search' [b]action='query.php?sar=1'[/b] method='get' enctype='multipart/form-data'>
    Mi è bastato sostituirlo con:
    <form id='search' [b]action='?sar=1'[/b] method='get' enctype='multipart/form-data'>
    E adesso va.
    Mi sembra assurdo, ma non mi sembra di aver fatto altre modifiche.

    Ora il problema è un altro!
    Se riempio tutti i campi non c'è alcun problema, se ne lascio uno vuoto, non va.
    Premetto, quello che vedo nell'url è la seguente cosa:
    ?sar=1&titolo=Misery&annomin=&annomax=&votomin=1&votomax=10
    Io penso che non gli piaccia proprio il fatto che non ci siano valori da qualche parte.

    Come soluzione non credo che ci siano alternative all'uso di javascript per inviare parametri riempiti come dico io, cioè se annomin o annomax non sono inseriti o non sono numeri, passo 0 come annomin e 3000 come annomax.
    Ma, come fare se non viene inserita la stringa del titolo? Cioè, esiste un modo per passare la stringa vuota?
  • Re: Query che non va

    if (isset($_GET['titolo'])) $ttt = "".$_GET['titolo']; else $ttt="gioco";
    Questo è un portone spalancato per SQL-injection, meglio prestare attenzione sempre ai paramentri passati dagli utenti ed usati direttamente nelle query.
    Io suggerirei o di curare un po' la "pulizia" dei dati passati dagli utenti, oppure di usare dei prepared statement in modo da correre meno rischi.

    Sul come fare quando il titolo è vuoto, puoi semplicemente non aggiungere il pezzo di query se $_GET['titolo'] è vuoto.
    $riga = $data->query("SELECT il.id_libro, il.titolo, il.pagine, il.voto, il.copertina FROM infolibri il WHERE " . (trim($ttt) != '' ? "il.titolo LIKE '%".$ttt."%' AND " : "") . il.anno BETWEEN '".$iii."' AND '".$mmm."' AND il.voto BETWEEN '".$nnn."' AND '".$xxx."' ORDER BY il.id_libro DESC LIMIT ".$primo.",".$per_page);
  • Re: Query che non va

    emanuele45 ha scritto:


    if (isset($_GET['titolo'])) $ttt = "".$_GET['titolo']; else $ttt="gioco";
    Questo è un portone spalancato per SQL-injection, meglio prestare attenzione sempre ai paramentri passati dagli utenti ed usati direttamente nelle query.
    Io suggerirei o di curare un po' la "pulizia" dei dati passati dagli utenti, oppure di usare dei prepared statement in modo da correre meno rischi.
    In che senso è un portone spalancato per SQL-injection?
    Puoi spiegarmi come dovrei fare?
  • Re: Query che non va

    ultrasound91 ha scritto:


    E' spiegato in modo semplice qui.
    Grazie!
Devi accedere o registrarti per scrivere nel forum
4 risposte