View Full Version : Warning: Division by zero
Riscontro un problema nel codice del mio sito che non riesco a capire in quanto al momento il mio programmatore non è disponibile, chiedo se qualcuno può aiutarmi, l'errore è il seguente:
Warning: Division by zero in /home/xxxxxxxxxx/public_html/xxxxxxx/xxxxxx/newsletter.php on line 7
Warning: Division by zero in /home/xxxxxxxxxx/public_html/xxxxxx/xxxxxxxxxx/newsletter.php on line 7
Warning: Division by zero in /home/xxxxxxxx/public_html/xxxxxxxx/xxxxxxxx/newsletter.php on line 30
Nel file indicato alla linea 7 trovo:
$n = $mail_max_x_ora / (60 / $intervallo_spedizione);
Alla linea 30 trovo:
$ore_rimanenti = ceil($mail_rimanenti / $mail_max_x_ora);
Cosa posso fare?
grazie. :mc:
Alla variabile $intervallo_spedizione è stato assegnato qualche valore? altrimenti gli viene assegnato 0 per default ... e l' errore si ripercuote anche alla riga 30 con la variabile $mail_max_x_ora
Alla variabile $intervallo_spedizione è stato assegnato qualche valore? altrimenti gli viene assegnato 0 per default ... e l' errore si ripercuote anche alla riga 30 con la variabile $mail_max_x_oraNon ho basi di programmazione, quindi mi rimane difficile capire esattamente ciò che dici, puoi farmi un'esempio? mi sembra di capire che manca un valore da qualche parte?
Ziosilvio
07-07-2006, 10:12
Non conosco PHP, ma mi permetto di azzardare un'ipotesi basata sulla similitudine con altri linguaggi. Se sbaglio, correggetemi.
$n = $mail_max_x_ora / (60 / $intervallo_spedizione);
In PHP c'è differenza tra il tipo numerico intero e quello in virgola mobile?
In questo caso, se intervallo_spedizione è intero e maggiore di 60, allora 60 / $intervallo_spedizione è 0.
Se non c'è rischio di overflow, puoi provare con:
$n = ($mail_max_x_ora * $intervallo_spedizione) / 60;
Altrimenti, devi convertire in floating point (se possibile).
Alla linea 30 trovo:
$ore_rimanenti = ceil($mail_rimanenti / $mail_max_x_ora);
Come sopra.
EDIT: qui, a guardar bene, sembra proprio che sia mail_max_x_ora a contenere il valore 0.
In questa formula
$n = $mail_max_x_ora / (60 / $intervallo_spedizione);
ci sono 3 variabili:
- $n
- $mail_max_x_ora
- $intervallo_spedizione
Se la variabile $intervallo_spedizione non contiene alcun valore, gli viene assegnato il valore 0 in automatico generando così l' errore di divisione per 0 (non si possono fare le divisioni per 0 :p) ...
Quindi prima di quella riga di codice bisogna che ci sia qualche assegnazione di valori alla variabile ...
Un qualcosa del tipo:
$intervallo_spedizione = 10;
o un altro valore ...
Stessa cosa vale per la variabile $mail_max_x_ora ... deve essere assegnata altrimenti quando viene usata nella riga 30 genera lo stesso errore ...
Prova anche a modificare la formula come detto da ZioSilvio ...
In questa formula
$n = $mail_max_x_ora / (60 / $intervallo_spedizione);
ci sono 3 variabili:
- $n
- $mail_max_x_ora
- $intervallo_spedizione
Se la variabile $intervallo_spedizione non contiene alcun valore, gli viene assegnato il valore 0 in automatico generando così l' errore di divisione per 0 (non si possono fare le divisioni per 0 :p) ...
Quindi prima di quella riga di codice bisogna che ci sia qualche assegnazione di valori alla variabile ...
Un qualcosa del tipo:
$intervallo_spedizione = 10;
o un altro valore ...
Stessa cosa vale per la variabile $mail_max_x_ora ... deve essere assegnata altrimenti quando viene usata nella riga 30 genera lo stesso errore ...sopra la riga 7 c'è:
$num_utenti = $r[0];
$n = $mail_max_x_ora / (60 / $intervallo_spedizione);
sopra la riga 30:
$mail_rimanenti = ($num_utenti * $rC[0]) - $tot_indice;
$ore_rimanenti = ceil($mail_rimanenti / $mail_max_x_ora);
Con il termine "prima di quella riga" intendevo nel codice prima ... non solo la riga precedente ...
Deve esserci un qualcosa del tipo:
$intervallo_spedizione = ............;
Con il termine "prima di quella riga" intendevo nel codice prima ... non solo la riga precedente ...
Deve esserci un qualcosa del tipo:
$intervallo_spedizione = ............;
Non vi è niente di simile più avanti simile a ciò che dici c'è:
<?php echo $intervallo_spedizione ?>
Non vi è niente di simile più avanti simile a ciò che dici c'è:
<?php echo $intervallo_spedizione ?>
E più indietro?
Problema risolto mancavano 2 righe di codice:
$intervallo_spedizione=valore;
$mail_max_x_ora=valore;
Grazie a tutti per la cortese collaborazione!!!! :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.