visualizzazione dati da più tabelle tramite php e mysql

danpippo

Utente Attivo
17 Mar 2006
31
0
0
ciao a tutti
ho un problema con questo script. Mi permette di selezionare tramite delle checkbox determinati dati da un db, ma non mi permette di eseguire la query su piu tabelle. Come posso fare?
qui il codice

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.");
echo "<B>Elenco merce</B><br><br>";
echo "<i>Tipo Quantità Prezzo Genere</i><br><br>";
$q="Select * from tabella";
$condizione = "";
if ($_POST['c1'] == "colla")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'colla' ";
}
if ($_POST['c2'] == "mastice")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'mastice' ";
}
if ($_POST['c3'] == "lama")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'lama' ";
}
if ($_POST['c4'] == "vernice")
{
if ( $condizione == "" )
{
}
else
{
$condizione = $condizione." OR ";
}
$condizione = $condizione." genere = 'vernice' ";
}

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);
// Si sposta sul primo record
mysql_data_seek($id_ris,0);
for( $i=0; $i<$num_libri; $i++ )
{
$record=mysql_fetch_array($id_ris);
//echo $i;
//echo ",";
//echo $record[0];
//echo ",";
//echo "&nbsp &nbsp";
echo "<b>$record[1]";
echo ",";
echo "&nbsp &nbsp";
echo $record[2];
echo ",";
echo "&nbsp &nbsp";
echo $record[3];
echo ",";
echo "&nbsp &nbsp";
echo $record[4];
echo "<br>";
}
?>
praticamente i checkbox, (presenti in un'altra pagina) una volta selezionati, mi fanno vedere i dati estratti dal db, ma non riesco a farlo su piu tabelle. Ho provato con join ma niente. Qualcuno puo aiutarmi? grazie
 
Ultima modifica di un moderatore:
ciao
in che senzo su più tabelle?
dovresti specificare cosa vuoi estrarre da una e da un'altra e cosa le collega.
divresti postare il dump delle tabelle che ti interessano e dire quello che vuoi estrarre.

p.s.
nessuno può aiutarmi?
in questi giorni di festa i webmaster sono occupati col...bicarbonato (conseguenza delle abbuffate pantagrueliche)
 
lo so, stanno tutti con i piedi sotto al tavolo...:o

comunque il dump della tabella (spero di aver fatto bene) è questo

Codice:
CREATE TABLE IF NOT EXISTS `merce1` (
  `isbn` varchar(10) NOT NULL,
  `tipo` varchar(100) NOT NULL,
  `quantità` varchar(100) NOT NULL,
  `prezzo` varchar(100) NOT NULL,
  `genere` varchar(100) NOT NULL,
  PRIMARY KEY (`isbn`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dump dei dati per la tabella `merce1`
--

INSERT INTO `merce1` (`isbn`, `tipo`, `quantità`, `prezzo`, `genere`) VALUES
('123456', 'colla vinavil', '250 gr', '1.90', 'colla'),
('123445', 'mastice Hu', '1 lt', '1.20', 'mastice'),
('563456', 'trapano bosh', '1 lt', '14.29', 'trapano'),
('56456', 'tinta express', '285 gr', '0.49', 'tinta'),
('8878765', 'serratura yale', '1 lt', '2.49', 'serratura'),

e le altre tabelle (merce2, merce3...) sono praticamente identiche. I nomi dei campi sono gli stessi (`isbn`, `tipo`, `quantità`, `prezzo`, `genere`), cambiano solo i prodotti. Io con questo script seleziono i generi (quindi ad esempio trapano, colla, serratura) e poi mi permette di visualizzare della tabella solo i record che hanno quel genere. Perciò se seleziono colla, mi mostra "colla vinavil', '250 gr', '1.90', 'colla". Quello che mi serve è fare questo su più tabelle in modo tale che se selezionassi colla, mi mostrerebbe i record che appartengo al genere colla di tutte le tabelle. Esempio
merce1 - colla vinavil', '250 gr', '1.90', 'colla'
merce2 - colla attack', '100 gr', '1.80', 'colla'
ecc..
spero di essere stato chiaro, e ammetto che è parecchio che sto provando a risolvere questo problema senza riuscirci. Grazie per le risposte e AUGURI!
 
Ultima modifica di un moderatore:
ciao
da un'occhiata superficiale mi sembra che tu stia commettendo un errore, non di mysql o php, ma di concetto sull'organizzazione del db/tabelle.
se hai pazienza che... ritiri i piedi da sotto il tavolo... ti dò delle dritte.

buon anno
 
passate buone feste? spero di si...
si può avere qualche altra informazione in merito al post?
grazie
 
ciao
riprendiamo il discorso dopo aver tolto le zampe da sotto il tavolo.
secondo me non dovresti fare tante tabelle uguali, ma una su cui scrivi i generi ed una gli articoli (salo che tu non abbia es. genere, sottogenere, articolo, nel qual caso tre)
esempio schematico:
Codice:
CREATE TABLE `generi` (
`id` INT( 12 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`genere` VARCHAR( 100 ) NOT NULL ,
 ENGINE = MYISAM ;
in cui mettere i generi degli articoli (colla, mastice, trapano......)
poi farei una tabella per gli articolo

Codice:
 CREATE TABLE `articolo` (
`id` INT( 12 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`id_cat` INT( 12 ) NOT NULL ,
`isbn` INT( 12 ) NOT NULL ,
`tipo` VARCHAR( 100 ) NOT NULL ,
`quantità` FLOAT NOT NULL ,
`prezzo` FLOAT NOT NULL ,
UNIQUE (
`isbn` 
)) ENGINE = MYISAM ;
in questa puoi vedere
id è l'identificativo del record
id_cat e l'id della categorie che proverrà dalla tabella precedente (e che crerà il legame genere/articolo)
isbn (da quello che capisco) è il codice di magazzino dell'articolo e, dovendo corrispondere un articolo un codice, l'ho messo unique.
gli altri sono evidenti.
comunque ricordati una cosa, prima di buttarti a scrivere le tabelle, pensa bene (anzi molto bene) a come vuoi organizzare il db (da quello che intuisco ti servirà per lavoro).
perdi tempo (con matita/gomma/carta) ad organizzarlo poi ti accorgerai che il tempo non è perso ma guadagnato.
comunque siamo sempre qui per cercare di risolvere i dubbi.
 
grazie x la risposta
ho creato le due tabelle ma per fare la query di ricerca cosa devo scrivere? e come faccio a collegare l'id delle due tabelle (id e id_cat x intenderci)?
 
ciao
per prima cosa devi pensare a come cercare, cioè con quali elementi effettuare la ricerca.
ipotizziamo che tu abbia gia inesrito una serie di categorie e (per ogni categoria un qualche prodotto o anche no)
e che tu abbia deciso di cercare i prodotti in funzione della categoria e, volendo, per qualcosa contenuto nel tipo.
dovrai farti quindi un form di ricerca che ti schematizzo

PHP:
<?php
//qui i dati per la connessione al db
//visto che c'è una tabella "generi" conviene che il la select sia dinamica
//estraendo i valori di input dalla tabella
?>
<form name="form1" method="post" action="">
    seleziona categoria<select name="genere" id="genere">
      <option value="">-scegli-</option>
<?php  
	  $query=mysql_query("SELECT * FROM generi ORDER BY generi");//ordino la visualizzazione alfabeticamente
	  while($riga=mysql_fetch_array($query)){
	  echo "<option value=\"".$riga['id']."\">".$riga['genere']."</option>";
	  }
?>
	</select>
  <p>indica tipo 
    <input name="tipo" type="text" id="tipo">
  </p>
  <p>
    <input name="cerca" type="submit" id="cerca" value="cerca">
  </p>
</form>
poi farai la pagina in cui visualizzerai gli articoli in funzione di quanto avrai immesso nel form
sceglierai se fare una pagina unica col form o due separate

PHP:
<?php
//qui i dati di connessione al db
if(isset($_POST['cerca'])){
	//verifichiamo cosa proviene dal form
	$genere=$_POST['genere'];
	$tipo=$_POST['tipo'];
	//e costruiamo le condizioni della query di ricerca
	$w=" WHERE 1=1 ";//questa sarà sempre vera
	if($genere !=""){//ha selezionato un genere
		$w .= "AND id_cat='$genere' ";
	}
	if($tipo !=""){
		$w .="AND tipo LIKE '%$tipo%'";
	}
	/*
	se per ipotesi;
	- non hai selezionato nulla ne scritto nulla nel campo di input tipo
	  in $w avrai " WHERE 1=1 " quindi ti saranno mostrati tutti gli articoli di tutti i generi
	- selezionato es. genere colla che ha (es.) id = 5 nella tabella generi
	  in $w avrai " WHERE 1=1 AND id_cat ='5'" quindi ti saranno mostrati tutti gli articoli del genere colla
	- sempre selezionando colla come sopra ma scrivendo (es.) HUHU ti saranno mostrati gli articoli di genere colla e che
	  nel campo tipo contengomo con i caratteri HUHU
	- scrivendo solo nel campo HUHU senza selezionare il genere vedrai gli articoli (anche appartenenti a generi diversi) che in tipo hanno i caratteri HUHU	
	quindi la query diventerà
	*/
	$q="SELECT * FROM articolo ".$w;
	//verifichi con mysql_num_rows se ci sono articoli con le condizioni impostate
	//e quindi, se si, visualizzi tutti gli articoli con le condizioni poste in $w
	//....ecc.....
}
?>
guarda che quanto scritto (anche se funzionante) è solo uno schema indicativo

analogo discorso per inserire un articolo:
prima devi creare il genere, poi inserirai gli articoli appartenenti al genere
comunque eventualmente alla prossima
 
ciao
grazie x la risposta, ma come ti avevo accennato ho necessità che le scelte vengano fatte solo tramite checkbox, altrimenti non può servirmi per il contesto del sito.
il mio form che uso è
<form action="pagina.php" method="post">
<span style="font-style: italic;">Ricerca per tipo</span><br><br>
<span style="font-weight: bold; font-style: italic;">
Scelta:
</span>
<input name="c1" value="colla" type="checkbox">colla
<input name="c2" value="mastice" type="checkbox">mastice
<input name="c3" value="piastrelle" type="checkbox">piastrelle
........
e poi come faccio a concatenare id generi con id_cat della tabella articolo?
grazie x la pazienza...:)
 

Discussioni simili