modifica query selezione

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusate ma secondo me state girando in tondo come trottole

dove è il value del chekbox?

dimenticavo
se ha più chek invece di chiamarli
HTML:
<!-- ...qui manca il value... -->
<input name="c1" type="checkbox"/>elemento 1<br>
<input name="c2" type="checkbox"/>elemento 2<br>                    
<input name="c3" type="checkbox"/>elemento 3<br>
<input name="c4" type="checkbox"/>elemento 4<br>
<!-- ..ecc.. -->
sarebbe meglio chiamarli
HTML:
<!-- ..ecc.. -->
<input name="c[]" type="checkbox" value="elemento 1"/>elemento 1<br>
<input name="c[]" type="checkbox" value="elemento 2"/>elemento 2<br>                    
<input name="c[]" type="checkbox" value="elemento 3"/>elemento 3<br>
<input name="c[]" type="checkbox" value="elemento 4"/>elemento 4<br>
<!-- ..ecc.. -->
poi nella parte php li estrai con un foreach

PHP:
<?php
//............
$q = "SELECT * FROM dati WHERE 1=1 ";
$whe_2="";
foreach($_POST['c'] as $valore){
	if($valore !=""){
		$whe_2.=" OR genere = '$valore' ";
	}
}
$q .= $whe_2." ORDER BY nome";
//e qui il solito var_dump. !!!fai delle prova e posta il/i risultato/i del var_dump
var_dump($q);
//questo indipendentemente da quanto la query ti fa vedere
//....
?>
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
PHP:
array
// senza value
  'c1' => string 'on' (length=2)
// con value
  'c2' => string 'elemento2' (length=9)

string 'SELECT * FROM dati WHERE 1=1 && (1=0 || genere = 'elemento1'  || genere = 'elemento2' ) ORDER BY nome' (length=101)

Cambia poco mettere il value per come è stata impostata la query
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
poi nella parte php li estrai con un foreach
PHP:
<?php
//............
$q = "SELECT * FROM dati WHERE 1=1 ";
$whe_2="";
foreach($_POST['c'] as $valore){
    if($valore !=""){
        $whe_2.=" OR genere = '$valore' ";
    }
}
$q .= $whe_2." ORDER BY nome";
//e qui il solito var_dump. !!!fai delle prova e posta il/i risultato/i del var_dump
var_dump($q);
//questo indipendentemente da quanto la query ti fa vedere
//....
?>

Codice:
SELECT * FROM dati WHERE 1=1 OR genere = 'elemento1'


Cosi però verranno sempre estratti tutti
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ragazzi tutto ok ora funziona. Avevo fatto degli errori di sintassi. Posto il codice completo casomai dovesse servire anche ad altri:

PHP:
<html>
<head>
<style type="text/css">
body{
margin-left: .5cm;
    margin-right: .5cm;
    color: black;
    font-family: Verdana, Arial, sans-serif;
    font-size: 10pt;
}
</style>
</head>
<?php
$nomeDB = "";
$connessione = mysql_connect("", "", "") or die("Connessione al Server non possibile.");
mysql_select_db($nomeDB, $connessione) or die("Connessione al DB non possibile.");
$q = "SELECT * FROM dati WHERE 1=1";
if (isset($_POST['c1']) || isset($_POST['c2']) || isset($_POST['c3']) || isset($_POST['c4']) || isset($_POST['c5']) || isset($_POST['c6']) || isset($_POST['c7']) || isset($_POST['c8'])) {
    $q.= " && (1=0";
    if (isset($_POST['c1'])) {
        $q.= " || genere = 'elemento1' ";
    }
    if (isset($_POST['c2'])) {
        $q.= " || genere = 'elemento2' ";
    }
    if (isset($_POST['c3'])) {
        $q.= " || genere = 'elemento3' ";
    }
    if (isset($_POST['c4'])) {
        $q.= " || genere = 'elemento4' ";
    }
    if (isset($_POST['c5'])) {
        $q.= " || genere = 'elemento5' ";
    }
    if (isset($_POST['c6'])) {
        $q.= " || genere = 'elemento6' ";
    }
    if (isset($_POST['c7'])) {
        $q.= " || genere = 'elemento7' ";
    }
    if (isset($_POST['c8'])) {
        $q.= " || genere = 'elemento8' ";
    }
    $q.= ")";
}
$q.= " ORDER BY nome";  
$id_ris = mysql_query($q)
        or die("Non è possibile eseguire la query!");
$num_libri = mysql_num_rows($id_ris);
mysql_data_seek($id_ris, 0);
echo "<table border='1'>";
echo "<tr>";
echo "<td>Tipo</td>";
echo "<td>Quantità</td>";
echo "<td>Prezzo</td>";
echo "<td>Genere</td>";
echo "<td>Nome</td>";
echo "</tr>";
for ($i = 0; $i < $num_libri; $i++) {
    $record = mysql_fetch_array($id_ris);
    echo "<tr>";
    echo "<td>", $record[0], "</td>";
    echo "<td>", $record[1], "</td>";
    echo "<td>", $record[2], "</td>";
    echo "<td>", $record[3], "</td>";
    echo "<td>", $record[4], "</td>";
    echo "</tr>";
}
echo "</table>";
?>  
</html>

