Stabilire condizione if ed else in query php

elpirata

Utente Attivo
18 Mar 2009
264
7
18
Buonasera a tutti,
vorrei stampare un echo qual'ora l'array generato tramite query non contenga nessun dato.

Ho provato cosi:

PHP:
$dataincasso = $_POST['dataincasso'];

$sql="SELECT SUM(totale) as tot FROM CommesseO WHERE data = STR_TO_DATE('$dataincasso', '%d/%m/%Y') ";
    $result=mysql_query($sql) or die(mysql_error());

	
		if (empty $result)) {
		echo "Nessun dato presente in db";
	}
		else {    
    
    //apro la tabella       
    $contenuto = "<table align=center>";
    
    //ciclo di caricamento delle righe
    while ($riga = mysql_fetch_assoc($result)) {
    $contenuto .= "<tr><td>". $riga['tot'] ."</td></tr>";
	}
	
    //chiudo la tabella
    $contenuto .= "</table>";
	
		}

?>

Ma il ciclo if else sembra proprio errato, ma video non ricevo messaggi di errore.

:byebye:
 
Allora prova una soluzione del genere:

PHP:
<?php
    $sql = mysql_query("SELECT SUM(totale) as tot FROM CommesseO WHERE data = STR_TO_DATE('$dataincasso', '%d/%m/%Y')")
        or die("Query non valida: " . mysql_error());

    if(mysql_num_rows($sql) <= 0) {
         echo "Nessun dato presente in db"; 
    } else {     
     
        //apro la tabella        
        $contenuto = "<table align=center>"; 

        //ciclo di caricamento delle righe 
        while ($riga = mysql_fetch_assoc($sql)) { 
        $contenuto .= "<tr><td>". $riga['tot'] ."</td></tr>"; 
        } 

        //chiudo la tabella 
        $contenuto .= "</table>"; 
     
    } 
?>

non conoscendo come effettui la connessione al database, come è strutturato ed i contenuti richiesti dalla query, non so se sia li il problema.

Facci sapere :D
 
Allora prova una soluzione del genere:
Facci sapere :D

Se provo ad eseguirla cosi, senza il controllo dell'if funziona ...

PHP:
$dataincasso = $_POST['dataincasso'];

$sql="SELECT SUM(totale) as tot FROM Commesse WHERE data = STR_TO_DATE('$dataincasso', '%d/%m/%Y') ";
    $result=mysql_query($sql) or die(mysql_error());

    
    //apro la tabella       
    $contenuto = "<table>";
    
    //ciclo di caricamento delle righe
    while ($riga = mysql_fetch_assoc($result)) {
    $contenuto .= "<tr><td>". $riga['tot'] ."</td></tr>";
}

    //chiudo la tabella
    $contenuto .= "</table>";

    //visualizzo la tabella
    echo $contenuto;
    
?>

