Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] dzielenie przez 0
Forum PHP.pl > Forum > Przedszkole
mczlowiek
oto fragment kodu:
  1. <?php
  2. mysql_query("set names utf8");
  3. $tab=mysql_fetch_array(mysql_query("SELECT SUM(stawka) as suma FROM typy WHERE data BETWEEN '$date1' AND '$date2' AND autor='$ekspert'"));
  4. $stawki = round(suma, '2');
  5. echo ('Stawek: '.$tab["$stawki"].'<br>');
  6.  
  7. mysql_query("set names utf8");
  8. $tab=mysql_fetch_array(mysql_query("SELECT SUM(profit) as profit FROM typy WHERE data BETWEEN '$date1' AND '$date2' AND autor='$ekspert'"));
  9. $profity = round(profit, '2');
  10. echo ('Zysk: '.$tab["$profity"].'<br>');
  11.  
  12. $yield=$tab['profity'] / $tab['stawki'];
  13. echo ('Yield: '.$yield.'<br>');
  14. ?>

i mimo, że $tab["$profity"] oraz $tab['stawki'] maja wartości kolejno 4 i 5 to dostaje komunikat że dzielę przez 0, dlaczego?

dlaczego te wartośći przyjmują wartość 0? skoro wcześniej mają wartości 4 i 5
nospor
Cytat
maja wartości kolejno 4 i 5 to dostaje komunikat że dzielę przez 0, dlaczego?
bo nie mają 4 i 5 tylko mają 0, a na pewno 0 ma ta ostatnia. zrob se print_r($tab) i zobacz dokladnie co zawiera.
kszychu
Przed dzieleniem zawsze dobrze jest dać warunek:
if(y != 0) wynik = x / y;
else wynik = 0;
nospor
pozatym raz piszesz $profity a raz profity, bez $.
pozatym $tab nadpisujesz sobie kolejnym zapytaniami
mczlowiek
właśnie, że nie, bo komendy:
  1. <?php
  2. echo ('Stawek: '.$tab["$stawki"].'<br>');
  3. ?>
zwraca wartośc 4
natomiast
  1. <?php
  2. echo ('Zysk: '.$tab["$profity"].'<br>');
  3. ?>
zwraca wartośc 5

to dlaczego juz w wierszu kolejnym, czyli:
  1. <?php
  2. $yield=$tab['profity'] / $tab['stawki'];
  3. ?>
przyjmuja wartości 0?
nospor
ale czy nie rozumiesz ze ty w kolejnych krokach nadpisujesz sobie te $tab? Nie widzisz tego?

pozatym raz piszesz:
$tab["$stawki"]
a raz:
$tab["stawki"]

raz masz zmienna a raz nie. to kolejny blad. chyba ze zeminna $stawki zawiera tekst 'stawki'
mczlowiek
  1. <?php
  2. mysql_query("set names utf8");
  3. $tab=mysql_fetch_array(mysql_query("SELECT SUM(stawka) as suma FROM typy WHERE data BETWEEN '$date1' AND '$date2' AND autor='$ekspert'"));
  4. $stawki = round(suma, '2');
  5. echo ('Stawek: '.$tab["$stawki"].'<br>');
  6.  
  7. mysql_query("set names utf8");
  8. $tab2=mysql_fetch_array(mysql_query("SELECT SUM(profit) as profit FROM typy WHERE data BETWEEN '$date1' AND '$date2' AND autor='$ekspert'"));
  9. $profity = round(profit, '2');
  10. echo ('Zysk: '.$tab2["$profity"].'<br>');
  11.  
  12. $yield=$tab2["$profity"] / $tab["$stawki"];
  13. echo ('Yield: '.$yield.'<br>');
  14. ?>

poprawiłem ,ale mam takie pytanie, czy taki zapisa jak wyżej jest ptawidowy, czy można może to napisać inaczej - lepiej, bardziej czytelnie?
nospor
czemu rozbijasz to na dwa zapytania? przeciez obie informacje bez problemu wyciagniesz jednym.

