Dubbio e problema su query con operatore LIKE

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

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Prova in questo modo:
PHP:
$barcorde= mysql_real_escape_string($_POST['barcodeart_new']);
$query = mysql_query("SELECT * FROM articoli WHERE Barcode LIKE '%$barcode%'");
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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>
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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è ???
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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....
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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!!!
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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...
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Si perchè non hai preso il mio codice ma hai solo aggiunto una riga.
Hai dimenticato le parentesi graffe.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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%'
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Ok allora adesso fai un print_r($result); dopo l'esecuzione della query.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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?
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Controlla se entra nel if(isset($result)){ inserendo un'echo come hai fatto prima.
 

Emix

Utente Attivo
15 Feb 2010
596
0
16
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%'
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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
Autore Titolo Forum Risposte Data
E DUBBIO da principiante IP Cam e Videosorveglianza 0
D Dubbio intestazione dominio Domini 0
J Un piccolo dubbio su Mailchimp Posta Elettronica 1
S Dubbio su Git Programmazione 0
Z PayPal dubbio PHP 0
S Dubbio sulla desaturazione parziale in photoshop Photoshop 0
T Dubbio su costante ROOT, che rappresenti la base directory del sito PHP 4
stefanomessina [MySQL] Dubbio sulle PROCEDURE MySQL 0
G Cambio server dubbio ns Server Dedicati e VPS 3
M [PHP] Dubbio controllo IF PHP 15
paloppa [PHP] Dubbio print variabile PHP 27
paloppa [PHP] Dubbio valore variabile PHP 16
paloppa [PHP] Invio mail da form dubbio PHP 17
B Dubbio compressione gzip su server di giga.it Hosting 1
federicofacchini Aiutatemi con questo dubbio sui video YouTube e Facebook Social Media Marketing 1
asevenx [PHP] Dubbio teorico sui metodi e costruttore OOP PHP 1
otto9due [PHP] Dubbio esistenzaile: Regex email e stampa valori trovati.. PHP 5
P dubbio concettuale progettazione database MySQL 3
M Dubbio su risoluzione immagini Tumblr via Flickr HTML e CSS 6
D Dubbio per creare un sito in php PHP 9
C Dubbio creazione oggetti Javascript 1
F Dubbio su una funzione personalizzata PHP 3
V Installazione pulita windows 8 su notebook: dubbio partizioni Windows e Software 1
L Dubbio Array PHP 1
felino [C#] String format: qualche dubbio! C/C++ 1
felino [Jquery] Dubbio sul tag meta refresh aggiunto dinamicamente jQuery 6
R dubbio su sito Discussioni Varie 2
P Gestione bottini+ dubbio atroce PHP 9
borgo italia dubbio Discussioni Varie 0
P Dubbio su come inserire date e year in phpmyadmin PHP 5
P Dubbio su indirizzi ip Adsl e Connettività 6
S Dubbio front controller PHP 0
A dubbio enctype="multipart/form-data" HTML e CSS 1
borgo italia dubbio sul require/include PHP 2
A Dubbio su return funzione PHP 3
X dubbio licenza template Joomla 0
dahype dubbio sulla progettazione del DB Database 0
borgo italia dubbio sull'invio di allegati da form PHP 1
Roland Dubbio indicizzazione da google SEO e Posizionamento 2
I Grosso dubbio per sito browser game - giochi online SEO e Posizionamento 1
casaoncase dubbio aggregatori feed SEO e Posizionamento 0
emanuelevt Piccolo Dubbio HTML e CSS 2
S [OOP + transazioni] Dubbio implementativo PHP 2
neo996sps Dubbio su PHP e scrittura query PHP 2
F dubbio autenticazione windows reti lan Reti LAN e Wireless 4
D dubbio su get_object_vars PHP 2
W dubbio mia rete lan wireless Reti LAN e Wireless 11
P Dubbio su web 3.0 HTML e CSS 1
R dubbio su prezzi pubblicità Discussioni Varie 5
L dubbio compressione bmp Flash 1

Discussioni simili