- Home
- Categorie
- Coding e Sistemistica
- Coding
- creare una tabella tanti <td> quanti sono i record estratti
-
entrambi, devo capire bene come fare la query per poi mostrare tutto nelle celle corrette
-
Se ho capito bene hai X hotel, di cui vuoi stampare i prezzi in ciascuna riga della tabella.
Ti conviene estrarre gli hotel, quindi fai un foreach dove ad ogni ciclo fai una query per estrarre i prezzi di ogni hotel estratto, infine li stampi.
Il codice in basso è giusto per rendere l'idea
[PHP]
$hotels = query("SELECT id FROM hotels");foreach ($hotels as $hotel) {
$prezzi = query("SELECT prezzo FROM prezzi WHERE id_hotel = $hotel['id']");if ($prezzi) { echo " <tr> <td>$prezzi['prezzo1']</td> <td>$prezzi['prezzo2']</td> <td>$prezzi['prezzo3']</td> <tr>"; }
}
[/PHP]
-
ciao
non ho capito cosa fai in if($prezzi) alla riga 4, nel mio caso a cosa servirebbe? il resto forse l'ho capito
-
Ciao,
ho scritto un pò di codice maccheronico (vedi le query)
Nella condizione verifico che ci siano prezzi da stampare, potresti utilizzare la funzione count() che conta gli elementi di un array. Se è maggiore di zero stampa i prezzi, altrimenti non stampa nulla.
Le query sono ovviamente esempi, non so come hai disegnato le tabelle in MySQL.
-
ma quindi devo obbligatoriamente mettere i risultati della query in un array?
Perche' sto provando qualcosa del genere ma mi da errore "Warning: Invalid argument supplied for foreach() "
[php]
<!--inizio tabella offerte-->
<table class="table table-striped">
<thead>
<tr>
<th></th>
<?php
//estraggo le date di partenza dal database DA ROMA
$sql_calendario_roma = "SELECT id_data, data_partenza_calendario, DATE_FORMAT(data_partenza_calendario, '%d/%m') AS data_partenza_calendario_ita, citta_partenza, costo_volo from calendario where
attiva="0" and citta_partenza="1" and data_partenza_calendario between "2019-07-01" and "2019-07-31" order by data_partenza_calendario";
echo"$sql_calendario_roma";
$risultato_calendario_roma = @mysql_query($sql_calendario_roma) or die("Impossibile eseguire l'interrogazione calendario roma");
$numero_date_roma = mysql_num_rows($risultato_calendario_roma);
//echo"date disponibili: $numero_date_roma";
while ($riga_calendario_roma = mysql_fetch_array($risultato_calendario_roma)) {
$id_data = $riga_calendario_roma['id_data'];
$data_partenza_calendario = $riga_calendario_roma['data_partenza_calendario'];
$data_partenza_calendario_ita = $riga_calendario_roma['data_partenza_calendario_ita'];
$citta_partenza = $riga_calendario_roma['citta_partenza'];
$costo_volo = $riga_calendario_roma['costo_volo'];$date_disponibili="<th><h3>$data_partenza_calendario_ita</h3>$costo_volo</th>";
echo"$date_disponibili";
}?>
</tr>
</thead>
<tbody>
<?php
$hotels="select id_hotel, hotel from hotel where attivo="1" order by hotel asc";
$risultato_hotels=@mysql_query($hotels) or die(mysql_error());
$numero_hotels = mysql_num_rows($risultato_hotels);
while ($riga_hotels = mysql_fetch_array($risultato_hotels))
{
$id_hotel = $riga_hotels['id_hotel'];
$hotel = $riga_hotels['hotel'];}
foreach($hotels as $hotel)
{
$prezzi="select id_offerta, DATE_FORMAT(valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(valida_fino, '%d/%m/%Y') AS valida_fino_ita, prezzo_hotel, trattamento, id_albergo from offerte where id_albergo="$id_hotel" and cancellata="0" and "$data_partenza_calendario" between "2019-07-01" and "2019-07-31"";
}
?></tbody>
</table>
<!--fine tabella offerte-->
[/php]
-
Non è obbligatorio, è comodo nel caso avessi una funzione (possibilmente in un file separato) che ti restituisce i risultati della query, ma tu hai messo tutto quanto dentro lo stesso file.
Ti consiglio di separare la parte che accede al database (logica di business), da quella che visualizza i dati (logica di presentazione). Ne gioverebbe molto la leggibilità del programma e la correzione di eventuali bug/errori.
-
mi sono arenato da giorni, non riesco proprio ad andare avanti.
In pratica ho:
la tabella "citta" da dove estraggo l'aeroporto di partenza ed i prezzi per le 4 partenze del mese di luglio per esempio (4, 11, 18, 25 luglio)
la tabella "hotel" da dove estraggo il nome di tutti gli hotel (per esempio hotel 1, hotel, 2, hotel 3 ecc)
la tabella "offerte" da dove estraggo i prezzi di ogni hotel
Nella tabella offerte inserisco le date e i prezzi in 3 campi che si chiamano "valida_da", "valida_fino", "prezzo_hotel"
in pratica posso inserire un'offerta valida dal 5 maggio al 31 luglio di 300 euro, vuol dire che in quel lasso di tempo l'hotel costa 300 euro quindi rientra perfettamente nel range delle date selezionate prima per il mese di luglio (4, 11, 18, 25)
Alla fine sommo i 300 euro dell'hotel con il prezzo del volo impostato in quel giorno, per esempio 250 euro e mostro l'offerta
Ora non riesco in nessun modo a mostrare questi prezzi, sicuramente sbaglio qualcosa ma non so dove.Al momento sono arrivato qua, per caso riesci a capire dove sbaglio o cosa manca?
[php]
<!--inizio tabella offerte-->
<table class="table table-striped">
<thead>
<tr>
<th>vuoto</th>
<?php
//estraggo le date di partenza dal database DA ROMA
$sql_calendario_roma = "SELECT id_data, data_partenza_calendario, DATE_FORMAT(data_partenza_calendario, '%d/%m') AS data_partenza_calendario_ita, citta_partenza, costo_volo from calendario where
attiva="0" and citta_partenza="1" and data_partenza_calendario between "2019-07-01" and "2019-07-31" order by data_partenza_calendario";
//echo"$sql_calendario_roma";
$risultato_calendario_roma = @mysql_query($sql_calendario_roma) or die("Impossibile eseguire l'interrogazione calendario roma");
$numero_date_roma = mysql_num_rows($risultato_calendario_roma);
//echo"date disponibili: $numero_date_roma";
while ($riga_calendario_roma = mysql_fetch_array($risultato_calendario_roma)) {
$id_data = $riga_calendario_roma['id_data'];
$data_partenza_calendario = $riga_calendario_roma['data_partenza_calendario'];
$data_partenza_calendario_ita = $riga_calendario_roma['data_partenza_calendario_ita'];
$citta_partenza = $riga_calendario_roma['citta_partenza'];
$costo_volo = $riga_calendario_roma['costo_volo'];
$date_disponibili=" <th scope="col"><h3>$data_partenza_calendario_ita</h3>$costo_volo</th>";?>
<?php
$query="select
offerte.id_offerta, DATE_FORMAT(offerte.valida_da, '%d/%m/%Y') AS valida_da_ita, DATE_FORMAT(offerte.valida_fino, '%d/%m/%Y') AS valida_fino_ita, offerte.prezzo_hotel, offerte.id_albergo,
hotel.id_hotel, hotel.hotel, hotel.stelle, hotel.attivo
from offerte INNER JOIN hotel ON offerte.id_albergo = hotel.id_hotel where attivo="1" and cancellata="0" and "$riga_calendario_roma[data_partenza_calendario]"
between "2019-07-01" and "2019-07-31" group by hotel";
$risultato = @mysql_query($query) or die(mysql_error());
$numero_offerte = mysql_num_rows($risultato);
//echo"$numero_offerte";
//echo"$query<br><br>";
echo"$date_disponibili";
}echo"</tr>";
echo"</thead>
<tbody>
<tr>\n";
while ($riga = mysql_fetch_array($risultato)) {
$id_albergo=$riga['id_albergo'];
$hotel=$riga['hotel'];
$prezzo_hotel=$riga['prezzo_hotel'];
$prezzo_pacchetto=$prezzo_hotel+10;echo"<th scope="row">$hotel</th><td>$prezzo_pacchetto</td></tr>\n";
}
echo"</tr>";
?></tbody>
</table>
<!--fine tabella offerte-->
[/php]
-
Fai una cosa, posta l'output del tuo script.
Probabilmente fai confusione con la formattazione della tabella.
-
la formattazione forse è corretta, ma lanciando la query direttamente in phpmyadmin non mi tira fuori alcun risultato ed è strano
devo mostrare le offerte valide (valida_da) che stanno tra 1 e 31 luglio
e sto usando questa query:
[php]
select id_offerta, valida_da, prezzo_hotel, id_albergo from offerte where id_albergo="7" and 'valida_da' BETWEEN 2019-07-01 and 2019-07-31
[/php]Sto provando con gli apici, le virgolette, senza niente, ma non mostra alcun risultato... e ne dovrebbe tirare fuori almeno 1
AGGIORNAMENTO
sto sbagliando la query perche' mi sono accorto che per l'hotel con id 7 ho messo l'offerta valida dal 25 aprile al 4 agosto ed in questo modo non la mostrerebbe perche' il 25 aprile non è tra 1 e 31 luglio... pero' non capisco come mostrare le offerte che rientrano in quel range di date
-
rieccomi
ci sono quasi, le offerte le tiro fuori correttamente, solo che ho il problema che mi tira fuori gli hotel per ogni data
Mostro l'esempio pratico spezzando il link: (non far caso alla pagina che si chiama giugno e poi mostro luglio, poi correggo)https ://bit.ly/2JufpXT
Credo che sbaglio l'inserimento di qualche parentesi graffa:
[php]
<!--inizio tabella offerte-->
<table class="table table-striped">
<thead>
<tr><?php
//estraggo le date di partenza dal database DA ROMA
$sql_calendario_roma = "SELECT id_data, data_partenza_calendario, DATE_FORMAT(data_partenza_calendario, '%d/%m') AS data_partenza_calendario_ita, citta_partenza, costo_volo from calendario where
attiva="0" and citta_partenza="1" and data_partenza_calendario between "2019-07-01" and "2019-07-31" order by data_partenza_calendario";
//echo"$sql_calendario_roma";
$risultato_calendario_roma = @mysql_query($sql_calendario_roma) or die("Impossibile eseguire l'interrogazione calendario roma");
$numero_date_roma = mysql_num_rows($risultato_calendario_roma);
//echo"date disponibili: $numero_date_roma";
while ($riga_calendario_roma = mysql_fetch_array($risultato_calendario_roma)) {
$id_data = $riga_calendario_roma['id_data'];
$data_partenza_calendario = $riga_calendario_roma['data_partenza_calendario'];
$data_partenza_calendario_ita = $riga_calendario_roma['data_partenza_calendario_ita'];
$citta_partenza = $riga_calendario_roma['citta_partenza'];
$costo_volo = $riga_calendario_roma['costo_volo'];
$date_disponibili=" <th scope="col"><h3>$data_partenza_calendario_ita</h3></th>\n";$query_hotel="select
id_hotel, hotel, stelle, attivo
from hotel where attivo="1"";
$risultato_hotel = @mysql_query($query_hotel) or die(mysql_error());
//echo"$query<br><br>";
echo"$date_disponibili";echo" </tr>\n";
echo"</thead>\n";
echo" <tbody>\n";
//echo" <tr>\n";while ($riga = mysql_fetch_array($risultato_hotel)) {
$id_hotel=$riga['id_hotel'];
$hotel=$riga['hotel'];$query_offerte="select id_offerta, valida_da, prezzo_hotel, id_albergo
from offerte where id_albergo="$id_hotel" and "$data_partenza_calendario" BETWEEN valida_da and valida_fino and valida_fino >=CURDATE()";
$risultato_offerte = @mysql_query($query_offerte) or die(mysql_error());
$numero_offerte = mysql_num_rows($risultato_offerte);
//echo"$query_offerte<br><br>";
while ($riga_offerte = mysql_fetch_array($risultato_offerte)) {
$id_offerta = $riga_offerte['id_offerta'];
$valida_da = $riga_offerte['valida_da'];
$prezzo_hotel = $riga_offerte['prezzo_hotel'];
$id_albergo = $riga_offerte['id_albergo'];
//echo"prezzo hotel: $prezzo_hotel<br><br>";
$prezzo_offerta=$prezzo_hotel+$costo_volo+5+5;
$commissione=$prezzo_offerta/100*18;
$prezzo_offerta_vendita=round($prezzo_offerta+$commissione);
//$prezzo_offerta="<td>$prezzo_hotel</td>";
}echo"<tr><th scope="row">$hotel</th><td>$prezzo_offerta_vendita</td></tr>\n";
}
}
?>
</tbody>
</table>
<!--fine tabella offerte-->
[/php]