Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][AJAX] "Division by zero" O CO KAMAN?
Forum PHP.pl > Forum > Przedszkole
powertee
mam bardzo prosty skrypt i nie wiem co się z nim dzieje:
Warning: Division by zero in C:\myphp\calc\licz.php on line 9
podaje tylko wynik dla objętości a co do czasu napełnienia nic się nie pojawia chociaż uważam ze skrypt jest prawidłowy
  1. <form>
  2. Szerokość: <input id="liczba1" /><br />
  3. Długość: <input id="liczba2" /><br />
  4. Głębokość: <input id="liczba3" /><br />
  5. Pedkość przepływu wody w L/h: <input id="liczba4" /><br />
  6. <a href="#" onclick="Oblicz();">Oblicz</a>
  7. <br />Wynik: <div id="wynik">(na razie nieznany)</div>
  8. </form>
  9.  
  10. <script type="text/javascript"><!--
  11.  
  12. function CreateAjaxObject()
  13. {
  14.   var x;
  15.   if (window.XMLHttpRequest) {
  16.      x = new XMLHttpRequest();
  17.   } else if (window.ActiveXObject) x = new ActiveXObject("Microsoft.XMLHTTP");
  18.   return x;
  19. }
  20.  
  21. function AjaxCompleted(ajax)
  22. {
  23.   if (ajax.readyState != 4) return false;
  24.   if (ajax.status != 200) return false;
  25.   return true;
  26. }
  27.  
  28. var Ajax = CreateAjaxObject();
  29.  
  30. function Oblicz()
  31. {
  32.   Ajax.onreadystatechange = function() {
  33.      if (!AjaxCompleted(Ajax)) return;
  34.      var i = document.getElementById('wynik');
  35.      i.innerHTML = Ajax.responseText;
  36.   }
  37.   Ajax.open('GET', 'licz.php?op=Oblicz&l1=' + document.getElementById('liczba1').value
  38.      + '&l2=' + document.getElementById('liczba2').value + '&l3=' + document.getElementById('liczba3').value + '&l4=' + document.getElementById('liczba4'), true);
  39.   Ajax.send(null);
  40. }
  41.  
  42.  
  43. //--></script>


  1. <?php
  2.  
  3. $operacja = $_GET['op'];
  4. $liczba1 = (float) $_GET['l1'];
  5. $liczba2 = (float) $_GET['l2'];
  6. $liczba3 = (float) $_GET['l3'];
  7. $liczba4 = (float) $_GET['14'];
  8. if ($operacja === 'Oblicz') {
  9. $objetosc = $liczba1 * $liczba2 * $liczba3 * 1000;
  10. $objetosc/$liczba4 = $czas;
  11. echo "objętość basenu wynosi: "; 
  12. echo $objetosc;
  13. echo " dm/3";
  14. echo "<br>czas napełnienia basenu wynosi: "; 
  15. echo $czas; 
  16. }
  17. else echo 'Nieznany typ operacji!';
  18. //?>
.radex
"Nie dziel cholero nigdy przez zero" Czy jakoś tak tongue.gif

$liczba4 najwidoczniej jest zerem.

Sprawdzaj najpierw czy $liczba4 jest większa od zera.

if($liczba4 > 0)
$objetosc / $liczba4 = $czas;

I tu też co innego: Jest coś takiego jak l-wartość.

Więc nie może być

$objetosc / $liczba4 = $czas;

Chyba miałeś na myśli

$czas = $objetosc / $liczba4;
powertee
chodzi o to ze $liczba4 nie jest zerem a php twierdzi ze jest
.radex
zrób

var_dump($liczba4);

przed

$objetosc/$liczba4 = $czas;
powertee
niestety "float(0) " czyli prawdopodobnie mam bląd w pierwszym skrypcie a nie w kodzie php i formularz przekazuje 0 jakimś sposobem
.radex
powinno być

+ '&l2=' + document.getElementById('liczba2').value + '&l3=' + document.getElementById('liczba3').value + '&l4=' + document.getElementById('liczba4').value, true);


*chyba* - nie znam się na js zbytnio.

A - i proponowałbym zrobić to bardziej dostępne - tzn. normalny formularz, a wysyłanie przez AJAX jako *dodatek*.
tomeksobczak
jeżeli Twój skrypt wygląda dokładnie tak jak wkleiłeś to tutaj
  1. <?php
  2. $liczba4 = (float) $_GET['14'];
  3. ?>

masz $_GET[czternascie] a nie $_GET[literaL i 4]

swoją drogą to nie mam pojęcia jak można zrobić taką literówkę
powertee
dzięki już zakapowałem zamiast L przez przypadek wstawiłem 1 i się nie zgrywało

przerabiałem niedziałający skrypt kumpla i tak już było
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.