Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] dzielenie przez 0
mczlowiek
post
Post #1





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 26.05.2008

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 16)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kszychu
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

Ostrzeżenie: (0%)
-----


Przed dzieleniem zawsze dobrze jest dać warunek:
if(y != 0) wynik = x / y;
else wynik = 0;


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pozatym raz piszesz $profity a raz profity, bez $.
pozatym $tab nadpisujesz sobie kolejnym zapytaniami


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mczlowiek
post
Post #5





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 26.05.2008

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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'


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mczlowiek
post
Post #7





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 26.05.2008

Ostrzeżenie: (10%)
X----


  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?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nexis
post
Post #9





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


  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. ?>


Ten post edytował nexis 17.07.2008, 09:50:06


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
mczlowiek
post
Post #10





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 26.05.2008

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Zmienna 'suma' to co innego niż stała suma.
Go to the top of the page
+Quote Post
mczlowiek
post
Post #13





Grupa: Zarejestrowani
Postów: 210
Pomógł: 0
Dołączył: 26.05.2008

Ostrzeżenie: (10%)
X----


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. ?>
Go to the top of the page
+Quote Post
nexis
post
Post #14





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


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.


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:45