Visualizzazione risultati 1 fino 13 di 13

Discussione: Problema query con LIKE

  1. #1
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito Problema query con LIKE

    Salve a tutti, tempo fa grazie anche all'aiuto di questa community, ho fatto uno script per la ricerca dei barcode nel DB. Il problema è che ora ho la necessità di effettuare una LIKE e non un uguaglianza... Posto per intero il codice della pagina:

    Codice PHP:
    <?php
    session_start
    ();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="grafica.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
    $("#barcodeart_focus").focus();
    });
    </script>
    </head>
    <body bgcolor="b89952">
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <table>
    <tr><td align="center"><img src="logo_gestionale.png" width="320" height="115" /></td></tr><tr><td height="20"></td></tr><tr><td height="50" align="center"><font size="+2"><b>...at work...</b></font></td></tr><tr><td height="20"></td></tr></table>
    <table>
    <tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart_focus" size="10" value="" class="barcode"></td>
    <td><input type="submit" class="visto" name="visto" value=""></td><td>
    <input type="submit" name="creapdf" onclick= "this.form.action='ddt.php'" value="CREA DDT" class="creaddt"></td></tr></table>
    <table>
    <tr>
    <td><input type="text" size="10" value="BARCODE"></td>
    <td><input type="text" size="50" value="DESCRIZIONE"></td>
    <td><input type="text" style="text-align:center" size="3" value="QNT"></td>
    <td><input type="text" size="5" value="PREZZO" ></td>
    </table>
    <?php
    include('connect.php');
    if(isset(
    $_POST['barcodeart_new']) && !empty($_POST['barcodeart_new'])) {
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';//se i barcode sono interi, si possono evitare gli apici \'
    }
    else if(isset(
    $_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 '; //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

    if(isset($_POST['barcodeart_vecchi']))
    foreach(
    $_POST['barcodeart_vecchi'] as $barcode)
    $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' '; //se i barcode sono interi, si possono evitare gli apici \'
    if(isset($query))
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
    ?>
    <table>
    <?php
    if(isset($result))
    {
    while(
    $righi=mysql_fetch_array($result))
    $barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']); //creo un nuovo array dove salvo per ogni barcode, i dati.
    $barcodeart_da_mostrare = array();
    if(isset(
    $_POST['barcodeart_vecchi']))
    $barcodeart_da_mostrare = $_POST['barcodeart_vecchi']; //metto gli elementi vecchi realmente mostrati
    if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
    $query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");
    //se $esiste == 0 non cè
    if(mysql_num_rows($query))//esiste
    $barcodeart_da_mostrare[] = $_POST['barcodeart_new']; //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
    }
    foreach(
    $barcodeart_da_mostrare as $k)
    echo
    '
    <table>
    <tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'
    .$k.'"></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'
    .$barcodeart[$k]['Descrizione'].'"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'
    .$barcodeart[$k]['Vendita'].'" ></td>
    <td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'
    .$barcodeart[$k]['Fornitore'].'"></td>
    <td><input type="hidden" name="codice[]" id="codice" size="100" value="'
    .$barcodeart[$k]['Codice'].'"></td>
    <td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'
    .$barcodeart[$k]['Reparto'].'"></td>
    <td><input type="hidden" name="UM[]" id="UM" size="100" value="'
    .$barcodeart[$k]['UM'].'"></td>
    </tr></table>
    '
    ;
    }
    ?>
    <table align="left">
    <tr><td>Seleziona la causale del DdT:</td><td><select name="causale" id="causale" >
    <option value="Option 1" selected></option>
    <option value="RESO">RESO </option>
    <option value="RIAPRAZIONE">RIPARAZIONE</option>
    <option value="VENDITA">VENDITA</option>
    <option value="TRASFERIMENTO INTERNO">TRASFERIMENTO INTERNO</option>
    </select></td></tr>
    <tr><td>Inserisci il numero dei colli e l'aspetto:</td><td><input type="text" id="colli" name="colli" value="" size="40" /></td></tr>
    <tr><td>Seleziona porto franco o porto assegnato:</td>
    <td><select name="porto" id="porto" >
    <option value="Option 1" selected></option>
    <option value="ASSEGNATO" >ASSEGNATO</option>
    <option value="FRANCO">FRANCO</option>
    </select></td></tr>
    <tr><td>Seleziona il vettore:</td><td> <select name="vettore" id="vettore" >
    <option value="Option 1" selected></option>
    <option value="INTERNO">INTERNO </option>
    <option value="A CARICO DESTINATARIO">CARICO DESTINATARIO</option>
    <option value="SDA">SDA</option>
    </select></td></tr>
    <tr><td>Inserisci le eventuali note:</td><td><input type="text" id="note" name="note" value="NOTE:" size="40" /></td></tr>
    </table>
    <?php
    echo $_SESSION['piva'];echo '<br>';
    echo
    $_SESSION['id'];
    echo
    $_SESSION['idsedi'];
    ?>
    </form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    </body>
    </html>

  2. #2
    Guest

  3. #3
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    uhm no l'ho fatto ma non ne vuole sapere di andare.... nel senso conosco perfettamente la struttura della query e del LIKE.... ma se tu provi ad utilizzare LIKE vedrai che non esce...

    le due query da modificare sono queste :

    Codice PHP:
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';
    e l'altra :

    Codice PHP:
    $query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");
    Questa è la input :

    Codice HTML:
    <input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart_focus" size="10" value="" class="barcode">

  4. #4
    Guest

    Predefinito

    posta il codice con il like così possiamo capire perché non và

  5. #5
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    ho provato a dare una variabile a : ($_POST['barcodeart_new']) facendo cosi :

    Codice PHP:
    $barcodeprova=($_POST['barcodeart_new']);
    e poi facendo la LIKE cosi :

    Codice PHP:
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE '%$barcodeprova%' ';
    Ma non restituisce nulla... Anzi mi dice query failed...

  6. #6
    Guest

    Predefinito

    prova sostituendo $barcodeprova con '.$barcodeprova.'

  7. #7
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    Ho provato facendo così :

    Codice PHP:
    <?php
    include('connect.php');
    $barcodeprova=$_POST['barcodeart_new'];
    if(isset(
    $_POST['barcodeart_new']) && !empty($_POST['barcodeart_new'])) {
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE '.$barcodeprova.'';//se i barcode sono interi, si possono evitare gli apici \'
    }
    else if(isset(
    $_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 '; //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

    if(isset($_POST['barcodeart_vecchi']))
    foreach(
    $_POST['barcodeart_vecchi'] as $barcode)
    $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' '; //se i barcode sono interi, si possono evitare gli apici \'
    if(isset($query))
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
    ?>
    <table>
    <?php
    if(isset($result))
    {
    while(
    $righi=mysql_fetch_array($result))
    $barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']); //creo un nuovo array dove salvo per ogni barcode, i dati.
    $barcodeart_da_mostrare = array();
    if(isset(
    $_POST['barcodeart_vecchi']))
    $barcodeart_da_mostrare = $_POST['barcodeart_vecchi']; //metto gli elementi vecchi realmente mostrati
    if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
    //$query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");
    //se $esiste == 0 non cè
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE '.$barcodeprova.'';
    if(
    mysql_num_rows($query))//esiste
    $barcodeart_da_mostrare[] = $_POST['barcodeart_new']; //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
    }
    foreach(
    $barcodeart_da_mostrare as $k)
    echo
    '
    <table>
    <tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'
    .$k.'"></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'
    .$barcodeart[$k]['Descrizione'].'"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'
    .$barcodeart[$k]['Vendita'].'" ></td>
    <td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'
    .$barcodeart[$k]['Fornitore'].'"></td>
    <td><input type="hidden" name="codice[]" id="codice" size="100" value="'
    .$barcodeart[$k]['Codice'].'"></td>
    <td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'
    .$barcodeart[$k]['Reparto'].'"></td>
    <td><input type="hidden" name="UM[]" id="UM" size="100" value="'
    .$barcodeart[$k]['UM'].'"></td>
    </tr></table>
    '
    ;
    }
    ?>
    Se vedi ho cambiato le query e dato una variabile alla $_POST ma non va.. ora non da errore ma non restituisce nulla...

  8. #8
    Guest

    Predefinito

    Ti consiglio di usare le parentesi graffe perché spesso causano degli errori di sintassi difficili da localizzare.

  9. #9
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    se sono if senza else si può fare... ma cmq tralasciando il modo di scrivere il codice, sai dirmi cosa è sbagliato? non trovo l'errore... anche perchè apparentemente è tutto giusto... neanche l'errore della query da...

  10. #10
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,761

    Predefinito

    Se è una stringa, occorrono gli apici.
    Per like, dipende cosa vuoi estrarre... Devi aggiungere le "%" come caratteri jolly. Ad esempio:

    Codice PHP:
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE \'%'.$barcodeprova.'%\'';
    Ciao!

  11. #11
    Guest

    Predefinito

    Anche alla luce di quello che ha scritto alemoppo, ti ripeto che dovresti guardarti questa risorsa: http://coursesweb.net/php-mysql/php-mysql-where-like

  12. #12
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Se è una stringa, occorrono gli apici.
    Per like, dipende cosa vuoi estrarre... Devi aggiungere le "%" come caratteri jolly. Ad esempio:

    Codice PHP:
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE \'%'.$barcodeprova.'%\'';
    Ciao!
    Ciao Ale!

    ho fatto come dici, ma c'ero riuscito anche per altre vie.. in ogni caso funziona la query ma non mi stampa nulla... cioè non riempie la tabella...
    Ho cambiato anche la query dei "barcode_vecchi" con il like e non l'= ma niente non stampa a video i risultati.. Se metto quelle query su SQL si vede tutto....Posto la pagina per intero...:


    Codice PHP:
    <?php
    session_start
    ();
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link href="grafica.css" rel="stylesheet" type="text/css">
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
    <script type="text/javascript">
    $(document).ready(function() {
    $("#barcodeart_focus").focus();
    });
    </script>
    </head>
    <body bgcolor="b89952">
    <form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
    <table>
    <tr><td align="center"><img src="logo_gestionale.png" width="320" height="115" /></td></tr><tr><td height="20"></td></tr><tr><td height="50" align="center"><font size="+2"><b>...at work...</b></font></td></tr><tr><td height="20"></td></tr></table>
    <table>
    <tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart_focus" size="10" value="" class="barcode"></td>
    <td><input type="submit" class="visto" name="visto" value=""></td><td>
    <input type="submit" name="creapdf" onclick= "this.form.action='ddt.php'" value="CREA DDT" class="creaddt"></td></tr></table>
    <table>
    <tr>
    <td><input type="text" size="10" value="BARCODE"></td>
    <td><input type="text" size="50" value="DESCRIZIONE"></td>
    <td><input type="text" style="text-align:center" size="3" value="QNT"></td>
    <td><input type="text" size="5" value="PREZZO" ></td>
    </table>
    <?php
    include('connect.php');
    $barcodeprova=($_POST['barcodeart_new']);
    if(isset(
    $_POST['barcodeart_new']) && !empty($_POST['barcodeart_new'])) {
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE \'%'.$barcodeprova.'%\'';
    //$query = "SELECT * FROM articoli WHERE Barcode LIKE %" . mysql_real_escape_string($_POST['barcodeart_new']) . "%";
    echo $barcodeprova;
    echo
    $query; //se i barcode sono interi, si possono evitare gli apici \'
    }
    else if(isset(
    $_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 '; //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

    if(isset($_POST['barcodeart_vecchi']))
    foreach(
    $_POST['barcodeart_vecchi'] as $barcode)
    $query .= ' OR Barcode LIKE \''.mysql_real_escape_string($barcode).'\' ';
    echo
    $query ; //se i barcode sono interi, si possono evitare gli apici \'
    if(isset($query))
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
    ?>
    <table>
    <?php
    if(isset($result))
    {
    while(
    $righi=mysql_fetch_array($result))
    $barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']); //creo un nuovo array dove salvo per ogni barcode, i dati.
    $barcodeart_da_mostrare = array();
    if(isset(
    $_POST['barcodeart_vecchi']))
    $barcodeart_da_mostrare = $_POST['barcodeart_vecchi']; //metto gli elementi vecchi realmente mostrati
    if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
    //$query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");
    //se $esiste == 0 non cè
    //$query = "SELECT * FROM articoli WHERE Barcode LIKE %" . mysql_real_escape_string($_POST['barcodeart_new']) . "%";
    $query = 'SELECT * FROM articoli WHERE Barcode LIKE \'%'.$barcodeprova.'%\'';
    echo
    $query;
    if(
    mysql_num_rows($query))//esiste
    $barcodeart_da_mostrare[] = $_POST['barcodeart_new']; //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
    }
    foreach(
    $barcodeart_da_mostrare as $k)
    echo
    '
    <table>
    <tr>
    <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'
    .$k.'"></td>
    <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'
    .$barcodeart[$k]['Descrizione'].'"></td>
    <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td>
    <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'
    .$barcodeart[$k]['Vendita'].'" ></td>
    <td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'
    .$barcodeart[$k]['Fornitore'].'"></td>
    <td><input type="hidden" name="codice[]" id="codice" size="100" value="'
    .$barcodeart[$k]['Codice'].'"></td>
    <td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'
    .$barcodeart[$k]['Reparto'].'"></td>
    <td><input type="hidden" name="UM[]" id="UM" size="100" value="'
    .$barcodeart[$k]['UM'].'"></td>
    </tr></table>
    '
    ;
    }
    ?>
    <table align="left">
    <tr><td>Seleziona la causale del DdT:</td><td><select name="causale" id="causale" >
    <option value="Option 1" selected></option>
    <option value="RESO">RESO </option>
    <option value="RIAPRAZIONE">RIPARAZIONE</option>
    <option value="VENDITA">VENDITA</option>
    <option value="TRASFERIMENTO INTERNO">TRASFERIMENTO INTERNO</option>
    </select></td></tr>
    <tr><td>Inserisci il numero dei colli e l'aspetto:</td><td><input type="text" id="colli" name="colli" value="" size="40" /></td></tr>
    <tr><td>Seleziona porto franco o porto assegnato:</td>
    <td><select name="porto" id="porto" >
    <option value="Option 1" selected></option>
    <option value="ASSEGNATO" >ASSEGNATO</option>
    <option value="FRANCO">FRANCO</option>
    </select></td></tr>
    <tr><td>Seleziona il vettore:</td><td> <select name="vettore" id="vettore" >
    <option value="Option 1" selected></option>
    <option value="INTERNO">INTERNO </option>
    <option value="A CARICO DESTINATARIO">CARICO DESTINATARIO</option>
    <option value="SDA">SDA</option>
    </select></td></tr>
    <tr><td>Inserisci le eventuali note:</td><td><input type="text" id="note" name="note" value="NOTE:" size="40" /></td></tr>
    </table>
    <?php
    echo $_SESSION['piva'];echo '<br>';
    echo
    $_SESSION['id'];
    echo
    $_SESSION['idsedi'];
    ?>
    </form>
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    </body>
    </html>

  13. #13
    AdminTeclis non è connesso Utente
    Data registrazione
    29-12-2004
    Messaggi
    128

    Predefinito

    non riesco ad uscirne... non mi stampa nulla a video...

Regole di scrittura

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