Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > it.comp.www.php > #22552 > unrolled thread
| Started by | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| First post | 2019-02-13 12:28 +0100 |
| Last post | 2019-02-21 14:38 +0100 |
| Articles | 20 on this page of 43 — 4 participants |
Back to article view | Back to it.comp.www.php
operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-13 12:28 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-13 16:11 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-13 12:30 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 11:30 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 10:42 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 11:48 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 10:54 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 12:00 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 16:23 +0100
Re: operatore jolly mysql logica mente <npaolini_no_spam_@ennepisoft.it> - 2019-02-14 16:57 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:11 +0000
Re: operatore jolly mysql logica mente <npaolini_no_spam_@ennepisoft.it> - 2019-02-14 18:41 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 17:21 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:48 +0000
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 16:05 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 17:41 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 17:08 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-14 18:25 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-14 21:28 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 11:01 +0100
Re: operatore jolly mysql Alessandro Pellizzari <shuriken@amiran.it> - 2019-02-15 16:56 +0000
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 18:47 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 19:41 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 13:01 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 15:35 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 16:18 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 12:47 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 14:07 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 15:08 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 15:41 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 07:44 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 17:28 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 10:27 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-15 20:15 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-15 11:37 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-16 16:02 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 12:21 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-21 04:33 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 14:37 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 16:27 +0100
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 12:39 +0100
Re: operatore jolly mysql fmigliori <fmigliori@gmail.com> - 2019-02-21 04:43 -0800
Re: operatore jolly mysql Enrico Maria Chellini <bitit@bitit.it> - 2019-02-21 14:38 +0100
Page 1 of 3 [1] 2 3 Next page →
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-13 12:28 +0100 |
| Subject | operatore jolly mysql |
| Message-ID | <20190213122856.517154c6@nntp.aioe.org> |
esiste un operatore jolly mysql che mi restituisca tutti i risultati?
perchè ho da creare una serie di selezioni tipo WHERE a=$a AND b=$b
AND c=$c
vorrei fare in maniera che son non ho un GET relativo specifico
$_GET[a] mi dia tutto quello che c'è in a=?
una sorta di:
if (isset($_GET[a]) { $a=$_GET[a]; }
else{ $a=CARATTERE_JOLLY; }
mi semplificherebbe molto il codice :)
Enrico
[toc] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-13 16:11 +0100 |
| Message-ID | <20190213161104.046da42f@nntp.aioe.org> |
| In reply to | #22552 |
Il giorno Wed, 13 Feb 2019 12:28:56 +0100
Enrico Maria Chellini <bitit@bitit.it> ha scritto:
> esiste un operatore jolly mysql che mi restituisca tutti i risultati?
>
>
> perchè ho da creare una serie di selezioni tipo WHERE a=$a AND b=$b
> AND c=$c
>
>
>
> vorrei fare in maniera che son non ho un GET relativo specifico
> $_GET[a] mi dia tutto quello che c'è in a=?
>
> una sorta di:
> if (isset($_GET[a]) { $a=$_GET[a]; }
> else{ $a=CARATTERE_JOLLY; }
>
> mi semplificherebbe molto il codice :)
>
> Enrico
>
Posso utilizzare LIKE % ma non mi sembra corretto quando poi richiedo un
risultato esatto.
o sbaglio?
Enrico
[toc] | [prev] | [next] | [standalone]
| From | fmigliori <fmigliori@gmail.com> |
|---|---|
| Date | 2019-02-13 12:30 -0800 |
| Message-ID | <bf2560e2-311c-4544-9803-c40e731287be@googlegroups.com> |
| In reply to | #22553 |
Il giorno mercoledì 13 febbraio 2019 16:11:06 UTC+1, Enrico Maria Chellini ha scritto:
> Il giorno Wed, 13 Feb 2019 12:28:56 +0100
> Enrico Maria Chellini <bitit@bitit.it> ha scritto:
>
> > esiste un operatore jolly mysql che mi restituisca tutti i risultati?
> >
> >
> > perchè ho da creare una serie di selezioni tipo WHERE a=$a AND b=$b
> > AND c=$c
> >
> >
> >
> > vorrei fare in maniera che son non ho un GET relativo specifico
> > $_GET[a] mi dia tutto quello che c'è in a=?
> >
> > una sorta di:
> > if (isset($_GET[a]) { $a=$_GET[a]; }
> > else{ $a=CARATTERE_JOLLY; }
> >
> > mi semplificherebbe molto il codice :)
> >
> > Enrico
> >
>
> Posso utilizzare LIKE % ma non mi sembra corretto quando poi richiedo un
> risultato esatto.
>
> o sbaglio?
>
> Enrico
Non dovrebbe. Se fai "nome like 'enrico'" diventa equivalente ad un =.
Però fattelo dire, come scorciatoia è davvero bruttina :p
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 11:30 +0100 |
| Message-ID | <20190214113023.4c7665b5@nntp.aioe.org> |
| In reply to | #22554 |
> > > > Posso utilizzare LIKE % ma non mi sembra corretto quando poi > > richiedo un risultato esatto. > > > > o sbaglio? > > > > Enrico > > Non dovrebbe. Se fai "nome like 'enrico'" diventa equivalente ad un =. > Però fattelo dire, come scorciatoia è davvero bruttina :p appunto; l'alternativa è riscrivere la query ogni volta che cambiano i valori di richiesta dalla form; esempio il cliente è interessato alla piscina allora flagga il ratio della piscina -> riscrivo la query sto cercando la maniera di scrivere una query sola che mi dia tutti i risultati se non specificatamente richiesti alcuni parametri. se voglio mettere tutto con prepare-> (query) riscrivendo ogni query per ogni selezione il codice che ne viene fuori un bel po' più lungo. sto appunto cercando qualche suggerimento. Enrico
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 10:42 +0000 |
| Message-ID | <gckv04F8uu0U1@mid.individual.net> |
| In reply to | #22555 |
On 14/02/2019 10:30, Enrico Maria Chellini wrote: > sto cercando la maniera di scrivere una query sola che mi dia tutti i > risultati se non specificatamente richiesti alcuni parametri. > > se voglio mettere tutto con prepare-> (query) riscrivendo ogni > query per ogni selezione > il codice che ne viene fuori un bel po' più lungo. Non esiste. Per questo da 30 anni la gente scrive query builders e ORMs :) Bye.
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 11:48 +0100 |
| Message-ID | <20190214114846.248af45e@nntp.aioe.org> |
| In reply to | #22556 |
Il giorno Thu, 14 Feb 2019 10:42:04 +0000 Alessandro Pellizzari <shuriken@amiran.it> ha scritto: > ORMs appunto.. e se la scrivo bruttina con LIKE % quale sono le contro indicazioni a parte l'estetica? di cui sinceramente me ne sono sempre poco interessato. Enrico
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 10:54 +0000 |
| Message-ID | <gckvn6F934qU1@mid.individual.net> |
| In reply to | #22557 |
On 14/02/2019 10:48, Enrico Maria Chellini wrote: > appunto.. e se la scrivo bruttina con LIKE % quale sono le contro > indicazioni a parte l'estetica? di cui sinceramente me ne sono sempre > poco interessato. Dipende dall'engine, ma quando usi LIKE attivi il partial match sulla stringa, che potrebbe bypassare gli indici e quindi massacrarti le prestazioni. Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per qualche mezz'ora ad ogni query. Bye.
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 12:00 +0100 |
| Message-ID | <20190214120055.4b5f1b19@nntp.aioe.org> |
| In reply to | #22558 |
> Dipende dall'engine, ma quando usi LIKE attivi il partial match sulla > stringa, che potrebbe bypassare gli indici e quindi massacrarti le > prestazioni. > > Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per > qualche mezz'ora ad ogni query. > > Bye. Quello che sospettavo . ci saranno un migliaio di record al massimo; ma cercherò di scrivere qualcosa di esteticamente migliore e più funzionale Grazie ancora Enrico
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 16:23 +0100 |
| Message-ID | <20190214162342.51129c53@nntp.aioe.org> |
| In reply to | #22559 |
Il giorno Thu, 14 Feb 2019 12:00:55 +0100 Enrico Maria Chellini <bitit@bitit.it> ha scritto: > > Dipende dall'engine, ma quando usi LIKE attivi il partial match > > sulla stringa, che potrebbe bypassare gli indici e quindi > > massacrarti le prestazioni. > > > > Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per > > qualche mezz'ora ad ogni query. > > > > Bye. > > Quello che sospettavo . > ci saranno un migliaio di record al massimo; ma cercherò di scrivere > qualcosa di esteticamente migliore e più funzionale > > Grazie ancora > Enrico > In pratica, per fare un esempio, se ho le relative opzioni |provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc. dovrò scrivere una query per ogni combinazione richiesta o sbaglio? cosa mi son perso?
[toc] | [prev] | [next] | [standalone]
| From | logica mente <npaolini_no_spam_@ennepisoft.it> |
|---|---|
| Date | 2019-02-14 16:57 +0100 |
| Message-ID | <q4434c$1p88$1@gioia.aioe.org> |
| In reply to | #22560 |
Il 14/02/2019 16:23, Enrico Maria Chellini ha scritto:
> Il giorno Thu, 14 Feb 2019 12:00:55 +0100
> Enrico Maria Chellini <bitit@bitit.it> ha scritto:
>
>>> Dipende dall'engine, ma quando usi LIKE attivi il partial match
>>> sulla stringa, che potrebbe bypassare gli indici e quindi
>>> massacrarti le prestazioni.
>>>
>>> Se hai 100 elementi nel DB chissene. Se ne hai milioni aspetti per
>>> qualche mezz'ora ad ogni query.
>>>
>>> Bye.
>>
>> Quello che sospettavo .
>> ci saranno un migliaio di record al massimo; ma cercherò di scrivere
>> qualcosa di esteticamente migliore e più funzionale
>>
>> Grazie ancora
>> Enrico
>>
>
> In pratica, per fare un esempio, se ho le relative opzioni
> |provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc.
>
> dovrò scrivere una query per ogni combinazione richiesta o sbaglio?
>
> cosa mi son perso?
>
>
puoi scrivere qualcosa di simile ...
----------
$all = array(
array('provincia', 'prov'),
array('camere', 'camere'),
);
$conc = '';
$q = ' WHERE ';
foreach($all as $item) {
if(isset($_GET[$item[1]])) {
$q .= $conc . $item[0]. '=' . $_GET[$item[1]];
$conc = ' AND ';
}
}
if('' == $conc) {
// nessun valore
}
--------
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 16:11 +0000 |
| Message-ID | <gcli9oFd31aU1@mid.individual.net> |
| In reply to | #22561 |
On 14/02/2019 15:57, logica mente wrote: > $q .= $conc . $item[0]. '=' . $_GET[$item[1]]; Occhio che questa è una SQL injection in attesa di esplodere. :) Ma mi hai fatto notare un bug nel mio codice: se non ci sono condizioni la mia query fallisce. Bisogna attaccare la parte `where` solo se $wheres non è vuoto. Bye.
[toc] | [prev] | [next] | [standalone]
| From | logica mente <npaolini_no_spam_@ennepisoft.it> |
|---|---|
| Date | 2019-02-14 18:41 +0100 |
| Message-ID | <q4497c$mu2$1@gioia.aioe.org> |
| In reply to | #22563 |
Il 14/02/2019 17:11, Alessandro Pellizzari ha scritto: > On 14/02/2019 15:57, logica mente wrote: > >> $q .= $conc . $item[0]. '=' . $_GET[$item[1]]; > > Occhio che questa è una SQL injection in attesa di esplodere. :) > > Ma mi hai fatto notare un bug nel mio codice: se non ci sono condizioni > la mia query fallisce. Bisogna attaccare la parte `where` solo se > $wheres non è vuoto. > > Bye. > Si, era giusto per una linea guida di come preparare la query per attaccare solo le variabili valorizzate
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 17:21 +0100 |
| Message-ID | <20190214172125.6d7243c6@nntp.aioe.org> |
| In reply to | #22561 |
>
> puoi scrivere qualcosa di simile ...
> ----------
> $all = array(
> array('provincia', 'prov'),
> array('camere', 'camere'),
> );
> $conc = '';
> $q = ' WHERE ';
> foreach($all as $item) {
> if(isset($_GET[$item[1]])) {
> $q .= $conc . $item[0]. '=' . $_GET[$item[1]];
> $conc = ' AND ';
> }
> }
> if('' == $conc) {
> // nessun valore
> }
> --------
>
Capisco quello che hai scritto, ma come l'inserisco dentro una query con
pdo e prepare?
tipo questa :
$sformloc = $ndb->prepare('SELECT * FROM ( articoli INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
articoli.idArticoli=bookings_items.id_ref_external WHERE
online=:online AND categoria=:categoria GROUP BY
provincia,comune ');
$sformloc->bindParam(':online', $online, PDO::PARAM_INT);
$sformloc->bindParam(':categoria', $categoria,
PDO::PARAM_INT); $sformloc->execute();
Hai qualche link dove possa studiarmi qualche esempio?
perchè il problema rimane prevenire sqlinjection.
Enrico
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 16:48 +0000 |
| Message-ID | <gclkf5Fdk1gU1@mid.individual.net> |
| In reply to | #22564 |
On 14/02/2019 16:21, Enrico Maria Chellini wrote:
> $sformloc = $ndb->prepare('SELECT * FROM ( articoli INNER JOIN
> luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
> articoli.idArticoli=bookings_items.id_ref_external WHERE
> online=:online AND categoria=:categoria GROUP BY
> provincia,comune ');
La query è una stringa. La puoi costruire come ho detto io. Ti basta
prendere questo pezzo:
WHERE online=:online AND categoria=:categoria
e costruirlo come ho fatto io. Poi lo infili lì in mezzo. Il resto mi
pare ti serva tutto.
Il codice che ho scritto è giusto al 99%. Ci sarà forse qualche syntax
error o simile, ma dovrebbe quasi funzionare così com'è. :)
Se devi costruire query più complicate (tipo: devi selezionare le join o
i group by in base ai parametri) diventa un problema.
> $sformloc->bindParam(':online', $online, PDO::PARAM_INT);
> $sformloc->bindParam(':categoria', $categoria,
> PDO::PARAM_INT); $sformloc->execute();
Puoi passare i binding a `->execute()` direttamente senza dover fare il
`bindParam` uno per uno, come ho fatto io sopra.
> perchè il problema rimane prevenire sqlinjection.
Usando i placeholder di PDO sei già a posto da questo punto di vista.
Bye.
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 16:05 +0000 |
| Message-ID | <gclhusFd1r8U1@mid.individual.net> |
| In reply to | #22560 |
On 14/02/2019 15:23, Enrico Maria Chellini wrote:
> In pratica, per fare un esempio, se ho le relative opzioni
> |provincia|località|categoria|camere|cucina|bagno|ariacondizionata|piscina|forno|tv|etc.
>
> dovrò scrivere una query per ogni combinazione richiesta o sbaglio?
>
> cosa mi son perso?
Io costruisco le query dinamicamente. Esempio al volo senza test:
function search($prov, $loc, $cat, $camere, ...) {
$wheres = [];
if (!is_null($prov)) {
$wheres['provincia'] = $prov;
}
if (!is_null($loc)) {
$wheres['località'] = $loc;
}
...
$query = "select * from dati where ";
$query .= implode(
' and ',
array_map(
function($k) { return $k . '= :' .$k; },
$wheres
)
);
$stmt = $this->pdo->prepare($query);
$res = $stmt->execute($wheres);
// o qualcosa del genere
return $res;
}
Bye.
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 17:41 +0100 |
| Message-ID | <20190214174108.2abed106@nntp.aioe.org> |
| In reply to | #22562 |
> Io costruisco le query dinamicamente. Esempio al volo senza test:
>
> function search($prov, $loc, $cat, $camere, ...) {
> $wheres = [];
>
> if (!is_null($prov)) {
> $wheres['provincia'] = $prov;
> }
> if (!is_null($loc)) {
> $wheres['località'] = $loc;
> }
> ...
>
> $query = "select * from dati where ";
> $query .= implode(
> ' and ',
> array_map(
> function($k) { return $k . '= :' .$k; },
> $wheres
> )
> );
>
> $stmt = $this->pdo->prepare($query);
> $res = $stmt->execute($wheres);
> // o qualcosa del genere
>
> return $res;
> }
>
Più chiaro .
ma hai pulito le variabili $prov, $loc, $cat, $camere ... ?
altrimenti si potrebbe annidare li dentro un sqlinjection o sbaglio?
Enrico
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 17:08 +0000 |
| Message-ID | <gclljtFdrheU1@mid.individual.net> |
| In reply to | #22565 |
On 14/02/2019 16:41, Enrico Maria Chellini wrote: > ma hai pulito le variabili $prov, $loc, $cat, $camere ... ? > > altrimenti si potrebbe annidare li dentro un sqlinjection o sbaglio? No. I placeholder PDO servono proprio a quello: fanno l'escape automaticamente in base al motore SQL che hai sotto. Bye.
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-14 18:25 +0100 |
| Message-ID | <20190214182513.6b05fdb3@nntp.aioe.org> |
| In reply to | #22567 |
Il giorno Thu, 14 Feb 2019 17:08:13 +0000
Alessandro Pellizzari <shuriken@amiran.it> ha scritto:
> On 14/02/2019 16:41, Enrico Maria Chellini wrote:
>
> > ma hai pulito le variabili $prov, $loc, $cat, $camere ... ?
> >
> > altrimenti si potrebbe annidare li dentro un sqlinjection o
> > sbaglio?
>
> No. I placeholder PDO servono proprio a quello: fanno l'escape
> automaticamente in base al motore SQL che hai sotto.
>
> Bye.
>
premesso che provo la soluzione che mi hai suggerito,
""tanto per farmi fucilare ""
questa qui sotto sarebbe comunque a rischio sqlinjection o
sarebbe sicura?
----------
if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
{ $provincia=$_GET['provincia'];
//per paranoia pulisco la stringa
$provincia=trim($provincia);
$provincia=addslashes($provincia);
$provincia=htmlspecialchars($provincia);
$provincia=substr($provincia, 0, 2);
//creo la condizione nel caso sia arrivata la richiesta della provincia
$cond01=" AND provincia='".$provincia."'";
}
//altrimenti la condizione non esiste
else { $provincia=""; $cond01=""; }
$sformloc = $n2qdb->prepare('SELECT * FROM ( articoli INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
articoli.idArticoli=bookings_items.id_ref_external WHERE online=:online AND categoria=:categoria
//inserisco la condizione nella query se esiste
'.$cond01.'
GROUP BY provincia,comune ');
$sformloc->bindParam(':online', $online, PDO::PARAM_INT);
$sformloc->bindParam(':categoria', $categoria, PDO::PARAM_INT);
$sformloc->execute();
------------------------------------
Funzionare funziona, ma non so quanto sia sicura.
Enrico
[toc] | [prev] | [next] | [standalone]
| From | Alessandro Pellizzari <shuriken@amiran.it> |
|---|---|
| Date | 2019-02-14 21:28 +0000 |
| Message-ID | <gcm4sqFh6tdU1@mid.individual.net> |
| In reply to | #22568 |
On 14/02/2019 17:25, Enrico Maria Chellini wrote:
> if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
> { $provincia=$_GET['provincia'];
Ok
> //per paranoia pulisco la stringa
> $provincia=trim($provincia);
Ok
> $provincia=addslashes($provincia);
> $provincia=htmlspecialchars($provincia);
Questi due non servono.
> $provincia=substr($provincia, 0, 2);
Ok
> //creo la condizione nel caso sia arrivata la richiesta della provincia
> $cond01=" AND provincia='".$provincia."'";
Questo è a rischio SQL injection, anche se in realtà troncandolo rischi
poco.
Passa SEMPRE le variabili tramite parametri a PDO. Non concatenare mai
stringhe. Non fare mai specialchars, addslashes o roba del genere.
> $sformloc = $n2qdb->prepare('SELECT * FROM ( articoli INNER JOIN
> luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON
> articoli.idArticoli=bookings_items.id_ref_external WHERE online=:online AND categoria=:categoria
> //inserisco la condizione nella query se esiste
> '.$cond01.'
> GROUP BY provincia,comune ');
> $sformloc->bindParam(':online', $online, PDO::PARAM_INT);
> $sformloc->bindParam(':categoria', $categoria, PDO::PARAM_INT);
> $sformloc->execute();
Bye.
[toc] | [prev] | [next] | [standalone]
| From | Enrico Maria Chellini <bitit@bitit.it> |
|---|---|
| Date | 2019-02-15 11:01 +0100 |
| Message-ID | <20190215110119.6a1511c2@nntp.aioe.org> |
| In reply to | #22570 |
>
> > $provincia=addslashes($provincia);
> > $provincia=htmlspecialchars($provincia);
>
> Questi due non servono.
in verità ho trovato in diversi toutorial addslashes ;
htmlspecialchars in questo caso non serve ma per campi di testo mi leva
tutti i vari % & $ è à etc.
riformulo per vedere se ho capito:
------------------------
///// creo l'array $wheres
$wheres[]=$categoria;
$wheres[]=$online;
if (isset($_GET['provincia']) && (!empty($_GET['provincia'])))
{ $provincia=$_GET['provincia'];
$provincia=trim($provincia); $provincia=addslashes($provincia);
$provincia=htmlspecialchars($provincia); $provincia=substr($provincia,
0, 2);
/////creo la condizione
$cond01=" AND provincia=?";
/////aggiungo la provincia a $wheres
$wheres[]=$provincia;
} else { $provincia=""; $cond01=""; }
$sqll = $ndb->prepare('SELECT * FROM ((articoli INNER JOIN tipologie ON articoli.idTipologia=tipologie.idTipologia) INNER JOIN
luogo ON articoli.idLuogo=luogo.idLuogo) INNER JOIN bookings_items ON articoli.idArticoli=bookings_items.id_ref_external WHERE categoria=?
AND online=?
/////se presente aggiungo la condizione alla query
'.$cond01.'
ORDER BY occasione DESC, priorita ASC LIMIT
//// aggiungo i limiti che vengono dato dal sorgente, non dovrebbero
creare falle, giusto?
'.$pa.', '.$pb.'');
//faccio eseguire l'array
$sqll->execute($wheres);
$rqll = $sqll->fetchAll();
-----------------------
funzionare funziona ci sono falle?
Enrico
[toc] | [prev] | [next] | [standalone]
Page 1 of 3 [1] 2 3 Next page →
Back to top | Article view | it.comp.www.php
csiph-web