Visualizzazione risultati 1 fino 5 di 5
Like Tree1Likes
  • 1 Post By pierinik

Discussione: Strano problema con una query

  1. #1
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito Strano problema con una query

    Salve a tutti.
    Dopo aver costruito con l'aiuto di questo forum la query che mi serviva per la ricerca mensile e che ricopio qui sotto:
    Codice PHP:
    $sql="SELECT * FROM ospix, residenti, salastudio WHERE residente=cod_res and ospite=id_SalaStudio AND data_visita BETWEEN '$anno-$mese-01' AND DATE_ADD('$anno-$mese-01', INTERVAL 1 MONTH)";
    e che funziona perfettamente al suo scopo, avrei bisogno di creare un file in excel.
    Cosa che ho già fatto in altre occassioni.
    Per questo ricarico la pagina in altro file, ma la query stavolta non produce risultati.
    Eppure la query è la stessa:
    Allego l'intero file incriminato essendo molto essenziale:
    Codice PHP:
    <?
    $filename
    = "mensile.xls";
    header ("Content-Type: application/vnd.ms-excel");
    header ("Content-Disposition: inline; filename=$filename");
    ?>
    <html>
    <head>
    <title>Residenza Sassi Masini</title>
    <link rel="icon" href="../favicon.ico" />
    <style>

    table {
    border-collapse: collapse;
    }

    table, td, th {
    border: 0px solid black;
    }

    </style>
    </head>
    <body>

    <?php
    include("../collega.php");
    $mese = $_POST['mesi'];
    $anno = $_POST['anni'];

    // controllo valori importati
    echo $mese.' - mese<br />';
    echo
    $anno.' - anno <br />';

    echo
    '
    <table style="border: 1px solid #000000" align="center" cellpadding="0" cellspacing="10" width="100%" >
    <tr>
    <td text-align: center;"><b>Nr.</b></div></td>
    <td style="text-align: center;"><b>Data</b></td>
    <td style="text-align: center;"><b>Cognome</b></td>
    <td style="text-align: center;"><b>Nome Residente</b></td>
    <td style="text-align: right;"><b>Camera</b>&nbsp</td>
    <td >&nbsp <b>Cognome</b></td>
    <td >&nbsp <b>Nome Ospite</b></td>
    <td width="80px" style="text-align: center;"><b>Entrata</b></td>
    <td width="80px" style="text-align: center;" ><b>Uscita</b></div></td>

    </tr> '
    ;

    $sql="SELECT * FROM ospix, residenti, salastudio WHERE residente=cod_res and ospite=id_SalaStudio AND data_visita BETWEEN '$anno-$mese-01' AND DATE_ADD('$anno-$mese-01', INTERVAL 1 MONTH)";
    $res = $mysqli->query($sql);

    $cont=1 ;

    function
    data_it($data)
    {
    // Creo una array dividendo la data YYYY-MM-DD sulla base del trattino
    $array = explode("-", $data);
    // Riorganizzo gli elementi in stile DD/MM/YYYY
    $data_it = $array[2]."/".$array[1]."/".$array[0];
    // Restituisco il valore della data in formato italiano
    return $data_it; }

    // ciclo per elencare i dati
    while ($row = $res->fetch_object())

    {


    echo
    '

    <tr >
    <td align="right">'
    . $cont++ . '&nbsp</td>
    <td style="border-left: 1px solid #000000" align="center">'
    . data_it($row->data_visita). '</td>
    <td align="left">'
    . $row->cognome_res. '</td>
    <td align="left">'
    . $row->nome_res . '</td>
    <td align="right">'
    . $row->camera_res . '&nbsp</td>
    <td align:left; ">&nbsp '
    . $row->cognome. '</td>
    <td align:left; ">&nbsp '
    . $row->nome . '</td>
    <td align="center">'
    . $row->ora_entrata . '</td>
    <td align="center">'
    . $row->ora_uscita . '</td>
    </tr>'
    ;}
    echo
    '</table>';
    echo
    '<br /><br /> - Query<br />'.$sql;
    // chiusura della connessione
    $mysqli->close();
    ?>
    </body>
    </html>
    allego anche un'immagine con il risultato che ottengo, dove si vede che i valori $mese e $anno vengono recuperati e compaiono nella query in questione.

    Veramente non capisco il perchè.
    Quello sotto invece è il risultato della query corretta nel file con la stessa query.

    Qualcuno sa aiutarmi ?
    Grazie
    Ultima modifica di pierinik : 05-01-2019 alle ore 08.55.19

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Così a naso potrebbe esserci qualche problema nell'interrogazione della base di dati. Prova ad aggiungere il codice per mostrare gli errori, oltre a
    Codice PHP:
    $res = $mysqli->query($sql);
    Usa:
    Codice PHP:
    $res = $mysqli->query($sql);
    if (!
    $res) {
    die(
    $mysqli->error);
    }
    e vediamo cosa dice.

    I suggerimenti che do più spesso:


  3. #3
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Grazie della risposta.
    Purtroppo (devo dire purtroppo) l'if aggiunto non rileva nessun errore.
    Tutto come prima.

  4. #4
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Ho fatto una prova su PhpMyAdmin.
    Ho copiato la stringa $sql che viene stampata sulla pagina.
    Cioè quella sotto, dove c'è appunto SELECT - FROM ...:


    PhpMyAdmin mi manda due avvisi uguali:
    Warning: #1292 Incorrect datetime value: ' 2018 - 12 -01'
    In effetti guardando meglio il risultato la data ha i valori giusti, ma vengono scritti con degli spazi che in teoria non ci sono nella query scritta.

    Infatti se ricopio la query e inserisco le due date a mano
    Codice PHP:
    SELECT * FROM ospix, residenti, salastudio WHERE residente=cod_res and ospite=id_SalaStudio AND data_visita BETWEEN '2018-12-01' AND DATE_ADD('2018-12-01', INTERVAL 1 MONTH)
    poi funziona.

    Forse in qualche modo vengono inseriti degli spazi ?
    Come faccio a toglierli e ad inserire la data corretta ?
    Grazie

  5. #5
    pierinik non è connesso Utente
    Data registrazione
    26-03-2010
    Messaggi
    122

    Predefinito

    Forse stavolta ci sono riuscito.
    Ho modificato così la stringa della variabile:
    Codice PHP:
    $mese = trim(str_replace("","",$mese));
    $anno = trim(str_replace("","",$anno));
    e adesso è tornato tutto funzionante.

    Il problema era dato dal fatto che venivano inseriti degli spazi nelle variabili che scaricavo dal FORM.
    Codice PHP:
    $mese = $_POST['mesi'];
    $anno = $_POST['anni'];
    Mi rimane da capire come sia possibile.
    Grazie agli amici di altervista
    mzanella likes this.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •