modifica query selezione

danpippo

Utente Attivo
17 Mar 2006
31
0
0
salve a tutti. Ho un problema con uno script. In pratica ho delle checkbox che una volta selezionate mi fanno vedere i dati estrapolati da un db. Fin qui tutto bene, ma se modifico la query in qualsiasi modo, selezionando le checkbox mi va in errore.
la query così funziona $q="SELECT * FROM tabella "; mentre se la modifico anche solo cosi $q="SELECT * FROM tabella order by isbn"; mi si blocca.
all'interno dello script c'è questa parte che probabilmente mi manda in errore tutto.

if ( $condizione <> "" )
{
$q = $q ." where".$condizione;
}

$condizione è una variabile usata per modificare la query di selezione, ma anche se eliminassi questa parte di script o solo where, poi non funzionerebbe comunque bene. Spero possiate aiutarmi, grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
cosa c'è dentro $condizione? questo perchè la WHERE nella query deve essere fatta così (metto il nome di campo a caso)

SELECT * FROM tabella WHERE campo_a_caso ='$condizione' ORDER BY isbn
quindi potresti fare

PHP:
<?php
//....
if ( $condizione <> "" )
{
$q .= " WHERE campo_a_caso ='$condizione' ";//se in $q hai "SELECT * FROM tabella"
}
$q .= " ORDER BY isbn";
//...
?>

p.s.
racchiudi sempre il codice tra gli appositi tag
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
purtroppo non mi funziona. Come posso fare per eliminare il problema? sono fermo da troppo tempo, non c'è un altro modo? ho bisogno di modificare questa query...:crying:
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Prova a postare il codice query e il var_dump($q) di quando va in errore
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
oltre a quello che ha detto ciric, ma vale anche per altri forumisti:
non funziona non vuol dire nulla è troppo generico
dovreste indicare se da un errore php (warning...) o se fa la querry e non la condizione, o da pagina bianca...
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ok, quando faccio il var_dump mi scrive questo:
PHP:
string(35) "SELECT * FROM `dati` order by nome " Non è possibile eseguire la query!
comunque io vi scrivo il codice, speriamo bene...

