Dubbio e problema su query con operatore LIKE

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio

Emix

Utente Attivo
15 Feb 2010
596
0
16
Salve a tutti,
ho un problema... Ho queste due query :

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

Ho la necessità di usare questa sintassi, ma se volessi usare il LIKE anzi che l'=, come dovrei modificarla? ho provato a mettere % davanti e mettere LIKE ma non va.. non mi visualizza nulla...
 
Prova in questo modo:
PHP:
$barcorde= mysql_real_escape_string($_POST['barcodeart_new']);
$query = mysql_query("SELECT * FROM articoli WHERE Barcode LIKE '%$barcode%'");
 
uhm.. non va... posto la pagina intera.. forse è meglio...

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'])) {
$barcordequery = ($_POST['barcodeart_new']);
echo $barcodequery;
$query = mysql_query("SELECT * FROM articoli WHERE Barcode LIKE '%$barcodequery%' ");  
//    $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 LIKE '%$barcodequery%'");
//$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>
 
Conviene lasciare mysql ed iniziare ad utilizzato pdo o mysqli; detto questo prova a stampare la query, mettila nell'sql di phpmyadmin e vedi il risultato o gli errori che ti da.
 
Conviene lasciare mysql ed iniziare ad utilizzato pdo o mysqli; detto questo prova a stampare la query, mettila nell'sql di phpmyadmin e vedi il risultato o gli errori che ti da.

se effettuo questa questa query :

Codice:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
fila tutto regolare in SQL su phpmyadmin...

per cui l'unica cosa che mi viene in mente è che non passa la variabile per il like... ma perchè ???
 
Separa la query dall'esecuzione e stampala
PHP:
$query = "SELECT * FROM articoli WHERE Barcode LIKE '%" . mysql_real_escape_string($_POST['barcodeart_new']) . "%'";
echo $query;
$result = mysql_query($query);
vedi cosa esce
 
Separa la query dall'esecuzione e stampala
PHP:
$query = "SELECT * FROM articoli WHERE Barcode LIKE '%" . mysql_real_escape_string($_POST['barcodeart_new']) . "%'";
echo $query;
$result = mysql_query($query);
vedi cosa esce

Allora da come puoi vedere nella pagina completa che ti copiato sopra, l'esecuzione della query avviene due volte... Cambiando entrambi le query allo stesso modo, mi esce questo :

Codice:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%' 
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'

Se provo a togliere gli apici da entrambi invece esce quest'altro :

Codice:
SELECT * FROM articoli WHERE Barcode LIKE %84801%
Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%84801%' at line 1


In entrambi i casi mi stampa nulla....
 
Cambiando entrambi le query allo stesso modo, mi esce questo :
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
che è la stessa query che ti funziona su phpmyadmin
quindi il problema è da un altra parte
 
che è la stessa query che ti funziona su phpmyadmin
quindi il problema è da un altra parte

uhm... forse hai ragione... ma dove? non riesco a trovarlo... sopra c'è la pagina per intero.. riesci a darmi una mano pls?
Grazie ancora dell'aiuto!!!
 
In effetti è strano perchè se esegui quella query dovrebbe dare dei risultati.
L'unica cosa che mi viene in mente è provare ad usare mysqli o pdo e vedere se hai dei cambiamenti.
 
In effetti è strano perchè se esegui quella query dovrebbe dare dei risultati.
L'unica cosa che mi viene in mente è provare ad usare mysqli o pdo e vedere se hai dei cambiamenti.

non cambia nulla... anche perchè la query è la medesima.. la cosa strana è che se io prendo la query e la metto cosi come sta nell'SQL di phpmyadmin funziona tutto regolarmente... invece eseguendola non stampa a video i risultati... è come se la condizione if(ISSET($result)) non va mai a buon fine, percui non entra nel ciclo dei risultati e non stampa nulla...
 
