Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

usare le variabili in una query

4 views
Skip to first unread message

liftman

unread,
Jun 22, 2015, 10:33:40 AM6/22/15
to
Sicuramente sbaglio io, ma per quante prova abbia fatto non ne esco.

Ho questa query:

$query = " SELECT * FROM libri WHERE genere = 'giallo' ORDER BY data";

ed ho realizzato un form per poter scegliere il genere di titoli tra varie
scelte (giallo, horror, fantasy, ecc. ecc.). Però non sono riuscito a
capire come inserire la variabile ricevuta dal form nella query. Una cosa
così non funziona:

$query1 = " SELECT * FROM libri WHERE genere = $_REQUEST['genere'] ORDER
BY data";

e non funziona nemmeno assegnando il valore di $_REQUEST['genere'] ad una
variabile:

$genere = $_REQUEST['genere'];
$query1 = " SELECT * FROM libri WHERE genere = $_REQUEST['genere'] ORDER
BY data";

ho provato a mettere/togliere apici e doppi apici in tutte le combinazioni
possibili, ma gli unici cambiamenti sono stati messaggi di errore,
altrimenti ottengo una pagina bianca.

ovviamente la variabile viene correttamente valorizzata:

$genere = $_REQUEST['genere'];
echo 'risultato: ' . $genere;

mi ritorna "risultato: horror" (o una delle altre possibilità).

--
Fri(END), Boyfri(END), Girlfri(END), Bestfri(END). Everything has an END
except...Fam(ILY)! It Has 3 Letters that say I LOVE YOU

lluu...@gmail.com

unread,
Jun 23, 2015, 1:34:46 AM6/23/15
to
Ciao, la prima cosa che devi fare è stampare a video la query che generi, in questo modo puoi renderti conto dove sia il problema, andare a tentativi è utile solo per impazzire.
la prima cosa che noto nella tua concatenazione di stringhe è l'assenza degli apostrofi ' , mentre nella query statica(quella che funziona) sono presenti, nella concatenazione mancano.
la seconda cosa che noto è che dove crei prima la variabile (approccio corretto), poi non ne fai uso, nella concatenazione vedo lo stesso codice del primo esempio, se crei la variabile poi usala.
Sto scrivendo da cell e faccio una fatica bestia.

Se scrivi:
$bellazio='aaa';
$querystr="bla bla bla=$bellazio";
Il risultato sarà: "bla bla bla=aaa" mentre a te serve che venga creato "bla bla bla='aaa'".
Ciao ciao.

liftman

unread,
Jun 23, 2015, 7:33:49 AM6/23/15
to

<lluu...@gmail.com> ha scritto nel messaggio
news:809e0576-264b-42c5...@googlegroups.com...
> Ciao, la prima cosa che devi fare è stampare a video la query che generi,
> in questo modo puoi renderti conto dove sia il problema, andare a
> tentativi è utile solo per impazzire.

ma porca zozza... non ci avevo pensato a fare un "echo" per vedere cosa
veniva fuori...

> la prima cosa che noto nella tua concatenazione di stringhe è l'assenza
> degli apostrofi ' , mentre nella query statica(quella che funziona) sono
> presenti, nella concatenazione mancano.
> la seconda cosa che noto è che dove crei prima la variabile (approccio
> corretto), poi non ne fai uso, nella concatenazione vedo lo stesso codice
> del primo esempio, se crei la variabile poi usala.

la mancanza dell'uso della variabile è un refuso, ho incollato senza
guardare cosa incollavo...

avrei dovuto fare così ed avrebbe funzionato:

$genere = $_REQUEST['genere'];
$query1 = " SELECT * FROM libri WHERE genere = '$genere' ORDER BY data";

ho solo fatto un'asserzione errata, infatti pensavo che scrivendo la
variabile tra i singoli apici ( '$genere' ) non venisse interpolata, e
scrivendo così:

$query1 = " SELECT * FROM libri WHERE genere =" . " $genere" . " ORDER
BY data";

mi usciva un messaggio di errore...
Oggi ho imparato una cosa nuova :-)
Grazie per l'aiuto!

lluu...@gmail.com

unread,
Jun 24, 2015, 4:06:29 AM6/24/15
to
Ciao, mi permetto di darti un consiglio, adotta un buon ambiente di sviluppo.

Il mio consiglio è di usare Intellij, per la mia esperienza è il migliore.

Nel tuo caso ti avrebbe segnalato l'errore di sintassi e quasi sempre ti consiglia la soluzione.

Intellij, ha al suo interno tutti gli strumenti per lo sviluppo, potresti avere qualche difficoltà per abituarti all'uso, ma ne vale la pena.

Tornando a noi, la concatenazione la puoi fare in diversi modi.

Non prendere per oro colato quello che ti dirò, non programmo in php da un decennio.

una stringa può essere indicata sia così "lorem ipsum" che 'lorem ipsum', in entrambi i casi stampando le due stringhe avresti il seguente risultato

lorem ipsum

ma ipotizziamo di voler stampare a video la seguente stringa

io 'sono'

oppure

io "sono"

la stringa da creare per il primo caso è abbastanza facile "io 'sono'", la stringa è contenuta tra due (").
per il secondo caso? scrivendo ("io "sono"") come fa il linguaggio a capire dove inizia e finisce la stringa? il linguaggio capirebbe che c'è una stringa ("io ") una parola senza senso (sono) e in fine un'altra stringa ("").

il carattere (") è un carattere speciale e bisogna indicare esplicitamente che si tratta di un carattere da stampare e non un carattere speciale, per farlo bisogna usare (\) prima del carattere da che vuoi che venga interpretato come stringa, nel nostro caso bisognerà scrivere: ("io \"sono\"")

Buon lavoro.
0 new messages