PHP:
<?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`  "; 
$condizione = "";
if ($_POST['c1'] == "elemento1")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." or ";
}
$condizione = $condizione." genere = 'elemento1' ";
}

if ($_POST['c2'] == "elemento2")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'elemento2' ";
}
if ( $condizione <> "" )
{
$q = $q ." where  ".$condizione;
}
$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);
for( $i=0; $i<$num_libri; $i++ )
{
$record=mysql_fetch_array($id_ris);
echo "<td>", $record[1],"</td>";
echo "<td>", $record[2],"</td>";
echo "<td>", $record[3],"</td>";
echo "<td>", $record[4],"</td>";
echo "</tr>";
}
?>

i checkbox sono contrassegnati con i nomi c1, c2 ecc... Cosi facendo quando clicco su uno mi fa vedere il campo corrispondente del db, ma se modifico la query, ad esempio inserendo "order by" o provando a svolgere la query su due tabelle mi dà "non è possibile eseguire la query".
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Prova a verificare se in phpmyadmin viene eseguita la query
Codice:
SELECT * FROM dati order by nome

senza gli apici sulla tabella dati

poi proverei anche una soluzione tipo questa:

PHP:
<?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'])) {

    $q.= " && (genere = 'elemento1' or genere = 'elemento2') ";
} else {
    if (isset($_POST['c1']) && $_POST['c1'] == "elemento1") {
        $q.= " && genere = 'elemento1' ";
    }

    if (isset($_POST['c2']) && $_POST['c2'] == "elemento2") {
        $q.= " && genere = 'elemento2' ";
    }
}

$q.= " ORDER BY nome";

var_dump($q);

$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);
for ($i = 0; $i < $num_libri; $i++) {
    $record = mysql_fetch_array($id_ris);
    echo "<td>", $record[1], "</td>";
    echo "<td>", $record[2], "</td>";
    echo "<td>", $record[3], "</td>";
    echo "<td>", $record[4], "</td>";
    echo "</tr>";
}
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
prova così (leggi i commenti)
PHP:
<?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 ";  //togli i ``, la condizione 1=1 è SEMPRE soddisfatta
$condizione = ""; 
if ($_POST['c1'] == "elemento1"){ 
	$condizione = $condizione." OR genere = 'elemento1' "; 
} 
if ($_POST['c2'] == "elemento2"){ 
	$condizione = $condizione." OR genere = 'elemento2' "; 
} 
$q = $q.$condizione." ORDER BY nome"; //se ti serve l'order by
var_dump($q);//prova senza condizione con una l'altra e entrambe e guarda cosa ti risponde
/* deve darti:
- senza condizioni
string(xy) "SELECT * FROM dati WHERE 1=1 ORDER BY nome"
- solo con la prima
string(xy) "SELECT * FROM dati WHERE 1=1 OR genere = 'elemento1' ORDER BY nome"
- solo con la seconda
string(xy) "SELECT * FROM dati WHERE 1=1 OR genere = 'elemento2' ORDER BY nome"
- con entrambe
string(xy) "SELECT * FROM dati WHERE 1=1 OR genere = 'elemento1' OR genere = 'elemento2' ORDER BY nome"
se non ti da questo è inutile che tu prosegua con la query
anzi per fare le prove ti converrebbe commentare tutte le righe sotto
*/
$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); 
for( $i=0; $i<$num_libri; $i++ ) 
{ 
$record=mysql_fetch_array($id_ris); 
echo "<td>", $record[1],"</td>"; 
echo "<td>", $record[2],"</td>"; 
echo "<td>", $record[3],"</td>"; 
echo "<td>", $record[4],"</td>"; 
echo "</tr>"; 
} 
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
@ciric
siamo giunti allo stesso non avevo visto il tuo post
dimenticavo
if (isset($_POST['c1']) && isset($_POST['c2'])){
dovrebbe essere
if (isset($_POST['c1']) || isset($_POST['c2']))
altrimenti se non entrambi no esegue gli if interni
 
Ultima modifica:

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ragazzi grazie per l'impegno ma ancora non va...
in entrambi i casi, mi visualizza sempre tutti i dati estratti dal db, anche se ne seleziono uno solo.
Mentre se modifico come scritto da borgoitalia l'ultima parte e cioè
PHP:
if (isset($_POST['c1']) || isset($_POST['c2']))
allora non mi visualizza proprio niente, senza nemmeno darmi un errore.
Sono disposto a questo punto a ricominciare tutto da capo, perchè evidentemente il codice così non va. Però visto la mia scarsa propensione verso il php, mi piacerebbe sapere se esistesse da qualche parte qualche risorsa da utilizzare per la mia causa, uno script che mi permettesse di gestire diverse checkbox che una volta selezionate mi facciano vedere solo ciò che richiedo. Non mi sembra una cosa complicatissima eppure sono mesi che ci sbatto la testa... grazie ancora
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non ti rassegnare

riposta il codice modificato e anche il form di ri ricerca

Vedrai che una soluzione la troviamo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
ha ragione ciric non avevo letto bene il suo script (mi era sfuggito l'else), comunque il var_dump (o il mio o quello di circ) cosa ti da?
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
vi riposto il codice così vediamo se si puo fare l'ultimo tentativo. In questo modo quando seleziono non mi visualizza niente, mentre senza selezionare mi fa vedere tutto...
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'])) {

    $q.= " && (genere = 'elemento1' or genere = 'elemento2') ";
} else {
    if (isset($_POST['c1']) || $_POST['c1'] == "elemento1") {
        $q.= " && genere = 'elemento1' ";
    }
    if (isset($_POST['c2']) || $_POST['c2'] == "elemento2") {
        $q.= " && genere = 'elemento2' ";
    }
}
$q.= " ORDER BY nome";
var_dump($q);
$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);
for ($i = 0; $i < $num_libri; $i++) {
    $record = mysql_fetch_array($id_ris);
    echo "<td>", $record[1], "</td>";
    echo "<td>", $record[2], "</td>";
    echo "<td>", $record[3], "</td>";
    echo "<td>", $record[4], "</td>";
    echo "</tr>";
} 
?>
</html>

questo è il form

HTML:
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="AlterVista - Editor HTML">
<TITLE></TITLE>
<form action="invio.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" value="elemento1" type="checkbox">elemento 1<br>
<input name="c2" value="elemento2" type="checkbox">elemento 2<br>
</td>
</table>
</font>
<br>
<input value="RICERCA" type="submit">
<input value="ANNULLA" type="reset">
</form>
</HEAD>
<BODY>
<P>&nbsp;</P>
</BODY>
</HTML>

grazie ancora...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
A me in locale funziona

devi solo togliere gli || e mettere gli && alla query

PHP:
$q = "SELECT * FROM dati WHERE 1=1";

if (isset($_POST['c1']) && isset($_POST['c2'])) {

    $q.= " && (genere = 'elemento1' or genere = 'elemento2') ";
} else {
    if (isset($_POST['c1']) && $_POST['c1'] == "elemento1") {
        $q.= " && genere = 'elemento1' ";
    }
    if (isset($_POST['c2']) && $_POST['c2'] == "elemento2") {
        $q.= " && genere = 'elemento2' ";
    }
}
$q.= " ORDER BY nome";

se non ti va posta anche la struttura della tabella che magari il problema è li
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ma riesci a vedere solo ciò che selezioni tramite checkbox?
a me fa vedere tutto quanto...
comunque la struttura della tabella è

Codice:
tipo	varchar(100)	Sì	NULL
quantità	varchar(100)	Sì	NULL
prezzo	varchar(100)	Sì	NULL
genere	varchar(100)	Sì	NULL
nome	varchar(100)	Sì	NULL

ciao
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
scusa, ma se volessi aggiungere altri controlli checkbox devo fare cosi?

PHP:
$q.= " && (genere = 'elemento1' or genere = 'elemento2' or genere = 'elemento3') ";
e poi inserire il relativo if?

riciao...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Sarebbe da rivedere un po meglio la query per aggiungere altri ceckbox

per ora ti posto il codice che ho fatto funzionare in locale e poi ci penso un attimo

PHP:
<?php
$conn = mysql_connect('localhost', 'root', '', 'miodb');
$db = mysql_select_db('miodb');

$q = "SELECT * FROM dati WHERE 1=1";

if (isset($_POST['c1']) && isset($_POST['c2'])) {

    $q.= " && (genere = 'elemento1' or genere = 'elemento2') ";
} else {

    if (isset($_POST['c1']) && $_POST['c1'] == "elemento1") {
        $q.= " && genere = 'elemento1' ";
    }
    if (isset($_POST['c2']) && $_POST['c2'] == "elemento2") {
        $q.= " && genere = 'elemento2' ";
    }
}
$q.= " ORDER BY nome";
var_dump($q);
$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>campo 0</td>";
echo "<td>campo 1</td>";
echo "<td>campo 2</td>";
echo "<td>campo 3</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 "</tr>";
}
echo "</table>";
?> 
<HTML>
    <HEAD>
        <META NAME="GENERATOR" Content="AlterVista - Editor HTML">
        <style type='text/css'>
            td {
            padding: 6px;
            }
        </style>
        <TITLE></TITLE>
    <form action="" 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" value="elemento1" type="checkbox">elemento 1<br>
                    <input name="c2" value="elemento2" type="checkbox">elemento 2<br>
                </td>
        </table>
        </font>
        <br>
        <input value="RICERCA" type="submit">
        <input value="ANNULLA" type="reset">
    </form>
</HEAD>
<BODY>
    <P>&nbsp;</P>
</BODY>
</HTML>

Risultato:
Immagine.png
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Cosi la query è un po piu efficace

ti permette di selezionare anche piu checkbox

ho commentato leggermente

PHP:
$q = "SELECT * FROM dati WHERE 1=1";
//verifichiamo che almeno una checkbox sia selezionata
if (isset($_POST['c1']) || isset($_POST['c2']) || isset($_POST['c3']) || isset($_POST['c4'])) {
    // costruiamo la query 1=0 sara sempre falso ma sarà abbinato ad almeno una or
    $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' ";
    }

    $q.= ")";
}

$q.= " ORDER BY nome";

non serve dare il value alla checkbox

Codice:
<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>

Dimentichi spesso di chiudere i tag html
 

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ciao
ho fatto tale e quale come hai fatto tu, ma se eseguo il file php, mi fa vedere tutti i dati del db, se seleziono non mi fa vedere niente!
io uso altervista per eseguire questi file, potrebbe essere li il problema?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
non credo

riposta il codice come lo hai modificato


Spero che nel campo genere tu abbia la stringa "elemento1" o "elemento2" etc
 
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
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 0
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
X modifica contemporanea di record MS Access 6
J [WP] Chiarimenti modifica campo WordPress 0
A Form per modifica record database PHP 9

Discussioni simili