- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query vuota o con errore
-
Beh, ad un primo sguardo ti dico che c'è un errore quando utilizzi la funzione fetch_array: infatti la definizione della funzione (alla riga 31) prevede un solo parametro in ingresso, mentre nel ciclo while la richiami con 2 parametri.
Inoltre, $risultato non può essere una funzione: Il carattere $ è riservato per le variabili; se hai una funzione che si chiama 'risultato' dovresti utilizzarla in questo modo:
while ($linea = fetch_array(risultato(), MYSQL_ASSOC))
fermo restando che devi correggere la funzione fetch_array come ti ho detto all'inizio. Ciao
-
questa è la funzione:
function trovaiddip($id_dip)
{
$risultato = crea_recordset("select id_dip from dipendenti where id_dip = '" . $id_dip . "'");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea["id_dip"];
}
else
{
$ritorna = 0;
}e comunque scrivendo:
$linea = fetch_array($risultato);
richiamo la variabile della select comunque cosa intendi per 2 parametri?
while ($linea = fetch_array(risultato(), MYSQL_ASSOC))
anche se la scrivo così o cosi:
while ($linea = fetch_array($risultato))
mi da comunque errore ARGH!
-
A questo punto devi postarmi anche il codice della funzione crea_recordset...
-
<?php
function apri_connessione()
{
global $db_host;
global $db_user;
global $db_password;
global $db_name;/* Connessione e selezione del database */
$connessione = mysql_connect($db_host,$db_user,$db_password)
or die("Connessione non riuscita ". $db_host.$db_user.$db_password);mysql_select_db($db_name)
or die("Selezione del database non riuscita ". $db_name);return $connessione;
}
/* Chiusura della connessione /
function chiudi_connessione($connessione)
{
return mysql_close($connessione);
}
function lista_tabelle($connessione,$database)
{
return mysql_list_tables($database);
}
function fetch_array($risultato)
{
return mysql_fetch_array($risultato);
}
function num_fields($risultato)
{
return mysql_num_fields($risultato);
}
function field_name ($risultato, $i)
{
return mysql_field_name ($risultato, $i);
}
function field_type($risultato, $i)
{
return mysql_field_type($risultato, $i);
}
function crea_recordset($query)
{
/ Esecuzione di una query SQL /
$risultato = mysql_query($query)
or die("Query fallita ".$query);
return $risultato;
}
/ Liberazione delle risorse del risultato */
function chiudi_recordset($risultato)
{
mysql_free_result($risultato);
}
function sql_esegui($sql)
{
mysql_query($sql)
or die("Query fallita ".$sql);
}
?>
il problema è anche che se invece scrivowhile ($linea = mysql_fetch_row($risultato))
mi da
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\blabla
-
Il problema sta sicuramente nel fatto che in $risultato non c'è quello che ti aspetti che ci sia;
controlla che usi bene la connessione che ti restituisce la funzione 'apri_connessione'
ho notato poi una cosa che non mi quadra: nelle funzione trovaiddip fai questa cosa:
$risultato = crea_recordset("select id_dip from dipendenti where id_dip = '" . $id_dip . "'"
ovvero cerchi nel database una cosa che già conosci: stai chiedendo a mysql l'id del dipendente che ha id=id_dip: è come se chiedessi 'che numero ha il dipendente numero 4?'
se non riesci a risolvere postami per bene il codice della parte principale che gli do uno sguardo più approfondito
-
questo è il body
<?php
include('functions/funzioni.php');//Query
//$query = "Select id_dip, matricola,cognome, nome,ore_ordinarie from dipendenti order by matricola";
$query = "SELECT dipendenti.id_dip, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON ( dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
$query = $query . " order by dipendenti.matricola";//Aggiungo il pulsante per il default....
$arg = $HTTP_SERVER_VARS['REQUEST_URI'];
$str = "";//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Apertura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " <tr>\n";//Apertura del form per l'inserimento delle presenze
$str = $str . " <form name='inserisci_presenze' method='post' action='ins_pres_exec.php'>\n";//Apre la tabella
$str = $str . " <table border='0' width='630px'>\n";//Intestazione della tabella
$str = $str . " <tr>\n";
$str = $str . " <td width='10px' class='testa'>Maticola</td>\n";
$str = $str . " <td class='testa'>Cognome</td>\n";
$str = $str . " <td class='testa'>Nome</td>\n";
$str = $str . " <td width='10px' class='testa'>Ore Ordinarie</td>\n";
$str = $str . " <td width='10px' class='testa'>Stato</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di presenza</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di Assenza o Straordinario</td>\n";
$str = $str . " <td width='40px' class='testa'>Con Ticket</td>\n";
$str = $str . " </tr>\n";//Dati della tabella (lista dei dipendenti)
$conn = apri_connessione();
$risultato = crea_recordset($query);while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
//Riga dei dati
$id_dip = $linea["id_dip"];$stato_presenza = $linea['stato_presenza']; if($stato_presenza=='') $stato_presenza = 'NOT_SET'; $stato_presenza_reale = $linea['stato_presenza']; if($stato_presenza_reale=='') $stato_presenza_reale = 'NOT_SET'; if($stato_presenza=='NOT_SET') $str = $str . " <tr class='corpo_non_set'>\n"; else $str = $str . " <tr class='corpo'>\n";
//scorro l'array $linea per salvare il valore del campo
$str = $str . " <td>" . $linea['matricola'] . "</td>\n";
$str = $str . " <td>" . $linea['cognome'] . "</td>\n";
$str = $str . " <td>" . $linea['nome'] . "</td>\n";
$str = $str . " <td>" . $linea['ore_ordinarie'] . "</td>\n";if(($_GET['stato_default']!='') && ($stato_presenza=='NOT_SET')) $stato_presenza = $_GET['stato_default'];
//Disegno l'input box per lo stato e per le ore di assenza
$str = $str . "<td>".html_optionbox_presenze('stato',$id_dip,
$stato_presenza,$linea['ore_ordinarie'])."</td>";
//Campo ore presenza
$str = $str . " <td>\n";
$str = $str . " <input type='text' name='presenza" . $id_dip . "' id='testo" . $id_dip . "' ";
$str = $str . "value='" . ore_pres_dip($stato_presenza,$linea['ore_presenza'],$linea['ore_ordinarie']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Campo ore assenza
$disabilitato = "";
if($stato_presenza=='PRESENTE')
$disabilitato = 'disabled';$str = $str . " <td>\n";
$str = $str . " <input $disabilitato type='text' name='assenza" . $id_dip . "' id='aaaa" . $id_dip . "' ";
$str = $str . "value='" . ore_ass_dip($linea['ore_assenza']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Fine riga dei dati
//Campo verifica ticket
if($stato_presenza_reale=='NOT_SET')
$con_ticket = 'checked';
else
{
if($linea['con_ticket']=='1') $con_ticket = 'checked';
else $con_ticket = '';
}$str = $str . " <td>\n";
$str = $str . " <input type='checkbox' name='conticket" . $id_dip . "' id='conticket" . $id_dip . "' ";
$str = $str . "value='1' $con_ticket/>\n";
$str = $str . " </td>\n";
$str = $str . " </tr>\n";
}//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Bottone submit
$str = $str . " <tr>\n";
$str = $str . " <td><input type='submit' name='Esegui' value='Applica'></td>\n";
$str = $str . " </tr>\n";//Chiusura della tabella
$str = $str . " </table>\n";//Passo come parametro anche la data
$str = $str . "<input type='hidden' name='gg' value='" . $giorno . "'>";
$str = $str . "<input type='hidden' name='mm' value='" . $mese . "'>";
$str = $str . "<input type='hidden' name='aaaa' value='" . $anno . "'>";//Chiusura del form
$str = $str . " </form>\n";//Chiusura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " </tr>\n";
$str = $str . " </table>\n";
$str = $str . "</tr>\n";
$str = $str . "</table>";chiudi_recordset($risultato);
chiudi_connessione($conn);echo $str;
?>questo funzioni.php
<?php
function trovaidrep($reparto)
{
$risultato = crea_recordset("select id_rep from reparti where descrizione = '" . $reparto . "'");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea["id_rep"];
}
else
{
$ritorna = 0;
}chiudi_recordset($risultato);
return $ritorna;
}
function trovaidman($mansione)
{
$risultato = crea_recordset("select id_man from mansioni where descrizione = '" . $mansione . "'");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea["id_man"];
}
else
{
$ritorna = 0;
}chiudi_recordset($risultato);
return $ritorna;
}
function trovaidqual($qualifica)
{
$risultato = crea_recordset("select id_qual from qualifiche where descrizione = '" . $qualifica . "'");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea["id_qual"];
}
else
{
$ritorna = 0;
}chiudi_recordset($risultato);
return $ritorna;
}
function trovaiddip($id_dip)
{
$risultato = crea_recordset("select id_dip from dipendenti where id_dip = '" . $id_dip . "'");//Memorizzo il record
$linea = fetch_array($risultato(), MYSQL_ASSOC);if ($linea != false)
{
$ritorna = $linea["id_dip"];
}
else
{
$ritorna = 0;
}chiudi_recordset($risultato);
return $ritorna;
}
function trovaidtiporap($tiporap)
{
$risultato = crea_recordset("select id_tiporap from tipo_rapporto where descrizione = '" . $tiporap . "'");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea["id_tiporap"];
}
else
{
$ritorna = 0;
}chiudi_recordset($risultato);
return $ritorna;
}/*function dip_status($id_dip, $gg, $mm, $aaaa)
{
global $lista_presenze_colore,$colore_assenza_defaul;$str = "select stato_presenza from presenze ";
$str = $str . "where (id_dip=" . $id_dip . ") and ";
$str = $str . "(giorno=" . $gg . ") and ";
$str = $str . "(mese=" . $mm . ") and ";
$str = $str . "(anno=" . $aaaa . ")";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);
if ($linea != false)
{
if(isset($lista_presenze_colore[$linea['stato_presenza']]))
$ritorna = $lista_presenze_colore[$linea['stato_presenza']];
else
$ritorna = $colore_assenza_defaul;
}
else
{
$ritorna = $lista_presenze_colore['NOT_SET'];
}chiudi_recordset($risultato);
return $ritorna;
}
*/
function dip_status_dato($stato)
{
global $lista_presenze_colore,$colore_assenza_defaul;if(isset($lista_presenze_colore[$stato]))
$ritorna = $lista_presenze_colore[$stato];
else
$ritorna = $colore_assenza_defaul;return $ritorna;
}function dip_status_stampa_dato($stato,$ore_presenza,$ore_assenza)
{
global $lista_presenze;$ritorna = "<table class='corpo_mastrino' cellpadding='0' cellspacing='0' border='0'>";
$ritorna = $ritorna . "<tr><td>$ore_presenza</td></tr>";
$ritorna = $ritorna . "<tr><td>$ore_assenza";if(($stato!= 'NOT_SET') &&($stato!= 'PRESENTE'))
$ritorna = $ritorna . $lista_presenze[$stato];$ritorna = $ritorna . "</td></tr></table>";
return $ritorna;
}function count_dip_status($id_dip, $mm, $aaaa)
{
$str = "SELECTstato_presenza
, sum(ore_assenza
) as tot_ass,";
$str = $str . " sum(ore_presenza
) as tot_pres";
$str = $str . " FROMpresenze
";
$str = $str . " where (id_dip=" . $id_dip . ") and ";
$str = $str . " (mese=" . $mm . ") and ";
$str = $str . " (anno=" . $aaaa . ")";
$str = $str . " GROUP BYstato_presenza
";$ritorno = array();
$ritorno['PRESENTE'] = 0;//Loop sui record
$risultato = crea_recordset($str);while ($linea = fetch_array($risultato))
{
$tipo = $linea['stato_presenza'];
if ($tipo!='NOT_SET')
{
if($tipo!='PRESENTE')
$ritorno[$tipo] = $linea['tot_ass'];$ritorno['PRESENTE'] = $ritorno['PRESENTE'] + $linea['tot_pres']; }
}
chiudi_recordset($risultato);
return $ritorno;
}
function dip_status_let($id_dip, $gg, $mm, $aaaa)
{
//Array dei colori da visualizzare
$str = "select stato_presenza from presenze ";
$str = $str . "where (id_dip=" . $id_dip . ") and ";
$str = $str . "(giorno=" . $gg . ") and ";
$str = $str . "(mese=" . $mm . ") and ";
$str = $str . "(anno=" . $aaaa . ")";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);
if ($linea != false)
{
if($linea['stato_presenza']=='')
$ritorna = 'NOT_SET';
else
$ritorna = $linea['stato_presenza'];
}
else
{
$ritorna = 'NOT_SET';
}chiudi_recordset($risultato);
return $ritorna;
}
/*function dip_status_print($id_dip, $gg, $mm, $aaaa)
{
//Array dei colori da visualizzare
$status['PRESENTE'] = "Pre";
$status['STRAORDINARIO'] = "Stra";
$status['ASSENTE'] = "Ass";
$status['MALATTIA'] = "Mal";
$status['NFORTUNIO'] = "Inf";
$status['PERMESSO'] = "Per";
$status['FERIE'] = "Fer";
$status['NOT_SET'] = " ";$str = "select stato_presenza from presenze ";
$str = $str . "where (id_dip=" . $id_dip . ") and ";
$str = $str . "(giorno=" . $gg . ") and ";
$str = $str . "(mese=" . $mm . ") and ";
$str = $str . "(anno=" . $aaaa . ")";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);
if ($linea != false)
{
$ritorna = $status[$linea['stato_presenza']];
}
else
{
$ritorna = $status['NOT_SET'];
}chiudi_recordset($risultato);
return $ritorna;
}*/
//Calcolo ferie residue
function ferie_residue($id_dip)
{
$ore_fer = 0;
$ferie_maturate = 0;//*********Calcolo il numero di ore di ferie
$str = "select SUM(ore_assenza) from presenze ";
$str = $str . "where (id_dip=" . $id_dip . ") and ";
$str = $str . "(stato_presenza='FERIE')";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);if ($linea != false)
{
$ore_fer = $linea['SUM(ore_assenza)'];
}chiudi_recordset($risultato);
//*********Calcolo il numero di ore di ferie//*********Calcolo il numero di ore di ferie maturate
$str = "select SUM(ore_maturate) from ferie_maturate ";
$str = $str . "where (id_dip=" . $id_dip . ")";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);if ($linea != false)
{
$ferie_maturate = $linea['SUM(ore_maturate)'];
}chiudi_recordset($risultato);
//*********Calcolo il numero di ore di ferie maturate$res = $ferie_maturate - $ore_fer;
return $res;
}//Calcolo permessi residui
function permessi_residui($id_dip)
{
$ore_per = 0;
$ferie_maturate = 0;//*********Calcolo il numero di ore di permessi
$str = "select SUM(ore_assenza) from presenze ";
$str = $str . "where (id_dip=" . $id_dip . ") and ";
$str = $str . "(stato_presenza='PERMESSO')";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);if ($linea != false)
{
$ore_per = $linea['SUM(ore_assenza)'];
}chiudi_recordset($risultato);
//*********Calcolo il numero di ore di permessi//*********Calcolo il numero di ore di PERMESSI maturati
$str = "select SUM(ore_permessi_mat) from ferie_maturate ";
$str = $str . "where (id_dip=" . $id_dip . ")";$risultato = crea_recordset($str);
$linea = fetch_array($risultato);if ($linea != false)
{
$ferie_maturate = $linea['SUM(ore_permessi_mat)'];
}chiudi_recordset($risultato);
//*********Calcolo il numero di ore di ferie maturate$res = $ferie_maturate - $ore_per;
return $res;
}
function ore_ass_dip($ore_ass)
{
if (isset($ore_ass))
return $ore_ass;
else
return '0';
}function ore_pres_dip($stato,$ore,$ore_ordinarie)
{
if (isset($ore))
$ritorna = $ore;
else
{
$ritorna = valore_default_pres($stato,$ore_ordinarie);
}
return $ritorna;
}
function setup($campo)
{
//Mi cerca il valore de campo specificato
$risultato = crea_recordset("select $campo from setup");//Memorizzo il record
$linea = fetch_array($risultato);if ($linea != false)
{
$ritorna = $linea[$campo];
}
else
{
$ritorna = "";
}chiudi_recordset($risultato);
return $ritorna;
}
function stampa_valore($valore)
{
if($valore=='')
return " ";
else
return $valore;
}
function valore_default_pres($stato,$ore_ordinarie)
{
if (($stato == 'PRESENTE')||($stato == 'STRAORDINARIO')) return $ore_ordinarie;
else return 0;
}
?>
-
... che questo codice l'ha scritto un collega andato via, e (ho postato l'originale)
mi è stato chiesto di fare una vista dipendenti e non amministratore, allora ho modificato il codice pensando di far vedere a ogni utente solo il proprio dato (pensando che ci vuole filtro per ID e il gioco è fatto!),
l'originale funziona ma fa vedere e modificare tutti gli utenti e ovviamente invece ognuno deve vedere solo il suo dato...ecco il mio modificato, non mi pare di aver fatto casini... ma sicuramente da qualche parte ho toppato...
<?php
include('functions/funzioni.php');
if (isset($_SESSION['id_dip']));
$id_dip=$_SESSION['id_dip'];
$conn = apri_connessione();
$query = "SELECT dipendenti.id_dip, dipendenti.id_liv, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON (dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE dipendenti.id_dip = $id_dip AND ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
//$query = $query . " order by dipendenti.matricola";//Aggiungo il pulsante per il default....
$arg = $HTTP_SERVER_VARS['REQUEST_URI'];
$str = "";//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Apertura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " <tr>\n";//Apertura del form per l'inserimento delle presenze
$str = $str . " <form name='inserisci_presenze' method='post' action='ins_pres_exec.php'>\n";//Apre la tabella
$str = $str . " <table border='0' bgcolor='#ffffff' width='630px'>\n";//Intestazione della tabella
$str = $str . " <tr>\n";
$str = $str . " <td width='10px' bgcolor='#ffffff' class='testa'>Maticola</td>\n";
$str = $str . " <td class='testa'>Cognome</td>\n";
$str = $str . " <td class='testa'>Nome</td>\n";
$str = $str . " <td width='10px' class='testa'>Ore Ordinarie</td>\n";
$str = $str . " <td width='10px' class='testa'>Stato</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di presenza</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di Assenza o Straordinario</td>\n";
$str = $str . " <td width='40px' class='testa'>Con Ticket</td>\n";
$str = $str . " </tr>\n";
//Dati della tabella (lista dei dipendenti)
//echo $query;
while ($linea = fetch_array($risultato, MYSQL_ASSOC))
{
//Riga dei dati
$id_dip = $linea["id_dip"];$stato_presenza = $linea['stato_presenza']; if($stato_presenza=='') $stato_presenza = 'NOT_SET'; $stato_presenza_reale = $linea['stato_presenza']; if($stato_presenza_reale=='') $stato_presenza_reale = 'NOT_SET'; if($stato_presenza=='NOT_SET') $str = $str . " <tr class='corpo_non_set'>\n"; else $str = $str . " <tr class='corpo'>\n";
//scorro l'array $linea per salvare il valore del campo
$str = $str . " <td>" . $linea['matricola'] . "</td>\n";
$str = $str . " <td>" . $linea['cognome'] . "</td>\n";
$str = $str . " <td>" . $linea['nome'] . "</td>\n";
$str = $str . " <td>" . $linea['ore_ordinarie'] . "</td>\n";if(($_GET['stato_default']!='') && ($stato_presenza=='NOT_SET')) $stato_presenza = $_GET['stato_default'];
//Disegno l'input box per lo stato e per le ore di assenza
$str = $str . "<td>".html_optionbox_presenze('stato',$id_dip,
$stato_presenza,$linea['ore_ordinarie'])."</td>";
//Campo ore presenza
$str = $str . " <td>\n";
$str = $str . " <input type='text' name='presenza" . $id_dip . "' id='testo" . $id_dip . "' ";
$str = $str . "value='" . ore_pres_dip($stato_presenza,$linea['ore_presenza'],$linea['ore_ordinarie']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Campo ore assenza
$disabilitato = "";
if($stato_presenza=='PRESENTE')
$disabilitato = 'disabled';$str = $str . " <td>\n";
$str = $str . " <input $disabilitato type='text' name='assenza" . $id_dip . "' id='aaaa" . $id_dip . "' ";
$str = $str . "value='" . ore_ass_dip($linea['ore_assenza']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Fine riga dei dati
//Campo verifica ticket
if($stato_presenza_reale=='NOT_SET')
$con_ticket = 'checked';
else
{
if($linea['con_ticket']=='1') $con_ticket = 'checked';
else $con_ticket = '';
}$str = $str . " <td>\n";
$str = $str . " <input type='checkbox' name='conticket" . $id_dip . "' id='conticket" . $id_dip . "' ";
$str = $str . "value='1' $con_ticket/>\n";
$str = $str . " </td>\n";
$str = $str . " </tr>\n";
}//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Bottone submit
$str = $str . " <tr>\n";
$str = $str . " <td><input type='submit' name='Esegui' value='Applica'></td>\n";
$str = $str . " </tr>\n";//Chiusura della tabella
$str = $str . " </table>\n";//Passo come parametro anche la data
$str = $str . "<input type='hidden' name='gg' value='" . $giorno . "'>";
$str = $str . "<input type='hidden' name='mm' value='" . $mese . "'>";
$str = $str . "<input type='hidden' name='aaaa' value='" . $anno . "'>";
//Chiusura del form
$str = $str . " </form>\n";//Chiusura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " </tr>\n";
$str = $str . " </table>\n";
$str = $str . "</tr>\n";
$str = $str . "</table>";
//echo "Ciao " . $_SESSION['id_dip'] ;
chiudi_recordset($risultato);
chiudi_connessione($conn);echo $str;
echo $query
?>
-
Allora:
partendo dal codice del tuo collega prova a sostituire il pezzo:
[php]//Query
//$query = "Select id_dip, matricola,cognome, nome,ore_ordinarie from dipendenti order by matricola";
$query = "SELECT dipendenti.id_dip, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON ( dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
$query = $query . " order by dipendenti.matricola";
[/php]con:[php]
if (isset($_SESSION['id_dip'])){
$id_dip=$_SESSION['id_dip'];
$query = "SELECT dipendenti.id_dip, dipendenti.id_liv, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON (dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE dipendenti.id_dip = $id_dip AND ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
//$query = $query . " order by dipendenti.matricola";
}else{
$query = "SELECT dipendenti.id_dip, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON ( dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
$query = $query . " order by dipendenti.matricola";
}[/php]
in questo modo se nella sessione c'è id_dip il codice cerca nel db solo i dati relativi a quel dipendente, che era la tua idea originaria...Spero di esserti stato utile.
-
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Programmi\easyphp\www\gestione_dipendenti\functions\db_functions.php on line 33
Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in C:\Programmi\easyphp\www\gestione_dipendenti\functions\db_functions.php on line 63
mi ridà il solito errore poi fa vedere l'intestazione della tabella ma non il dato e la query passa id_dip:
SELECT dipendenti.id_dip, dipendenti.id_liv, dipendenti.matricola, dipendenti.cognome, dipendenti.nome, dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza, presenze.con_ticket FROM dipendenti LEFT JOIN presenze ON (dipendenti.id_dip = presenze.id_dip AND presenze.giorno = 19 AND presenze.mese = 5 AND presenze.anno = 2008) WHERE dipendenti.id_dip = 4 AND ((UNIX_TIMESTAMP('2008-5-19') - UNIX_TIMESTAMP( dipendenti.
data_fine_rapp
)) <=0) OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)db_functions.php
[php]
<?php
/* Liberazione delle risorse del risultato */
function apri_connessione()
{
global $db_host;
global $db_user;
global $db_password;
global $db_name;/* Connessione e selezione del database */
$connessione = mysql_connect($db_host,$db_user,$db_password)
or die("Connessione non riuscita ". $db_host.$db_user.$db_password);mysql_select_db($db_name)
or die("Selezione del database non riuscita ". $db_name);return $connessione;
}
/* Chiusura della connessione /
function chiudi_connessione($connessione)
{
return mysql_close($connessione);
}
function lista_tabelle($connessione,$database)
{
return mysql_list_tables($database);
}
function fetch_array($risultato)
{
return mysql_fetch_array($risultato);
}
function num_fields($risultato)
{
return mysql_num_fields($risultato);
}
function field_name ($risultato, $i)
{
return mysql_field_name ($risultato, $i);
}
function field_type($risultato, $i)
{
return mysql_field_type($risultato, $i);
}
function crea_recordset($query)
{
/ Esecuzione di una query SQL /
$risultato = mysql_query($query)
or die("Query fallita ".$query);
return $risultato;
}
/ Liberazione delle risorse del risultato */
function chiudi_recordset($risultato)
{
mysql_free_result($risultato);
}
function sql_esegui($sql)
{
mysql_query($sql)
or die("Query fallita ".$sql);
}
?>
[/php]
-
hai provato a farti visualizzare il risultato della query, ovvero il contenuto di $risultato?
-
eccolo pare che l'id lo trova ma solo quello è giusto o no trova altro?
echo $risultato;
Resource id #4
-
il codice scritto dal collega funzionava? tu hai toccato solo la query? se si, allora mi pare evidente che il problema è nella query. Hai provato a lanciare la query da un client MySQL per verificare cosa ritorna? Se ritorna quello che ti aspetti allora si cerca da qualche altra parte, altrimenti si aggiusta la query.
Io non sono risciuto a capire molto nel codice anche perchè dentro il forum risulta sformattato e confuso, a naso direi che la tua aggiunta della condizione in AND è sbagliata:
prima avevi:
** cond1=true or cond2=true**
poi:**
cond0=true and cond1=true or cond2=true**
secondo me andrebbe scritto
** cond0=true and (cond1=true or cond2=true)**
-
rilasciava tutti i dip
io ho aggiunto solo dipendenti.id_dip = $id_dip AND dopo il WHERE
[php]
if (isset($_SESSION['id_dip'])){
$id_dip=$_SESSION['id_dip'];
$query = "SELECT dipendenti.id_dip, dipendenti.id_liv, dipendenti.matricola, dipendenti.cognome, dipendenti.nome,
dipendenti.ore_ordinarie, presenze.stato_presenza, presenze.ore_assenza, presenze.ore_presenza,presenze.con_ticket
FROM dipendenti LEFT JOIN presenze ON (dipendenti.id_dip = presenze.id_dip
AND presenze.giorno = $giorno
AND presenze.mese = $mese
AND presenze.anno = $anno)";
$query = $query . " WHERE dipendenti.id_dip = $id_dip AND ((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0)";
//$query = $query . " order by dipendenti.matricola";//Aggiungo il pulsante per il default....
$arg = $HTTP_SERVER_VARS['REQUEST_URI'];
$str = "";//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Apertura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " <tr>\n";//Apertura del form per l'inserimento delle presenze
$str = $str . " <form name='inserisci_presenze' method='post' action='ins_pres_exec.php'>\n";//Apre la tabella
$str = $str . " <table border='0' width='630px'>\n";//Intestazione della tabella
$str = $str . " <tr>\n";
$str = $str . " <td width='10px' class='testa'>Maticola</td>\n";
$str = $str . " <td class='testa'>Cognome</td>\n";
$str = $str . " <td class='testa'>Nome</td>\n";
$str = $str . " <td width='10px' class='testa'>Ore Ordinarie</td>\n";
$str = $str . " <td width='10px' class='testa'>Stato</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di presenza</td>\n";
$str = $str . " <td width='40px' class='testa'>Ore di Assenza o Straordinario</td>\n";
$str = $str . " <td width='40px' class='testa'>Con Ticket</td>\n";
$str = $str . " </tr>\n";//Dati della tabella (lista dei dipendenti)
$conn = apri_connessione();
$risultato = crea_recordset($query);while ($linea = mysql_fetch_array($risultato, MYSQL_ASSOC))
{
//Riga dei dati
$id_dip = $linea["id_dip"];$stato_presenza = $linea['stato_presenza'];
if($stato_presenza=='')
$stato_presenza = 'NOT_SET';
$stato_presenza_reale = $linea['stato_presenza'];
if($stato_presenza_reale=='')
$stato_presenza_reale = 'NOT_SET';if($stato_presenza=='NOT_SET')
$str = $str . " <tr class='corpo_non_set'>\n";
else
$str = $str . " <tr class='corpo'>\n";//scorro l'array $linea per salvare il valore del campo
$str = $str . " <td>" . $linea['matricola'] . "</td>\n";
$str = $str . " <td>" . $linea['cognome'] . "</td>\n";
$str = $str . " <td>" . $linea['nome'] . "</td>\n";
$str = $str . " <td>" . $linea['ore_ordinarie'] . "</td>\n";if(($_GET['stato_default']!='') && ($stato_presenza=='NOT_SET'))
$stato_presenza = $_GET['stato_default'];//Disegno l'input box per lo stato e per le ore di assenza
$str = $str . "<td>".html_optionbox_presenze('stato',$id_dip ,
$stato_presenza,$linea['ore_ordinarie'])."</td>";
//Campo ore presenza
$str = $str . " <td>\n";
$str = $str . " <input type='text' name='presenza" . $id_dip . "' id='testo" . $id_dip . "' ";
$str = $str . "value='" . ore_pres_dip($stato_presenza,$linea['ore_presenza'],$linea['ore_ordinarie']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Campo ore assenza
$disabilitato = "";
if($stato_presenza=='PRESENTE')
$disabilitato = 'disabled';$str = $str . " <td>\n";
$str = $str . " <input $disabilitato type='text' name='assenza" . $id_dip . "' id='aaaa" . $id_dip . "' ";
$str = $str . "value='" . ore_ass_dip($linea['ore_assenza']) . "' size='10'></input>\n";
$str = $str . " </td>\n";//Fine riga dei dati
//Campo verifica ticket
if($stato_presenza_reale=='NOT_SET')
$con_ticket = 'checked';
else
{
if($linea['con_ticket']=='1') $con_ticket = 'checked';
else $con_ticket = '';
}$str = $str . " <td>\n";
$str = $str . " <input type='checkbox' name='conticket" . $id_dip . "' id='conticket" . $id_dip . "' ";
$str = $str . "value='1' $con_ticket/>\n";
$str = $str . " </td>\n";
$str = $str . " </tr>\n";
}//Spaziatura
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";
$str = $str . " <tr>\n </tr>\n";//Bottone submit
$str = $str . " <tr>\n";
$str = $str . " <td><input type='submit' name='Esegui' value='Applica'></td>\n";
$str = $str . " </tr>\n";//Chiusura della tabella
$str = $str . " </table>\n";//Passo come parametro anche la data
$str = $str . "<input type='hidden' name='gg' value='" . $giorno . "'>";
$str = $str . "<input type='hidden' name='mm' value='" . $mese . "'>";
$str = $str . "<input type='hidden' name='aaaa' value='" . $anno . "'>";//Chiusura del form
$str = $str . " </form>\n";//Chiusura della riga nella quale è contenuta
//la tabella per il form d'inserimento
$str = $str . " </tr>\n";
$str = $str . " </table>\n";
$str = $str . "</tr>\n";
$str = $str . "</table>";chiudi_recordset($risultato);
chiudi_connessione($conn);echo $str;
?>[/php]
per trovare un solo dip a questo punto così com'è li trova tutti e non va in errore m a ame serve solo il corrispondente dell ID inviato in sessione
-
ti sei perso il pezzo più importante della mia risposta
te lo traduco, usa le tre righe sotto:
$query = $query . " WHERE dipendenti.id_dip = $id_dip AND (((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0))";
-
nel senso che non essendo esperto mi perdo proprio sulla tua trad... non ci arrivo..
ergo?mi puoi spiegare meglio?
grazie
-
direi che la tua aggiunta della condizione in AND è sbagliata:
prima avevi:
** cond1=true or cond2=true**
poi:**
cond0=true and cond1=true or cond2=true**
secondo me andrebbe scritto
** cond0=true and (cond1=true or cond2=true)ovvero:
** te lo traduco, usa le tre righe sotto:
$query = $query . " WHERE dipendenti.id_dip = $id_dip AND (((UNIX_TIMESTAMP('$anno-$mese-$giorno') - ";
$query = $query . " UNIX_TIMESTAMP( dipendenti.data_fine_rapp
)) <=0)";
$query = $query . " OR (UNIX_TIMESTAMP( dipendenti.data_fine_rapp
) =0))";SOSTITUISCI LE TRE RIGHE SOPRA ALLE CORRISPONDENTI SUL TUO CODICE
quale parte non è chiara?
-
ho fatto in questo modo:
$query = $query . " WHERE ((((UNIX_TIMESTAMP('$anno-$mese-$giorno') - UNIX_TIMESTAMP(dipendenti.
data_fine_rapp
)) <=0) OR (UNIX_TIMESTAMP(dipendenti.data_fine_rapp
) =0))) and dipendenti.id_dip = $id_dip";Pare funzionare!
anche se non ho ancora capito cosa volevi dire...:?
-
anche se non ho ancora capito cosa volevi dire...:?
-
quelli che hanno avuto pazienza e mi hanno aiutato!:)