Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [MYSQL] problema query confronto date

    salve a tutti

    sono un nuovo utente, ma ho sempre usato il vostro forum per problemi nella programmazione.
    Detto questo, ho un problema nel programma che vi posto di seguito:

    Codice PHP:
    $sql="SELECT * FROM elemento WHERE scadenza < STR_TO_DATE('".$valore"' , '%d/%m/%y') ORDER BY ".$ordine." ".$ascesa.";";}
    // Esecuzione della query
    $res mysql_query($sql);
    if (!
    $res)
    {
     echo 
    "Errore nella query: ".$sql."<br>Errore:".mysql_error();
     exit();
    }
    // Visualizzazione del risultato della query
     
    $riga mysql_fetch_array($res);
     if (!
    $riga)
    {
     echo 
    "Nessuna riga estratta !!";
     echo 
    "Errore nella query: ".$sql."<br>Errore:".mysql_error();
     exit();
    }
    while (
    $riga
    {
     echo 
    "Nome:  <b>".$riga["nome"]."</b>   quantita'  <b>".$riga["quantita"]."</b>   scadenza  <b>".$riga["scadenza"]."</b>   codice a barre  <b>".$riga["codice"]."</b>   descrizione  <b>".$riga["descrizione"]."</b><br>";$riga mysql_fetch_array($res);

    il problema è che qualsiasi sia il valore di $valore, la query non mi restituisce nulla, e il programma non da errore, ma dice solo riga non estratta.
    Stampando la query, vedo che sintatticamente è giusta, infatti, eseguendola in mysql query browser, funziona, ma integrata in php non funziona.

    qualche idea? Grazie in anticipo

  2. #2
    Cosa contiene $valore? prova anche al posto della if(!$res) mettere solo:

    $res = mysql_query($sql) OR DIE(mysql_error());

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Allora in $valore c'è la data passata tramite una casella di <input type="text"> e contiene la data nello stesso formato di mysql, ovvero
    yyyy-mm-dd.

    ho provato ad effettuare il cambiamento che mi hai suggerito, ma niente...
    per vedere cosa mi veniva visualizzato in $valore, ho inserito una stampa della query eseguita da mysql, la quale è ad esempio

    SELECT * FROM elemento WHERE scadenza < STR_TO_DATE('2021-02-03' , '%d/%m/%y') ORDER BY nome ASC;

    se io la stessa stringa la eseguo su mysql query browser, funziona.... non ci sto capendo niente!
    l'ipotesi che ho avuto in questi giorni, è che forse il formato di $valore non è compatibile con DATE di mysql, e per questo ho usato la funzione STR_TO_DATE per trasformare la "ipotetica" stringa $valore in un valore DATE, ma non fa....

  4. #4
    WHERE scadenza < STR_TO_DATE('2021-02-03' , '%d/%m/%y')

    Era quello che pensavo. Fai un errore nell'impostazione della funzione.

    La data '2021-02-03' NON deve essere trasformata perche' e' gia' in formato corretto.
    WHERE scadenza < '$valore'

    La funzione STR_TO_DATE() cerca di estrarre una data in formato ANSI da una data non ANSI es.: 03/02/2021
    La prima opzione della funzione indica la stringa, la seconda indica quali sono i valori della stringa immessa.

    Sarebbe valida nel tuo caso fosse:

    STR_TO_DATE('03/02/2021' , '%d/%m/%Y')

    Altri esempi:
    select str_to_date('02, 26, 2013', '%m, %d, %Y') -> 2013-02-26
    select str_to_date('data di oggi 6/2/14', 'data di oggi %d/%m/%y') -> 2014-02-06
    Ultima modifica di piero.mac; 06-02-2014 a 12:45

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    infatti nell'esempio ho sbagliato, ma non fa neanche come dici tu...

    Connesso al server MySQL - utente:root

    Connesso al DB magazzino


    2021/02/03
    Nessuna riga estratta !!Errore nella query: SELECT * FROM elemento WHERE scadenza < STR_TO_DATE('2021/02/03' , '%y/%m/%d') ORDER BY nome ASC;
    Errore:

  6. #6
    questo è il codice della pagina che riceve i dati
    codice HTML:
    <html><center><br><br><br><br><br><br><br><form name="cerca" action="visualizzazione.php" method="post">Seleziona cosa vuoi ricercare <select name="scelta" >                               <option selected value="tutto">visualizza tutto</option>                               <Option value="nome">Nome</option>                               <option value="scadenza">Periodo scadenza</option>                               <option value="codice">Codice a barre</option>                               </select><br><br>Inserisci valore da cercare <input type="text" name="valore" value=""> <br><br>Seleziona per cosa devi ordinare <select name="ordine" >                               <Option value="nome" selected>Nome</option>                               <option value="scadenza">Periodo scadenza</option>                               <option value="codice">Codice a barre</option>                               </select><br><br>Ordinamento crescente o decrescente? <select name="ascesa">                                      <option selected value="ASC">Crescente</option>                                      <option value="DEC">Decrescente</option>                                      </select><br><br><input type="submit" value="Invia"></form></center>
    </html>

    mentre questo è il codice della pagina che li cerca e visualizza

    Codice PHP:
    <?php$dbhost="localhost";
    $dbname="magazzino";
    $dbuser="root";
    $dbpass="";
    $scelta=$_POST['scelta'];
    $valore=$_POST['valore'];
    $ordine=$_POST['ordine'];
    $ascesa=$_POST['ascesa'];
    $conn mysql_connect($dbhost,$dbuser,$dbpass);
    if (!
    $conn
    {
     echo 
    "Errore durante la connessione a MYSQL";exit();
    }
    else echo 
    "<b>Connesso al server MySQL - utente:".$dbuser."</b><br><br>";
    // selezione de dbase su cui lavorare
    if (!mysql_select_db($dbname,$conn))
    {
     echo 
    "Errore durante la connessione al DATABASE: ".$dbname;
    exit();
    }
    else echo 
    "<b>Connesso al DB ".$dbname."</b><br><br>";
    // Preparazione della query
    if($scelta=="tutto")
       
    $sql="SELECT * FROM elemento;";
    if(
    $scelta=="nome")
       
    $sql="SELECT * FROM elemento WHERE nome LIKE '%".$valore."%' ORDER BY ".$ordine." .$ascesa.";";
    if(
    $scelta=="codice")
    $sql="SELECT FROM elemento WHERE codice ".$valore." ORDER BY ".$ordine." ".$ascesa.";";
    if(
    $scelta=="scadenza")
    { echo "
    <br".$valore."<br>";
    // 
    $valore=explode("/", $valore);
    //  echo "
    <br".$valore."<br>";
    // 
    $valore=array_reverse($valore);
    //  echo "
    <br".$valore."<br>";
    // 
    $valore=implode('-', $valore);
    //.
    $valore[0]."/".$valore[1]."/".$valore[2].
     //echo "
    <br".$valore[0]."/".$valore[1]."/".$valore[2]."<br>";
     
    $sql="SELECT FROM elemento WHERE scadenza STR_TO_DATE('".$valore."' '%y/%m/%d'ORDER BY ".$ordine." ".$ascesa.";";
    }
    // Esecuzione della query
    //
    $res = mysql_query($sql);
    /*if (!
    $res){echo "Errore nella query".$sql."<br>Errore:".mysql_error();exit();}*/$res = mysql_query($sql) OR DIE(mysql_error());// Visualizzazione del risultato della query$riga = mysql_fetch_array($res);if (!$riga){echo "Nessuna riga estratta !!";echo "Errore nella query".$sql."<br>Errore:".mysql_error();exit();}while ($riga) {echo "Nome:  <b>".$riga["nome"]."</b>   quantita'  <b>".$riga["quantita"]."</b>   scadenza  <b>".$riga["scadenza"]."</b>   codice a barre  <b>".$riga["codice"]."</b>   descrizione  <b>".$riga["descrizione"]."</b><br>";$riga = mysql_fetch_array($res);}// Chiudo la connessioneecho "<br><b>Numero Totale Righe Estratte: ".mysql_num_rows($res)."</b>";mysql_close($conn);


    ?>

  7. #7
    STR_TO_DATE('2021/02/03' , '%y/%m/%d')

    Qual'e' la differenza tra %y e %Y ????

    vedi il manuale:
    http://dev.mysql.com/doc/refman/5.5/...on_str-to-date
    http://dev.mysql.com/doc/refman/5.5/...on_date-format

    Comunque se la data e' in formato ansi yyyy-mm-dd non importa quale sia il divisore della data MySql lo capisce e converte qualunque divisore in -

    La formattazione dei tuoi script non permettono la lettura del codice.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Grazie mille! adesso funziona!!

    ...a me piace molto programmare, ma se penso che un programma può non funzionare per una lettera maiuscola o minuscola...

    comunque di nuovo grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.