• User Attivo

    Query vuota o con errore

    Ciao a tutti
    ho un problema e non riesco a venirne a capo...
    (premesso che non sono un veterano di php)
    ho una query (questo è il risultato in echo):

    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 = 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)

    di logica dovrebbe selezionarmi il dipendente con ID = 4 se lo richiamo per visualizzarlo con:

    while ($linea = fetch_array($risultato, MYSQL_ASSOC))
    {
    //Riga dei dati
    $id_dip = $linea["id_dip"];

    etc etc

    dove $risultato è una funzione
    mi da errore:

    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

    dove le righe sono queste...

    31 function fetch_array($risultato)
    32 {
    33 return mysql_fetch_array($risultato);
    34 }

    61 function chiudi_recordset($risultato)
    62 {
    63 mysql_free_result($risultato);
    64 }

    Qualcuno può aiutarmi? :arrabbiato: ho cercato ne forum ma no ho trovato nulla

    grazie!


  • User

    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


  • User Attivo

    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!


  • User

    A questo punto devi postarmi anche il codice della funzione crea_recordset...


  • User Attivo

    <?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 scrivo

    while ($linea = mysql_fetch_row($risultato))

    mi da
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\blabla


  • User

    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


  • User Attivo

    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 = "SELECT stato_presenza , sum( ore_assenza ) as tot_ass,";
    $str = $str . " sum( ore_presenza ) as tot_pres";
    $str = $str . " FROM presenze";
    $str = $str . " where (id_dip=" . $id_dip . ") and ";
    $str = $str . " (mese=" . $mm . ") and ";
    $str = $str . " (anno=" . $aaaa . ")";
    $str = $str . " GROUP BY stato_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;
    }
    ?>


  • User Attivo

    ... 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
    ?>


  • User

    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.


  • User Attivo

    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]
    :mmm:


  • User

    hai provato a farti visualizzare il risultato della query, ovvero il contenuto di $risultato?


  • User Attivo

    eccolo pare che l'id lo trova ma solo quello è giusto o no trova altro?

    echo $risultato;

    Resource id #4


  • Bannato User Attivo

    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)**


  • User Attivo

    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


  • Bannato User Attivo

    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))";


  • User Attivo

    nel senso che non essendo esperto mi perdo proprio sulla tua trad... non ci arrivo..
    ergo?

    mi puoi spiegare meglio?

    grazie


  • Bannato User Attivo

    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?


  • User Attivo

    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...:?


  • Bannato User Attivo

    anche se non ho ancora capito cosa volevi dire...:?
    :eheh:


  • User Attivo

    quelli che hanno avuto pazienza e mi hanno aiutato!:)