PROBLEMA odbc_fetch_array($query)

Salve a tutti,

ho una pagina di ricerca in un DB ACCESS dopo aver eseguito la query con i dovuti filtri e parametri vado a printare i risultati in una tabella:

while($row = odbc_fetch_array($query))

      {

            echo"<tr>";

          echo"<td><a href=\"view.php?login=$row[login]\">$row[pipp]</td>";

          echo"<td>$row</a></td>";            echo"<td>$row[c]</td>";             echo"<td>$row[d]</td>";           echo"<td>$row[e]</td>";             echo"<td>$row[f]</td>";               echo"<td>$row[g]</td>";           echo"</tr>"; la query e i filtri funzionano, ma quando restituisce un unico record  non viene visualizzato nulla nella tabella e nemmeno il mess di errore...forse xchè odbc_fetch_array  restituisce la riga successiva?!?. Sta di fatto  che  quando la riga è singola a video c'è solamente l'intestazione di tabella. Come potrei risolvere?!?

inviato 10 anni fa
maradona79
X 0 X

quindi quando la SELECT restituisce 2 o più record nella tabella creata ci sono due o più righe. mentre se la SELECT restituisce un solo record allora nella tabella c'è solo l'intestazione. Giusto?

Per prima cosa verifica che effettivamente un record viene prodotto dalla queri, usando l'istruzione odbc_num_rows()

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ma il tag di chiusura del link </a> non devi metterlo dopo $row[pipp]?

cosi:

while($row = odbc_fetch_array($query))

      {

            echo"<tr>";

          echo"<td><a href=\"view.php?login=$row[login]\">$row[pipp]</a></td>";

          echo"<td>$row</td>";           echo"</tr>"; }

risposto 10 anni fa
eXile
modificato 10 anni fa
X 0 X

Ciao ragazzi,

rispondo alle due questioni;

avevo già impostato un contatore del risultato, ma adesso utilizzando lo stesso controllo per una combobox ho lo stesso problema... su 5 record mi restituisce  tutti tranne il primo.

Se vado a settare : odbc_fetch_row( $dada, 1(posizione dell'array).

Il tag di chiusura l'ho posizionato in maniera corretta..

Avete una soluzione?!?!

risposto 10 anni fa
maradona79
X 0 X

Sicuro che il primo odbc_fetch_array dello script si trovi nella riga:

while($row = odbc_fetch_array($query))

?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Finalmentee ci sono riuscito (forse era una cavolata ma io ho esultato)...

bastava settare odbc_fetch_row e dopo inserire il while!!!  :uglystupid:

risposto 10 anni fa
maradona79
X 0 X

?

riporta il codice che stai usando

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

aspetta che da una parte funziona e da un'altra no..verifico e lo posto!

 :crazy:

risposto 10 anni fa
maradona79
X 0 X

Tutto ok...funziona ti posto il codice...

<?

//

$query = odbc_exec($conn,$sql);

$num = odbc_fetch_row($query);

risposto 10 anni fa
maradona79
X 0 X

$conn = odbc_connect("aaaa", "", "") or die("connessione al DB impossibile");

$sql = "SELECT login, pwd,FullName,GroupName,Enabled,Temp,Telephone,email FROM Users WHERE $valore LIKE  RTRIM('%$chiave%') order by Login ";

     $query = odbc_exec($conn,$sql);

        $num = odbc_fetch_row($query);

      if($num <= 0) {           

      print("Non ci sono risultati");

      } else  {

              echo"<center>";

               echo"<table id='table_user' width='100%'>";

               echo"<th>LOGIN</th><th>PASSWORD</th><th>RAGIONE SOCIALE</th>";

            echo"<th>GROUP NAME</th>";

            echo"<th>ATTIVO</th>";

            echo"<th>TEMP</th>";

               echo"<th>TELEFONO</th>";

               echo"<th>EMAIL</th><br><br>";

 //Aggiunta di codice per  posizionarsi sulla riga 0 della query e non sulla riga 1 come prevede    la funzione

            odbc_fetch_row($query,0);         

 //qui inizia la scrittura del risultato nella tabella

      while($row = odbc_fetch_array($query))   

      {

            echo"<tr>";

          echo"<td><a href=\"view.php?login=$row[login]\">$row[login]</a></td>";

          echo"<td>$row[pwd]</td>";

          echo"<td>$row[FullName]</td>";

           echo"<td>$row[GroupName]</td>";

            echo"<td>$row[Enabled]</td>";

          echo"<td>$row[Temp]</td>";

            echo"<td>$row[Telephone]</td>";    

          echo"<td>$row[email]</td>";

          echo"</tr>";

      }

      echo"</table>";   

      echo"</center>";

   }

   odbc_free_result($query);

   odbc_close($conn);

   

risposto 10 anni fa
maradona79
X 0 X

avevo intuito che qualcosa non andava....

In pratica l'errore sta nel fatto che inizi a fare la fetch dei risultati prima di mostrarli, e quindi ti perdi il primo risultato...

$num = odbc_fetch_row($query);
   
if($num <= 0) {

questo codice è il problema: per capire se la query ti ha restituito dei risultati tu estrai il primo!!! Ecco perché quando andavi a mostrare i risultati ti mancava sempre il primo record!

Per verificare se la query ha restituito dei dati devi invece usare la funzione odbc_num_rows:

$num = odbc_num_rows($query);
   
if($num <= 0) {

In questo modo non ti bruci il primo risultato.

Poi, per tornare indietro con i risultati hai usato:

odbc_fetch_row($query,0);

che estrae il record 0 (che in realtà non esiste!!!) e fa si che la successiva istruzione odbc_fetch_array estragga il record successivo, ovvero il primo record.

Quindi fa quella modifica che ti ho detto ed in più togli la riga odbc_fetch_row($query,0);

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda