Dubbio e problema su query con operatore LIKE

  • Creatore Discussione Creatore Discussione Emix
  • Data di inizio Data di inizio
Questo vuol dire che non hai mandato i dati post. O che in qualche modo quelli li comunque non sono settati.
Ora facciamo una delle ultime prove per rendere tutto un po' più chiaro:
PHP:
while($righi=mysql_fetch_array($result))
$barcodeart[$righi['Barcode']] = ...;    //creo un nuovo array dove salvo per ogni barcode, i dati.
//Qua inserisci:
var_dump($barcodeart);
$barcodeart_da_mostrare = array();
E Prova a cambiare il print_r di prima con var_dump (non dovrebbe cambiare nulla ma prova e vediamo che danno entrambi).
 
ok, ho effettuato come dicevi te le modifiche e questo è quello che esce fuori :

PHP:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
query eseguita
Resource id #3 
resource(3) of type (mysql result) 
OK RESULT
array(1) { [1920100084801]=> array(6) { ["Descrizione"]=> string(44) "COLLANA ARG LUNGA QUARZO GRIGIO CON PENDENTE" ["Vendita"]=> string(3) "555" ["UM"]=> string(2) "PZ" ["Quantita"]=> NULL ["Fornitore"]=> string(12) "DELLA ROVERE" ["Codice"]=> string(3) " OK" } } 
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
array(0) { }
 
ok, ho effettuato come dicevi te le modifiche e questo è quello che esce fuori :

PHP:
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
query eseguita
Resource id #3 
resource(3) of type (mysql result) 
OK RESULT
array(1) { [1920100084801]=> array(6) { ["Descrizione"]=> string(44) "COLLANA ARG LUNGA QUARZO GRIGIO CON PENDENTE" ["Vendita"]=> string(3) "555" ["UM"]=> string(2) "PZ" ["Quantita"]=> NULL ["Fornitore"]=> string(12) "DELLA ROVERE" ["Codice"]=> string(3) " OK" } } 
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
array(0) { }

UP Longo aiutami pls :(
 
In questa riga:
PHP:
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
Il dato viene sempre inviato via post?

Dal tuo codice c'è bisogno che ci sia almeno un valore in $barcodeart_da_mostrare altrimenti non stampa niente.
Devi vedere perchè non viene ricevuto il dato dal form, è li il problema.
 
quindi come posso ovviare a ciò?
Come si può fare per modificare il codice in maniera più pulita? A me serve solamente che io ho un campo di ricerca, inserisco un barcode, il barcode viene cercato e se trovato viene stampato immediatamente sotto nella stessa pagina... La stampa delle cose da cercare è immessa in campi di tipo input box... Perchè effettivamente sembra lungo e tortuoso in questa maniera... Chiaramente posso avere barcode uguali e quindi righe identiche...
 
Si dovresti verificare il valore e se il campo nel form si chiama "barcodeart_new".
 
Si dovresti verificare il valore e se il campo nel form si chiama "barcodeart_new".

uhm no l'id l'ho cambiato per fare il focus sull'inputbox... altrimenti non focalizzava java... è per quello?


EDIT:
aggiungo che se uso il BARCODE= $barcode va bene se modifico con i LIKE crea problemi
 
Ovviamente se cambi nel form devi cambiare anche nella pagina di ricezione dei dati.
 
Il dato lo riceve correttamente? Se si allora è un attimo inserire il like o altro.
 
Il dato lo riceve correttamente? Se si allora è un attimo inserire il like o altro.

si lo riceve bene, ma non stampa nulla...

PHP:
84801
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
query eseguita
Resource id #3 
resource(3) of type (mysql result) 
OK RESULT
array(1) { [1920100084801]=> array(6) { ["Descrizione"]=> string(44) "COLLANA ARG LUNGA QUARZO GRIGIO CON PENDENTE" ["Vendita"]=> string(3) "555" ["UM"]=> string(2) "PZ" ["Quantita"]=> NULL ["Fornitore"]=> string(12) "DELLA ROVERE" ["Codice"]=> string(3) " OK" } }
SELECT * FROM articoli WHERE Barcode LIKE '%84801%'
array(0) { }

Questo è il risultato... Ovviamente ci sono i vari var_dump che mi hai fatto mettere prima...

Prova a scrivere tu stesso 84801 su barcode in questa pagina :

http://laviadellanima.com/pdf/altervista2.php
 
Ok bene. Il tutto sta in quest'if:
PHP:
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)
}
Controlla se entra in questo if e posta tutto il tuo codice modificato.
 
Ok bene. Il tutto sta in quest'if:
PHP:
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)
}
Controlla se entra in questo if e posta tutto il tuo codice modificato.

No... sembrerebbe che non ci entra... ho scritto delle parole a caso tramite echo e non le visualizzo... per cui non entra in quella if... Posto il codice per intero completo delle parole scritte per verificare l'if.

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'])){
	echo $_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";
	print_r($result);
	}
?> 
<table> 
<?php
if(isset($result))
{
	var_dump($result);
	echo "OK RESULT"; 
$barcodeart_da_mostrare = array();
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.
var_dump($barcodeart);
$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
echo "ok ok OK FANCULO";
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
}
var_dump($barcodeart_da_mostrare);
foreach($barcodeart_da_mostrare as $k)
var_dump($barcodeart_da_mostrare);
        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>
 
Vuol dire che non trova risultati.

OVVIO!! Non viene eseguita la query. :hammer:
Dopo $query=... inserisci l'esecuzione della query
PHP:
$risultato = mysql_query($query)
E nella if devi considerare $risultato per eseguire mysql_num_rows in questo modo:
PHP:
if(mysql_num_rows($risultato))//esiste
...
}

Oppure non so se vuoi considerare la query precedente. In tal caso usa la variabile $result al posto di $risultato.
 
Vuol dire che non trova risultati.

OVVIO!! Non viene eseguita la query. :hammer:
Dopo $query=... inserisci l'esecuzione della query
PHP:
$risultato = mysql_query($query)
E nella if devi considerare $risultato per eseguire mysql_num_rows in questo modo:
PHP:
if(mysql_num_rows($risultato))//esiste
...
}

Oppure non so se vuoi considerare la query precedente. In tal caso usa la variabile $result al posto di $risultato.

Ho fatto come dici te, ed ho inserito $result considerando la query rpecedente... Entra nell'if ma non visualizza niente cmq... Posto codice:

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'])){
	echo $_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";
	print_r($result);
	}
?> 
<table> 
<?php
if(isset($result))
{
	var_dump($result);
	echo "OK RESULT"; 
$barcodeart_da_mostrare = array();
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.
var_dump($barcodeart);
$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;  
$result=mysql_query($query);
    //se $esiste == 0 non cè
if(mysql_num_rows($result))//esiste
echo "ok ok OK FANCULO";
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
}
var_dump($barcodeart_da_mostrare);
foreach($barcodeart_da_mostrare as $k)
var_dump($barcodeart_da_mostrare);
        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>
 
Puoi togliere il var_dump nel foreach altrimenti dovresti aggiungere una parentesi graffa.
Stessa cosa nell'if. Manca una parentesi graffa che includa le due righe di codice.
Sicuro che vuoi considerare $result e non $risultato? (dopo aver aggiunto l'esecuzione).
 

Discussioni simili

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