e qui il form:
HTML:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="AlterVista - Editor HTML">
<TITLE></TITLE>
<form action="action.php" method="post" target="_blank">
<span style="font-style: italic;">Ricerca per tipo</span><br><br>
<span style="font-weight: bold; font-style: italic;">
Scelta:
<br>
</span>
<font size="3">
<table>
<tr>
<td>
<input name="c1" type="checkbox">elemento1<br>
<input name="c2" type="checkbox">elemento2<br>
<input name="c3" type="checkbox">elemento3<br>
<input name="c4" type="checkbox">elemento4<br>
<input name="c5" type="checkbox">elemento5<br>
<input name="c6" type="checkbox">elemento6<br>
<input name="c7" type="checkbox">elemento7<br>
<input name="c8" type="checkbox">elemento8<br>
</td>
</table>
</font>
<br>
<input value="RICERCA" type="submit">
<input value="ANNULLA" type="reset">
</form>
</HEAD>
<BODY>
<P>&nbsp;</P>
</BODY>
</HTML>

non avete idea dell'aiuto monumentale che mi avete dato! Vi ringrazio di cuore
Comunque non è detto che sia finita qui. E' probabile che presto dovrò richiedervi altri aiuti...:fonzie:
grazie ancora!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
@ciric
non capisco bene la tua osservazione: se è ininfluente a che servono i chek e la loro eventuale selezione?
che poi la query non sia come dovrebbe essere è un'altro discorso e quindi deve/o/i costruirla meglio, ma se non dai un value il valore di qualsiasi chek e null (o vuoto).
forse la query andrebbe scritta meglio senza 1=1 AND e togliere l'ultimo OR
ma concatenere una stringa $stringa = 'elemento1' OR genere = 'elemento2' OR.....
togliere l'ultimo OR con substring e, se non vuota, aggiungere il where davanti
PHP:
<?php
$q = "SELECT * FROM dati "; 
$whe_2=""; 
foreach($_POST['c'] as $valore){ 
    if($valore !=""){ 
        $whe_2.=" genere = '$valore' OR"; //l'OR in fondo
    } 
}
if(strlen($whe_2) >0){
	$whe_2=" WHERE ".substr($whe_2,0,(strlen($whe_2)-2));
}
$q .= $whe_2." ORDER BY nome";
/*
quindi se ho checcato es. due chek il 2 e il 4) la query diventa
$q = "SELECT * FROM dati WHERE  genere = 'elemento2' OR genere = 'elemento4' ORDER BY nome";
quindi ti estrae i record in cui genere sia uguale a elemento2 oppure a elemento4
*/
//e qui il solito var_dump. !!!fai delle prova e posta il/i risultato/i del var_dump 
var_dump($q); 
//questo indipendentemente da quanto la query ti fa vedere 
//.... 
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Felice cmq che il nostro amico abbia risolto
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ehm...purtroppo non ancora...
ho dovuto modificare la mia query facendo una selezione su piu tabelle identiche

Codice:
$q = "SELECT * FROM tabella1 UNION SELECT * FROM tabella2 UNION SELECT * FROM tabella3 ";

ma facendo le selezioni con le checkbox mi dice "non è possibile eseguire la query"
non è che potreste darmi l'ultimo aiuto?
grazie :)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
questo è masochismo :cool:

hai qualche campo che accomuna le tabelle?

tipo id

se si ti conviene considerare le JOIN
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
adoro farmi male...:)

le tabelle non hanno campi in comune.
Speravo di poterci riuscire senza usare le join, che le ho provate con il vecchio script e non funzionavano.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
ma facendo le selezioni con le checkbox mi dice "non è possibile eseguire la query"
non è che potreste darmi l'ultimo aiuto?

metti piu info
PHP:
$id_ris = mysql_query($q)
        or die("Non è possibile eseguire la query!<br/>" . $q . "<br/>" . mysql_error());
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
scrivendo cosi, mi da quando seleziono le checkbox il seguente messaggio

Non è possibile eseguire la query!
select * from tab1 union select * from tab2 union select * from tab3 && (1=0 || genere = 'elemento1' || genere = 'elemento2' )
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '&& (1=0 || genere = 'elemento1' || genere = 'elemento2' )' at line 1
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
select * from tab1 union select * from tab2 union select * from tab3 :confused: && (1=0 || genere = 'elemento1' || genere = 'elemento2' )


manca il WHERE 1=1

lo hai perso
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
l'ho inserito ma adesso anche selezionando le checkbox, mi visualizza sempre tutti i dati del db.
mentre se cambio la query in questo modo inserendo where 1=1 ad ogni tabella

Codice:
$q="select * from tab1 WHERE 1=1 union select * from tab2 WHERE 1=1 union select * from tab3 WHERE 1=1 ";