:(
 
ciao
guarda che lo script di akuna dovrebbe funzionare, a parte quel CommesseO al posto di Commesse

Buongiorno,
lo script proposto da akuna effettivamente dovrebbe funzionare, al di la di quel CommesseO che nello script in produzione risulta essere correttamente settato a Commesse.

Il punto è un altro, se effettuo la ricerca su di una data dove il calcolo del (SUM) è diverso da 0,00 il risultato della query viene correttamente mostrato a video, ne deduco pertanto che lo script entri correttamente nell'else e stampi a video la table con il risultato della query:

PHP:
.....

else {     
     
        //apro la tabella        
        $contenuto = "<table align=center>"; 

        //ciclo il caricamento delle righe 

        while ($riga = mysql_fetch_assoc($sql)) { 
        $contenuto .= "<tr><td>". $riga['tot'] ."</td></tr>"; 
        } 

        //chiudo la tabella 
        $contenuto .= "</table>"; 
		
		echo "$contenuto";

Mi rimane comunque il problema della stampa a video di un messaggio qual'ora fosse restituito dalla query un risultato vuoto.

Notavo che se scrivo il primo if (giusto per test), in questo modo :

PHP:
.....

if(mysql_num_rows($sql) > 0) {
         echo "Nessun dato presente in db"; 
    }

viene stampato in tutte le ricerche "Nessun dato presente in db" ...

Questo mi fa pensare che venga stampata sempre e comunque una riga, pertanto dovrei indicare a php

"Se il contenuto della cella ['tot'] è uguale a 0 oppure uguale a "vuoto" ("") stampa la scritta "Nessun dato presente in db" altrimenti prosegui con l'else " ...

Voi cosa ne pensate ?

:byebye:
 
Ho eseguito la query nel database, quindi rettifico quanto scritto prima:


"Se il contenuto della cella ['tot'] è uguale a NULL stampa la scritta "Nessun dato presente in db" altrimenti prosegui con l'else " ...

Questo il risultato della query eseguita sul database:


Provato cosi ma non va:

PHP:
if(empty ($sql) OR ($sql) == 'NULL') {
         echo "Nessun dato presente in db";
 
Ultima modifica:
ciao
PHP:
if(mysql_num_rows($sql) == 0) {
//non trovate...
}else{
//trovate..
}
mysql_num_rows restituisce il numero di righe trovate, 0 se non trovate
 
ciao
PHP:
if(mysql_num_rows($sql) == 0) {
//non trovate...
}else{
//trovate..
}
mysql_num_rows restituisce il numero di righe trovate, 0 se non trovate

Soluzione già provata, funziona correttamente se la SUM contiene un valore, ma stranamente restituisce pagina bianca e nessun errore nel log se non trova nulla. Bha !!!
 
ciao
intanto guarda che il while non ti serve, la query restituisce un valore unico se trova record che soddisfino il where
prova questo
PHP:
<?php
//....
$sql = mysql_query("SELECT SUM(totale) as tot FROM Commesse WHERE data = STR_TO_DATE('$dataincasso', '%d/%m/%Y')")
        or die("Query non valida: " . mysql_error());
$riga = mysql_fetch_assoc($sql);
if($riga['tot']=== NULL) {
         echo "Nessun dato presente in db"; 
} else {           
	$contenuto = "<table align=center><tr><td>". $riga['tot'] ."</td></tr></table>";
	echo $contenuto;  
}
//.....
?>
 
ciao
intanto guarda che il while non ti serve, la query restituisce un valore unico se trova record che soddisfino il where
prova questo
PHP:
<?php
//....
$sql = mysql_query("SELECT SUM(totale) as tot FROM Commesse WHERE data = STR_TO_DATE('$dataincasso', '%d/%m/%Y')")
        or die("Query non valida: " . mysql_error());
$riga = mysql_fetch_assoc($sql);
if($riga['tot']=== NULL) {
         echo "Nessun dato presente in db"; 
} else {           
	$contenuto = "<table align=center><tr><td>". $riga['tot'] ."</td></tr></table>";
	echo $contenuto;  
}
//.....
?>

Ora ci siamo :), grazie a voi ho risolto.

Solo una curiosità, perchè :

PHP:
if($riga['tot']=== NULL)

e non :

PHP:
if($riga['tot']== NULL)

Grazie ancora :fonzie:
 
ciao
volevo mostrarti un esempio in cui è importante ===
PHP:
<?php
$stringa="abbondio";
$cerca="a";
if(strpos($stringa, $cerca)== FALSE){
	echo 'il carattere "a" non è stato trovato in "abbondio" !!!FALSO!!!<br>';
}else{
	echo 'il carattere "a" è stato trovato in "abbondio" !!!dovrebbe essere vero!!!<br>';
}
if(strpos($stringa, $cerca)=== FALSE){
	echo 'il carattere "a" non è stato trovato in "abbondio"<br>';
}else{
	echo 'il carattere "a" è stato trovato in "abbondio" al posto '.strpos($stringa, $cerca).' !!!vero!!!<br>';
}
?>
se lo provi vedi la differenza IMPORTANTISSIMA
come vedi il carattere "a" si trova al posto 0 (ricorda la numerazione parte da zero)
nel primo if php interpreta 0 come false e quindi ti da un risultato errato
il secondo valuta sia il valore che il tipo quindi ti da il risultato giusto
 

Discussioni simili