Allora intanto controlliamo se la esegue la query.
Modifica temporaneamente questo:
PHP:
if(isset($query))    
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
Con questo:
PHP:
if(isset($query)){
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
    echo "query eseguita";
}
Se stampa a video query eseguita allora la query la esegue e dobbiamo cercare ancora l'errore.
 
allora.. ho cambiato come hai detto te... e appena apro la pagina senza digitare nulla appare query eseguita.. :/
Se inserisco un barcode stampa le query ma non esce query eseguita.. e ovviamente non stampa nulla

Questa è la pagina :

PHP:
<!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" /> 
</head> 
<body> 
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value=""></td> 
<td><input type="submit" class="visto" name="visto"></td>
</tr>
</table> 
<?php  
include('connect.php');  
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new'])){
    $query = "SELECT * FROM articoli WHERE Barcode LIKE '%" . mysql_real_escape_string($_POST['barcodeart_new']) . "%'"; 
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=\''.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 />");
	echo "query eseguita";
?> 
<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 = "SELECT * FROM articoli WHERE Barcode LIKE '%" . mysql_real_escape_string($_POST['barcodeart_new']) . "%'"; 
echo $query;  
    //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 '
        <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="32" 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="text" placeholder="Sc %" name="scontoperc[]" id="scontoperc" size="3"></td> 
        <td><input type="text" placeholder="Sc VAL" name="scontoval[]" id="scontoval" size="4"></td> 
        <td><input type="text" placeholder="P.Scontato" name="prezzosconto[]" id="prezzosconto" size="6"></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> 
        ';
}
?>
<input type="submit" name="creapdf" onclick= "this.form.action='ddt.php'" value="creapdf">
<input type="submit" name="creapdf" onclick= "this.form.action='fattura.php'" value="creafattura">
<input type="submit" name="ddt" onclick= "this.form.action=' read_ddt.php'" value="ddt"><br /><br />
Seleziona la causale del DdT:<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><br /><br />
Inserisci il numero dei colli e l'aspetto:<input type="text" id="colli" name="colli" value="" size="40" /><br /><br />
Seleziona porto franco o porto assegnato:
<select name="porto" id="porto" >
   <option value="Option 1" selected></option>
   <option value="ASSEGNATO" >ASSEGNATO</option>
   <option value="FRANCO">FRANCO</option>
  </select><br /><br />
  Seleziona il vettore: <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><br /><br />
Inserisci le eventuali note:<input type="text" id="note" name="note" value="NOTE:" />
</table> 
</form>
</body> 
</html>

Questo è l'indirizzo se vuoi fare una prova :

http://solutionslab.it/pdf/altervista2.php

Come codice puoi inserire o 84801 oppure 1920100084801
 
Si perchè non hai preso il mio codice ma hai solo aggiunto una riga.
Hai dimenticato le parentesi graffe.
 
Si perchè non hai preso il mio codice ma hai solo aggiunto una riga.
Hai dimenticato le parentesi graffe.

Ok hai ragione ora appare :

Codice:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
query eseguita 
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
 
Ok allora adesso fai un print_r($result); dopo l'esecuzione della query.
 
Ok allora adesso fai un print_r($result); dopo l'esecuzione della query.

ok fatto mi da un id...

Codice:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'query eseguitaResource id #4 SELECT * FROM articoli WHERE Barcode LIKE '%84801%'

quindi lo seleziona?? ma non lo stampa possibile?
 
Controlla se entra nel if(isset($result)){ inserendo un'echo come hai fatto prima.
 
Controlla se entra nel if(isset($result)){ inserendo un'echo come hai fatto prima.

ho inserito un echo" ok result" e il print_f($result) il risultato è questo:

Codice:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
query eseguita
Resource id #4 
Resource id #4
OK RESULT
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
 
Ok fino a li ci siamo..
Ora prova a vedere cosa c'è nell'array $barcodeart_da_mostrare inserendo un print_R($barcodeart_da_mostrare) prima del foreach.
 

Discussioni simili

M
Risposte
6
Visite
3K
HTML e CSS
Membro cancellato 26246
M