Problem z "kalkulatorem"

0

Witam,

Zaczynam w php i robie do użytku własnego taki przelicznik zawartości składu produktu na 100g
np. jak mamy olej lniany A który ma podaną zawartosc omega 3 , 6 ,i 9 na 82.8g a olej B ma podany skład na 54g
i ten kalkulator przelicza składy na 100g aby można było sprawniej porównać.

Chyba nie ma sensu wklejać całego kodu po prostu problem jest ze na starce wyświetla error'y zwiazane z dzieleniem przez 0

$s1 = $_POST['S1'];
$x1 = ($s1*100)/$w_ilu;

więc dopóki ktoś nie wpisze w inputbox wartości to mam dzielenie przez 0 i te errory nie wiem jak temu zaradzić.

0

No to sprawdzaj czy $w_ilu jest różne od zera na początku

0

Myślałem, że w wszelakich kursach programowania zawsze jest:

  1. Hello World
  2. Kalkulator z dodawaniem i hardkodowanymi liczbami
  3. Kalkulator z dodawaniem i liczbami od użytkownika
  4. Kalkulator z innymi działaniami, ale także hardkodowanymi, w tym dzielenie, i na tym etapie, czyli ok. 10 minut "nauki" jest omawiany problem dzielenia przez zero. ---- do tego etapu nie dotarł autor postu

Ech.

0
Kage napisał(a):

Witam,
$s1 = $_POST['S1'];
$x1 = ($s1*100)/$w_ilu;

więc dopóki ktoś nie wpisze w inputbox wartości to mam dzielenie przez 0 i te errory nie wiem jak temu zaradzić.

Nie rozumiem Twojej wypowiedzi... Co ma wspólnego brak inputów z dzieleniem przez zero ?
$_POST['S1'] - to jest wartość input
$w_ilu - to jest wartość przez którą dzielisz
więc jak ktoś nie poda S1 to masz 100/$w_ilu

Ja bym zrobił tak:

$s1 = $_POST['S1'];  // przypisuję krótszą zmienną
// UWAGA: sprawdź dokładnie co dla funkcji ctype_digit() jest liczbą. Może być też is_numeric().
// Jeżeli wartość nie jest pusta oraz jest liczbą
if(!empty($s1) AND ctype_digit($s1))
{
  $x1 = ($s1*100)/$w_ilu;
}

Nie podałem tutaj sprawdzania czy $w_ilu jest większa od 0, ponieważ nie wiem skąd jest ta wartość. Sam ją nadajesz, czy użytkownik ? Jaki może mieć zakres wartości ?

0

Tak tylko ze S1 oraz $w_ilu sa z input'ów

No i tych obliczeń z S mam do kilka s1,s2,s3,s4,s5,s6 przy czym nie wszystkie musza być używane
no i x1,x2,x3,x4,x5,x6

0

No to mogłeś o tym napisać.

Opowiedz trochę o tym jak dokładnie działa skrypt? Co piszesz ? Czy może być S1 z X2, czy numery mają być zawsze takie same ?

Pisanie skryptu w którym możesz mieć S1, S2, S3, S4 itd to idiotyzm. Dublujesz kod i sam sobie problemy tworzysz.

0

Idiotyzm czy nie na razie nie wiem jak inaczej to zapisać....
za chwile wrzucę cały kod

 
<html><body>
	
	<form method="post" action="">
		
	 Gramatura = <input type="text" name="w_ilu"><br><br>
	 A= <input type="text" name="S1"><br>
	 B= <input type="text" name="S2"><br> 
	 C= <input type="text" name="S3"><br>
	 D= <input type="text" name="S4"><br>
	 E= <input type="text" name="S5"><br>
	 F= <input type="text" name="S6"><br><br>
	<input type="submit" value="Przelicz"><br>
</form>


<?php

$w_ilu = $_POST['w_ilu'];

$s1 = $_POST['S1'];
$s2 = $_POST['S2'];
$s3 = $_POST['S3'];
$s4 = $_POST['S4'];
$s5 = $_POST['S5'];
$s6 = $_POST['S6'];

$x1 = ($s1*100)/$w_ilu;
$x2 = ($s2*100)/$w_ilu;
$x3 = ($s3*100)/$w_ilu;
$x4 = ($s4*100)/$w_ilu;
$x5 = ($s5*100)/$w_ilu;
$x6 = ($s6*100)/$w_ilu;



echo('<br><br>W 100 gramach:<br><br><br>'.'A     '.  '['.round($x1, 2).'] '. g );
echo('<br>B     '.  '['.round($x2, 2).'] '. g );
echo('<br>C     '.  '['.round($x3, 2).'] '. g );
echo('<br>D     '.  '['.round($x4, 2).'] '. g );
echo('<br>E     '.  '['.round($x5, 2).'] '. g );
echo('<br>F     '.  '['.round($x6, 2).'] '. g );

?>
0

Nie pamiętam tylko czy ma być size['A'] czy size[A].
Zdaje mi się że chodzi o rozmiary stąd dałem size

<html><body>
 
        <form method="post" action="">
 
         Gramatura = <input type="text" name="weight"><br><br>
         A= <input type="text" name="size['A']"><br>
         B= <input type="text" name="size['B']"><br> 
         C= <input type="text" name="size['C']"><br>
         D= <input type="text" name="size['D']"><br>
         E= <input type="text" name="size['E']"><br>
         F= <input type="text" name="size['F']"><br><br>
        <input type="submit" value="Przelicz"><br>
</form>
<?php
$weight = $_POST['weight'];  // dodaj jeszcze sprawdzanie poprawności danych wejściowych

echo '<br><br>W 100 gramach:<br><br>';  // wyświetlam pierwszą linijkę

foreach($_POST['item'] as $key => $val)  // dla każdego elementu: A,B,C,D,E,F
{
  // tutaj też dodaj sprawdzanie poprawności danych wejściowych [$val]
  $result= round(($val*100)/$weight, 2);  // obliczam i dodaję do zmiennej
  echo '<br>'.$key.': '.$result.' g';  // miałeś tu dużo spacji. W razie czego stosuj - &nbsp; bo to "dodatkowa" spacja
}
 
?>

Pisałem z głowy - powinno działać.

0

Z rozpędu walnąłem byka: w foreach() ma być size, a nie item.

I przy okazji - kup książkę, ponieważ języki programowania powstały by ułatwić pracę, a nie pisać "łopatologicznie".

0

No teraz kod jest zoptymalizowany jednak nadal w przypadku wysłania pustych inputów sa errory dzielenia przez 0 - to pewnie kwestia braku tego sprawdzania poprawności danych ;)

Ps.
Jakaś konkretna książkę ? na razie mam tylko kurs wideo pobrany z jednej stronki

0

Dawno temu czytałem książkę z PHP, więc nic nie polecę.

Możesz natomiast przeczytać kurs PHP na w3c school. Potem poucz się obiektowego programowania. Warto wymyślać sobie jakieś skrypty do pisania, żeby uczyć się nowych działań. Pamiętaj też o PHP.net - dokumentacja.

I dobrze by było jakbyś przeszedł na forum webtips.pl, ponieważ jest ono dla początkujących - sporo przykładów i tematów, a trudniejsze zagadnienia dawaj tutaj.

P.S. Co do dopisania zabezpieczeń to musisz sobie dać radę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1