come da titolo avrei la necessita di stampare a video una tabella contente i turni di lavoro. la prima riga contiene tutte le date del mese, una per ogni cella. La prima colonna invece tutti i nomi dei turni da me chiamati etichette (turno mattina diventa come etichetta MT) e nel mezzo i nomi delle persone. ho provato e riprovato ma ciò che riesco a fare in maniera logica su carta come algoritmo non riesco a riprodurlo in codifica.
posto anche il codice. Mi sarebbe opportuno un suggerimento anche se dovessi rifare da capo tutto.
questo codice stampa la prima riga e le prime due colonne quindi sicuramente è un problema di indici perche dovrebbe stampare una riga completa per chiuderla e passare alla seguente
posto anche il codice. Mi sarebbe opportuno un suggerimento anche se dovessi rifare da capo tutto.
PHP:
<?php
setlocale(LC_TIME,"it_IT");
require "../includes/connect_config.php";
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD)
or die("<p> Errore di Connessione al DB: " . mysqli_error() . "</p>");
$db_selec = mysqli_select_db($conn, DB_NAME)
or die("<p>Errore di selezione DB: " . mysqli_error() . "</p>");
//query estrapolazione matrice turni
$get_turnazione_query = "SELECT turnazione.turnazione_data, lavoratore.lav_nome as id_lavoratore, orario_turno.orturno_etichetta as id_orario_turno
FROM turnazione
INNER JOIN lavoratore ON turnazione.id_lavoratore = lavoratore.id_lavoratore
INNER JOIN orario_turno ON turnazione.id_orario_turno = orario_turno.id_orario_turno";
$risultato = mysqli_query($conn, $get_turnazione_query);
if (!$risultato) {
die ("<p> Errore nella Query: " . mysqli_error() . "</p>");
}
//query estrapolazione array con etichette turni
$get_turni_query = "SELECT orario_turno.orturno_etichetta
FROM orario_turno
ORDER BY `orario_turno`.`orturno_livello` ASC";
$etichetta = mysqli_query($conn, $get_turni_query);
if (!$etichetta) {
die ("<p> Errore nella Query: " . mysqli_error() . "</p>");
}
//estrapolazione dati query in array con valori turnazione
$i="0";
while ($row = mysqli_fetch_array($risultato)) {
$data[$i] = $row['turnazione_data'];
$lavoratore[$i] = $row['id_lavoratore'];
$ora[$i] = $row['id_orario_turno'];
$i++;
}
//estrapolazione dati query in array con valori etichette turni
$i="0";
while ($row = mysqli_fetch_array($etichetta)) {
$baseore[$i] = $row['orturno_etichetta'];
$i++;
}
//conteggio indici
$contdata= count($data);
$contlav = count($lavoratore);
$contora = count($ora);
$contetichetta = count($baseore);
$giorno = "01";
$mese = "01";
$anno = "2019";
$totgiornimese = date("t", strtotime($mese . "/" . $giorno . "/" . $anno));
$z=0;
$x = 0;
echo "<br>";
//inizio tabella
echo "<table class='tab-turnazione'><tr><td> TURNI </td>";
//inizio ciclo data prima riga
$prog =0;
for ($i=0; $i < $totgiornimese; $i++ ){
echo "<td>" . date("d D", mktime(0,0,0,$mese, $giorno + $prog, $anno)) . "</td>";
$prog++;
}
echo "</tr>";
$prog =0;
$bool=0;
//inizio ciclo prima colonna etichette
for ($y=0; $y < $contetichetta; $y++){
echo "<tr>";
echo "<td>" . $baseore[$y] . "</td>";
$check_etichetta = $baseore [$y];
echo "ciclo etichetta " . $y . "<br>";
//inizio ciclo date da indice 0 a tot giorni mese
for($j=0; $totgiornimese >= $j; $j++){
$datatop = date("Y/m/d", mktime(0,0,0,$mese, $giorno + $prog, $anno));
echo "ciclo data " . $j . "<br>";
//inizio ciclo da indice 0 a tot lavoratori
for($x=0; $contlav >= $x; $x++){
echo " ciclo lav " . $x . "<br>";
if($ora[$x] == $check_etichetta){
//inizo ciclo da indice 0 a tot lavoratori con operatore logico per controllo etichetta e data
while($z < $contlav && $bool == 0 ){
echo " - while " . $z . "<br>";
$check_data = date("Y/m/d", strtotime($data[$z])); // da vedere
echo " " . $check_data . " = " . $datatop . " <br>";
if($check_data == $datatop){
echo "<td>" . $lavoratore[$x] . "</td>";
$bool = 1;
$prog + 1;
echo "ciclo stampa " . $x . " <br>";
} else{
echo "else " . $z . "<br>";
}
}
} else {
$x++;
}
}
}
//$j++;
echo "</tr>";
$bool = "0";
}
?>
questo codice stampa la prima riga e le prime due colonne quindi sicuramente è un problema di indici perche dovrebbe stampare una riga completa per chiuderla e passare alla seguente
Ultima modifica di un moderatore: