Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245

    [FOREACH] problemi se fallisce query

    Buon giorno e buona domenica.
    codice:
    try				{
    				$sql = "SELECT * from utenti WHERE ut_id =".$userid;
    				
    				$result = $pdo->query($sql); 
    				}
    					catch (PDOException $e)
    					{
    					/* GESTIRE IN MANIERA CORRETTA ERRORE E APRIRE FINESTRA */
    					$error = 'Error fetching utenti: ' . $e->getMessage();
    					echo "<script type=\"text/javascript\">alert(\"".$error."\");</script>";
    					exit();
    					}	
    				// metti qua il while utente
    				   foreach ($result as $row):
    				  
    					 if (empty($row)) 
    					  {
    					   // utente trovato ora controllo se ha un padre
    					   //echo "utente trovato:".$userid." e padre ".$idpadre;
    					   $error= "Spiacenti NON sei un Utente Registrato";
    						echo "<script type=\"text/javascript\">alert(\"".$error."\");location.href='../ita/ita.html';</script>";
    					     }
       				    else // utente non trovato
    				       {
    						    $error= "ok ci sei";
    					   
    						echo "<script type=\"text/javascript\">alert(\"".$error."\");location.href='../ita/ita.html';</script>";
    						}
    				endforeach;
    in questo estratto non mi entra mai nel ciclo foreach se la query non trova record.
    Come posso testare l'esito 'not found'?
    grazie!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ma perché nessuno legge mai la documentazione?
    Si troverebbe la soluzione in 5 secondi invece di dover aspettare risposte da altri.

    Documentazione PDO::query()

    C'è scritto che ritorna un oggetto PDOstatement se trova qualcosa (successo), oppure false se fallisce (non trova niente), quindi per testare se la query ha trovato qualcosa o no ti basta
    Codice PHP:
    if ( ! $result )
    {
        echo 
    "Non ho trovato niente";
    }
    else
    {
        
    // ha trovato qualcosa, quindi esegui il foreach


  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245
    forse perchè si hanno problemi con l'inglese?

    cmq $ result l'ho testato, ovviamente, in tutte le salse : empty, null, "" e torna sempre false....ovvero c'è qualcosa.
    altrimenti non ti avrei disturbato.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245
    nuovo codice :
    codice:
      try				{
    				$sql = "SELECT * from utenti WHERE ut_id =".$userid;
    				$result = $pdo->query($sql); 
    				}
    					catch (PDOException $e)
    					{
    					/* GESTIRE IN MANIERA CORRETTA ERRORE E APRIRE FINESTRA */
    					$error = 'Error fetching utenti: ' . $e->getMessage();
    					echo "<script type=\"text/javascript\">alert(\"".$error."\");</script>";
    					exit();
    					}	
    				if (! $result)
    				 {
    					$error= "Spiacenti NON sei un Utente Registrato";
    						echo "<script type=\"text/javascript\">alert(\"".$error."\");location.href='../ita/ita.html';</script>";
    						exit();
    				 }
    				// metti qua il while utente
    				foreach ($result as $row):
    				{
    				    $error= "ok ci sei";
    					echo "<script type=\"text/javascript\">alert(\"".$error."\");location.href='../ita/ita.html';</script>";
    				}
    				endforeach;
    stesso risultato : se lo trova tutto ok se non lo trova non ci passa nella IF.....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245
    invece usando mysqli :
    codice:
    $sql = "SELECT * from utenti WHERE ut_id =".$userid;				$mysqli=mysqli_connect($db_host, $db_utente, $db_password,$db_nomedb);
    				if (mysqli_connect_errno())
    				{
    				}
    				$result = mysqli_query($sql);
                                    if($result===null) {.....
    funziona perfettamente.
    Il problema è che nell'applicazione uso sempre PDO e cambiare tutto diventa un lavoraccio....

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quote Originariamente inviata da delpho Visualizza il messaggio
    forse perchè si hanno problemi con l'inglese?
    Questa è una grave lacuna per un programmatore, la documentazione di ogni cosa si fa prima in inglese, nelle altre lingue si trova sempre più scarsa, se si trova.
    cmq $ result l'ho testato, ovviamente, in tutte le salse : empty, null, "" e torna sempre false....ovvero c'è qualcosa.
    Verifica allora la query, dopo
    $sql = "SELECT * from utenti WHERE ut_id =".$userid;

    mettici
    echo $sql; exit;

    e vedi se la stampa correttamente, nello specifico se $userid contiene davvero un id e se lo contiene che sia un id valido, oppure se è vuota, nel qual caso c'è un errore dove viene inizializzata.
    Poi la query eseguila a mano su phpMyAdmin e vedi cosa restituisce.

    altrimenti non ti avrei disturbato.
    Non si tratta di disturbo, non ho l'obbligo di rispondere, se non mi va non lo faccio.
    Il risparmio di tempo era per te e per quelli che invece di documentarsi e risolvere in poco tempo preferiscono chiedere ed aspettare se e quando qualcuno risponderà, non per me, io per risparmiare tempo avrei potuto evitare di rispondere.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245
    perdonami è che ci sbatto la testa da ieri.... e non ne vengo a capo, non intendevo offenderti.
    Ovviamente, tutti i test da te elencati sono stati fatti ed è tutto corretto.
    L'applicazione, se trova dati, funziona perfettamente.
    Il problema si crea quando fallisce la query e non intercetto il NOT FOUND!
    Allora stamattina, dopo aver provato, mi sono voluto togliere una curiosità cambiando metodo e provando con mysqli e tutto fila liscio.
    Si accorge che non trova o che trova.
    Ora cambiare tutti i sorgenti mi viene male.
    Ma rimango dell'idea che sia 'strano' che non riesca ad intercettare il not found con PDO.

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Prova così
    Codice PHP:
    if ( $result->rowCount() == )
    {
        echo 
    "vuota";
    }
    else
    {
        
    // foreach ecc...


  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2016
    Messaggi
    245
    YESSSSSSSSSSSSSSSSSSS !!! và! grazie grazie e buona domenica!!!
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Prova così
    Codice PHP:
    if ( $result->rowCount() == )
    {
        echo 
    "vuota";
    }
    else
    {
        
    // foreach ecc...


  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quindi ritorna false solo in caso di errore vero e proprio, per esempio una query formata male (nome di una tabella o campo inesistente...), se non trova niente ritorna l'oggetto vuoto.

    Buona domenica anche a te.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.