mysqli_query() mi ritorna un array vuoto anche se presente un record nella tabella

  • Creatore Discussione Creatore Discussione mazman
  • Data di inizio Data di inizio

mazman

Nuovo Utente
27 Mar 2020
6
0
1
Ciao a tutti!
Sono al mio primo pgm in html/php.
Ho un problema che non riesco a risolvere e chiedo aiuto a qualche esperto che ringrazio anticipatamente.
Creato db; popolato da file csv; eseguito elenco record da visualizzare in tabella <table>; ad ogni record/riga tabella mostrata ho possibilità di modificare o eliminare record con pulstante ref xxxx.php passado le variabili che formano la kiave del db.(due campi).
Alla chiamata fino ad alcuni giorni fa funzionava e aprivo scheda con i dati già registrati e pronti ad essere modificati.
Da qualche giorno sembra che la query non restituisca dati
Non so più cosa fare !!!
PHP:
<?php

          include "includes/header.php";

          include "includes/connetti_db.php";


$avviso ="";

$msg ="";

$num=50;

dati passati da altra pagina

  $CODATT  = $_GET['var1'];

  $RAYON = $_GET['var2'];




$sql = 'SELECT * FROM fornitori WHERE  FO_CODATT = " '. $CODATT .' " AND FO_RAYON = " '. $RAYON .' " ';

  $result = mysqli_query($connessioneDB , $sql);

  if(!$result)

        {

              $avviso = ('Query fallita' . mysqli_error($connessioneDB) . mysqli_connect_errno());

         }

         else

         {

              $avviso = ('Query ok ' . mysqli_error($connessioneDB) . mysqli_connect_errno());

$num ++;

}


  while ($row = mysqli_fetch_array($result))

  {



  // istruzioni
$num ++;
}
              /*mysqli_free_result($result);*/

<h4><?php echo $avviso ."<br>" . $CODATT ."<br>" . $RAYON ."<br>" . $num ."<br>" . $row ; ?></h4>
ll risultato mi indica che non entra nel ciclo while pur essendo i dati passati ( $CODATT e $RAYON) corretti e presenti nel DB:
Query ok 0
MF000X
00
51
 
Ultima modifica di un moderatore:
@mazman
Da regolamento del forum, come tutti noi sei tenuto ad usare il tag
PHP (2).png

quando posti del codice php, oppure la funzione codice dalla barra degli strumenti


box inserisci.png



Inoltre IMPORTANTE: Prima di creare una nuova discussione o di rispondere alle discussioni esistenti ricordati di leggere attentamente il Regolamento del Forum e l'eventuale regolamento specifico della sezione!
Grazie
 
= " '. $CODATT .' " A
sql prevede che i valori (non numeri) siano racchiusi tra apici, nella tua scrittura della query li hai racchiusi tra virgolette ed é sbagliato
sostituisci le virgolette con gli apici e viceversa

ps, se non l'hai modificata di recente, non ha mai funzionato …..
 
@mazman
Ti ho chiesto di scrivere il codice usando i suoi tag! Per favore!

Leggi il regolamento
 
Chiedo venia al moderatore!! non avevo compreso il funzionamento e non trovavo le funzioni suggerite.
Spero che così sia corretto.

A marino51 grazie per il tuo commento

Ho provato tutte le combinazioni (se ho compreso bene anche il tuo suggerimento) che conosco ma il risultato è sempre lo stesso!!


PHP:
/*$query = "SELECT * FROM fornitori WHERE  FO_CODATT =' . $ATT . '  AND FO_RAYON =' . $RAY . '  ";*/
/*$query= 'SELECT * FROM fornitori WHERE  FO_CODATT =". $ATT . "  AND FO_RAYON =" . $RAY. "  ';*/
/*$query = 'SELECT * FROM fornitori WHERE  FO_CODATT = " '. $ATT .' " AND FO_RAYON = " '. $RAY .' " ';*/

/*$query = "SELECT * FROM fornitori WHERE  FO_CODATT =('{$ATT}')  AND FO_RAYON =('{$RAY}')";*/
$query = "SELECT * FROM fornitori WHERE  FO_CODATT =('{$CODATT}')  AND FO_RAYON =('{$RAYON}')";
 
Preciso che Le variabili $ATT e $RAY le ho inserite in prova per bypassare i valori ricevuti dalla pagina e valorizzate manualmente con dati presenti in tabella
 
PHP:
<?php

$CODATT = "qwerty";
$RAYON  = "zxcvbn";

$query = "SELECT * FROM fornitori WHERE  FO_CODATT = '" . $CODATT. "' AND FO_RAYON = '" . $RAYON . "'";

echo $query;

?>
1585387498486.png
 
ciao marino51
funziona parzialmente: cerco di spiegare

Se utilizzo
Codice:
/*variabili passate da pagina chiamante*/
$CODATT  = $_GET['var1'];
$RAYON = $_GET['var2'];

/*variabili definite*/
$ATT="MF000Y";
$RAY="0";

$query = "SELECT * FROM fornitori WHERE  FO_CODATT = '" . $CODATT. "' AND FO_RAYON = '" . $RAYON . "'";

/*controlli

while($row = mysqli_fetch_assoc($result))

  {
                            $RADICE=  $_POST['FO_RADICE'];
                            $CODORG =  $_POST['FO_CODORG'];
                            $CODATT  =  $_POST['FO_CODATT'];
                            $RAYON = $_POST['FO_RAYON'];
$num ++;
}

il risultato è sempre lo stesso cioè non entra nel ciclo while
Query ok 0
MF000Y
0
51



se utilizzo invece utilizzo

Codice:
$query = "SELECT * FROM fornitori WHERE  FO_CODATT = '" . $ATT. "' AND FO_RAYON = '" . $RAY . "'";

sembra entrare nel ciclo while ($num viene incrementato)
ma sembra non assegnare il nome alle variabili e ricevo questi msg di errore:

Notice: Undefined index: FO_RADICE in C:\xampp\htdocs\Fornitori - versione 3\modifica.fornitore.php on line 47

Notice
: Undefined index: FO_CODORG in C:\xampp\htdocs\Fornitori - versione 3\modifica.fornitore.php on line 48

Notice
: Undefined index: FO_CODATT in C:\xampp\htdocs\Fornitori - versione 3\modifica.fornitore.php on line 49

Notice
: Undefined index: FO_RAYON in C:\xampp\htdocs\Fornitori - versione 3\modifica.fornitore.php on line 50


Query ok 0
MF000Y
0
52
 
Si hai ragione post non centra nulla e li è un errore che ho corretto!
Codice:
$CODATT  =  $row['FO_CODATT'];
$RAYON    = $row['FO_RAYON'];

Tra i validi suggerimenti che mi hai dato uno in particolare mi è stato utilissimo :
echo $query;


Con questo, credo, ho probabilmente compreso perchè non mi entra nel ciclo:
questo è il risultato: SELECT * FROM fornitori WHERE FO_CODATT = ' MF111X ' AND FO_RAYON = ' 01'
1585420949544.png

il motivo per cui non funziona suppongo è il fatto che le variabili ricevute dalla pagina chiamante, la prima presenta uno spazio all'inizio e uno alla fine e la seconda uno spazio alla fine e non riesco ad eliminarli con la funzione LTRIM e RTRIM.
Se passo le variabili manualmente tutto funziona!!!
/*variabili definite*/
$ATT="MF000Y";
$RAY="01";
 
/*variabili passate da pagina chiamante*/
$CODATT = $_GET['var1'];
$RAYON = $_GET['var2'];
di solito dalla pagina chiamante i dati arrivano in $_POST
<form name="myForm" method="POST" action=......
ma probailmente hai forzato
<form name="myForm" method="GET" action=......
oppure li insrisci nella url che richiama lo script

quando ricevi dati da pagine precedenti e/o url, ti conviene sfruttare una funzione simile,
che aggiungi nello script (anche in fondo o in un include con le funzioni se é disponibile)
PHP:
function ValidateString($string) {
$val = htmlspecialchars( strip_tags( trim( $string ) ) );
$val = filter_var($val, FILTER_SANITIZE_STRING);
return $val;
}
che puoi richiamare così,
PHP:
$CODATT = ValidateString($_GET['var1']);
 
Buongiorno marino51 e grazie ancora per la pazienza e gli utilissimi suggerimenti

l'unico modo che mi sono inventato per richiamare la pagina passando le vaiabili è questo:

Codice:
echo   "<td> <a  href='modifica.forntore.php?var1= " .$CODATT. " &var2= " .$RAYON. "' title='Vai alla scheda per modificare Fornitore'   class='riga_tab'><i class='fas fa-edit fa-2x-1x' ></i>  </a></td>";

essendo in una tabella che mostra i dati non credo sia possibile inserire un form con input


Comunque avrei risolto il problema con questo semplice controllo nella pagina chiamata

Codice:
$CODATT = str_replace(" ", "", $CODATT);
$RAYON = str_replace(" ", "", $RAYON);

e sembra che funzioni!!!!
 

Discussioni simili