mi funziona solo con la tab3...
boh!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
dovresti cercare di costruire qualcosa del genere

Codice:
 $q="select tab.* from (
                
                select * from tab1 
                union all
                select * from tab2 
                union all
                select * from tab3 
                
                ) tab
                
                WHERE 1=1 && tab.genere = 'elemento1' order by tab.nome";

non l'ho testata ma dovrebbe funzionare
provala prima direttamente su phpmyadmin, quando sei sicuro che i risultati sono quelli che ti aspetti cominci a costruirla con il php
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ok funziona
però scrivendo

Codice:
WHERE 1=1 && tab.genere = 'elemento1'

io inserisco la query che funziona solo su quel dato elemento, rendendo inutile la selezione delle checkbox. Per intenderci, eseguendo questa query mi fa vedere tutti gli elementi1 delle tabelle. Ma selezionando elemento3, sempre elemento1 mi fa vedere...
come faccio a farlo funzionare tramite checkbox?
ciao
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
&& tab.genere = 'elemento1'

era un esempio di come poteva essere la query, non devi metterlo

PHP:
 $q="select tab.* from (
                
                select * from tab1 
                union all
                select * from tab2 
                union all
                select * from tab3 
                
                ) tab
                
                WHERE 1=1";

e poi vai avanti come facevi prima

ricorda di mettere tab. prima del nome del campo

es:tab.genere
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
A [PHP] Modifica caratteri di una query Oracle SQL PHP 0
G Problemi con modifica dati in query di aggiornamento MS Access 6
F Query modifica contenuto campo MySQL 5
neo996sps Modifica query PHP con menu a tendina PHP 1
D Jquery - modifica elemenento onlick jQuery 1
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
JeiMax Modifica codice php personalizzato PHP 2
P Pagina modifica record che non funziona PHP 0
L Modifica file upload in ASP Classic ASP 2
P modifica colore A Hover link website . WordPress 2
P Modifica con PHP di un node in una sitemap xml PHP 0
C Software modifica sitoweb in tempo reale WordPress 12
G Modifica immagine di sfondo attraverso un bottone PHP 18
L modifica dati. PHP 1
G modifica corretta funzione da eregi() a preg_match() PHP 3
R Modifica codice per l'upload di più file PHP 1
G Modifica testo Photoshop 3
felino Excel: popolare una cella con la data di modifica della riga a cui appartiene Windows e Software 3
felino [Wordpress] Modifica main color del template WordPress 8
M [PHP] Modifica account PHP 3
S [OFFRO] Creazione di programmi per la modifica automatizzata di testi Offerte e Richieste di Lavoro e/o Collaborazione 0
S [OFFRO] Rimozione o aggiunta di Password ai file PDF e opzionalmente loro modifica Offerte e Richieste di Lavoro e/o Collaborazione 2
F [PHP] modifica del body email con checked PHP 8
G Modifica da sito statico HTML a dinamico in Wordpress SEO e Posizionamento 1
Cosina Modifica script textarea jQuery 0
M [PHP] Calcolare costi su modifica orari PHP 4
F modifica recensione google Discussioni Varie 2
C Photoshop CS 6 salvare una modifica Photoshop 0
L [PHP] Modifica in tabella ultimo id PHP 5
C Pagina fb notifica modifica post Social Media Marketing 1
Q Notice: Undefined index: codice in C:\xampp\htdocs\STAGE\calendario\modifica.php on line 10 PHP 8
C [Joomla] [HTML] Modifica codice per adattamento app Joomla 18
Daniele_Carrara [Javascript] Modifica input date Javascript 5
J modifica spooler di stampa per stampare in ordine di nome i files pdf Windows e Software 2
Emix [PHP] Ricerca e modifica su due tabelle PHP 26
M [PHP] Tabella datagrid con icona di modifica che cambia in base a parametro PHP 0
Andrea1981 [WordPress] [HTML] Help modifica credits nel footer.Tema Customizr. WordPress 5
K [Visual Basic] Stampa e modifica record non funziona più Visual Basic 0
K [ASP.Net] Problema stampa e modifica ms sql ASP.NET 0
K stampa e modifica tabella in php e ms sql PHP 2
Michaelweb93 [WordPress] [HTML] Modifica sezione - pagina sito web WordPress 1
A [PHP] [RISOLTO] Modifica record db da form PHP 11
T [PHP] piccola modifica a script (non mio...) PHP 8
P Cerco programmatore per modifica sito wordpress Offerte e Richieste di Lavoro e/o Collaborazione 4
Z Modifica ricorsiva file html HTML e CSS 3
Trapano [PHP] modifica simultanea di più campi nel db PHP 1
K [CERCO] Programmatore per modifica tema wp Offerte e Richieste di Lavoro e/o Collaborazione 2
U modifica sender-receiver email Posta Elettronica 4
W modifica firma Supporto Mr.Webmaster 20
M Modifica parametro mysql_result($result, $i, 'id') Deprecato dal 5.5 PHP 10

Discussioni simili