i co to ma byc?
$stawki = round(suma, '2');
masz stalą o nazwie suma?
nexis
  1. <?php
  2. mysql_query('SET NAMES UTF8'); 
  3. $query = 
  4.  ("
  5.  SELECT
  6. SUM(`stawka`) AS `suma`,
  7. SUM(`profit`) AS `profit`,
  8. (SUM(`stawka`)/SUM(`profit`)) AS `wynik`
  9.  FROM `typy`
  10.  WHERE `data` BETWEEN '" . $date1 . "' AND '" . $date2 . "'
  11. AND `autor` = '" . $ekspert . "'
  12.  ");
  13. $query = mysql_query($query) or exit(mysql_error());
  14. $result = mysql_fetch_array($query);
  15. printf('Stawek: %01.2f<br />Zysk: %01.2f<br />Yield: %01.2f', $result['suma'],
  16.  $result['profit'], $result['wynik']);
  17. ?>
mczlowiek
Cytat(nospor @ 17.07.2008, 10:35:02 ) *
czemu rozbijasz to na dwa zapytania? przeciez obie informacje bez problemu wyciagniesz jednym.

i co to ma byc?
$stawki = round(suma, '2');
masz stalą o nazwie suma?

wyciągam dane z tabeli AS suma i zaokrąglam wartość do 2 miejsc po przecinku
nospor
skorzystaj z kodu nexisa bo ja juz nie mam sil do ciebie...
A skad kod php ma wiedziec, ze twoj tekst suma, ktory defacto interpretuje jako stalą, ma brac z tabeli?
Myslisz ze on ci czyta w myslach?
mike
Zmienna 'suma' to co innego niż stała suma.
mczlowiek
Cytat(nospor @ 17.07.2008, 10:50:53 ) *
skorzystaj z kodu nexisa bo ja juz nie mam sil do ciebie...
A skad kod php ma wiedziec, ze twoj tekst suma, ktory defacto interpretuje jako stalą, ma brac z tabeli?
Myslisz ze on ci czyta w myslach?

spokojnie winksmiley.jpg
ostatni pytanie: co oznacza zapis:
  1. <?php
  2. printf('Stawek: %01.2f<br />Zysk: %01.2f<br />Yield: %01.2f', $result['suma'],
  3.  $result['profit'], $result['wynik']);
  4. ?>

chodzi mi w szczególności o
  1. <?php
  2. %01.2f
  3. ?>
nexis
Wszystko jest napisane w dokumentacji:

  1. f - the argument is treated as a float, and presented as a floating-point number (locale aware).


czyli mówiąc w języku ojczystym zmienna jest reprezentowana jako liczba zmiennoprzecinkowa - w tym przypadku z dokładnością do dwóch miejsc po przecinku.
nospor
zapis ten oznacza, ze masz zajrzec do manuala:
http://pl2.php.net/manual/pl/function.sprintf.php

Cytat
spokojnie
Jestem spokojny, ale twoj totalny brak myslenia mnie drazni. Wiem ze to jest przedszkole, ale to jest przedszkole odnosnie programowania a nie myslenia. Musisz wyrobic w sobie ten trudny nawyk, bo inaczej daleko nie zajdziesz przy takiej postawie.

Lektura dla ciebie:
http://nospor.pl/php-faq-n29.html#faq-2
zobaczysz ile masz bledow w kodzie. masz je poprawiac a nie chowac i nie wyswietlac.


oraz zlote mysli:
http://nospor.pl/php-faq-n29.html#faq-1
przyswoj sobie szczegolnie te o mysleniu winksmiley.jpg
mike
A ja tu widzę brak motywacji do nauki i czytania dokumentacji. ~mczlowiek przesadzasz.

Wiesz jak zwykłem motywować w takich sytuacjach? Zamykam wątek do jutra. Miłej nauki. Poczytasz to otworzę.
nospor
pozwole sobie odpisac:
Cytat
wiesz, ciekaw jestem jak myslałeś Ty kidy stawiałeś piewsze kroki w programowaniu, czy też w innych dziedzinach, czy tak tryskałeś mądrościa, dlatego na przyszłość więcej wyrozumialości z Twojej strony - a dla osob stawiających pierwsze kroki powstał chyba dział PRZEDSZKOLE - o którym poziomie mówi sama nazwa.
Dziekuje za pomoc

Siadalem, pisalem. Byl blad to patrzylem wszystkie zmienne pokolei co zawierają. Czesto zawieraly co innego niz myslalem. Dzieki temu wiedzialem gdzie jest blad i tam szukalem jego rozwiązania. Teraz dzieciaki na forum napiszą kawalek kodu, nie sprawdzą co zawiera dana zmienna i juz lecą na forum bo napisali kod ktory w 100% (wg nich jest ok) a nie dziala. Takich przypadkow jak ty jest masa (to nie powod do dumy dla ciebie ani dla nich).

To są banalne problemy i jesli na takim etapie nie umiecie usiasc i ich rozwiązac to strach sie bac co bedzie dalej. Taka prawda. Myslenie trzeba cwiczyc - masz problem - zastanow sie nad nim godzine, dwie, trzy. Latanie po forum z prostymi rzeczami naprawde wbrew pozorom tobie tylko zaszkodzi.
Wiem ze to jest przedszkole, ale jak pisalem to jest przedszkole odnosnie programowania.

Cytat
Dziekuje za pomoc

Nie ma za co. Mam nadzieje ze te dwa linki co ci wyslalem weźmiesz do serca. Te wyswietlani wszystkich bledow ustaw sobie obowiązkowo. Jak zobacze ze twoje posty na forum wynikają z tego ze nie ustawiles tej opcji, bede od razu ci temat zamykal - taki maly gratis odemnie i od mikea winksmiley.jpg

edit: widze ze ja nie dostalem pomogl, tylko osoba co dala ci gotowca. Jak zwykle ten, kto probóbuje zmusic do myslenia jest tym zlym... a przeciez moje podpowiedzi doprowadzily cie do poprawniejszego kodu.
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.