Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MSSQL][PHP][HTML]Problem z wyciąganiem danych z bazy.
Forum PHP.pl > Forum > Przedszkole
-pp-
Witam.

Oto fragment mojego kodu który ma za zadanie wyciągnąć dane z bazy a następnie obliczyć z nich procent i wrzucić w kod html.

Wygląda to tak:
  1. <?php
  2. include('baza.php');
  3. $hp = "SELECT `hp` FROM `users` WHERE `id` = '1'";
  4. $hp_max = "SELECT `hp_max` FROM `users` WHERE `id` = '1'";
  5.  
  6.  
  7.  
  8. $pasek_hp = (($hp / $hp_max) * 100);
  9. $pasek_hp = round($pasek_hp,'0');
  10.  
  11. ?>
  12.  
  13.  
  14.  
  15.  
  16. Życie<div style="background-color: #fff; border: #000 1px solid; width: 100px; height: 12px;">
  17. <div style="background-color: #32CF18; width: <?php echo $pasek_hp; ?>%; height: 12px;"><p style="margin: 0px; padding: 0px; text-align: center; width: 100px; font-size: 10px;"><?php echo $hp.'/' .$hp_max ; ?></p></div></div>
  18.  
  19.  



Błąd jaki mi wyrzuca:
Cytat
Warning: Division by zero in xxxxx on line 8

Dodam, że w miejsce gdzie ma wstawić w html % p;okazuje zapytanie które wyciągnąłem z bazy.
Ulysess
masz tylko treść zapytania a gdzie mysql_query + chociażby ?mysql_fetch_assoc

we wzorze pojawiają się 2 STRINGi stąd te ostrzeżenie.

aha...

PS nie lepiej i wydajniej
  1. SELECT hp,max_hp FROM users WHERE id = 1

?
-pp-
  1. $hp = mysql_query("SELECT `hp` FROM `users` WHERE `id` = '1'");
  2. $hp_max = mysql_query("SELECT `hp_max` FROM `users` WHERE `id` = '1'");



Warning: Division by zero in xxxxx on line 8
kadlub

$hp = mysql_query("SELECT `hp` FROM `users` WHERE `id` = '1'");

$hp_max = mysql_query("SELECT `hp_max` FROM `users` WHERE `id` = '1'");
jeszcze przydało by się
  1. wynik1=mysql_fetch_array($hp);
  2. wynik2=mysql_fetch_array($hp_max);
  3.  
  4.  
  5.  

i teraz wyciągasz z tablicy
dane w ten sposób
  1. wynik1['hp'];
  2. wynik2['hp_max'];

i tam je podstawiasz do tego swojego wzoru
-pp-
Nadal wyrzuca mi błędy:
Cytat
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in xxxx on line 6

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in xxxx on line 7

Warning: Division by zero in xxxx on line 10


  1. $hp = mysql_query("SELECT `hp` FROM `users` WHERE `id` = '1'");
  2. $hp_max = mysql_query("SELECT `hp_max` FROM `users` WHERE `id` = '1'");
  3. $wynik1=mysql_fetch_array($hp);
  4. $wynik2=mysql_fetch_array($hp_max);
  5.  
  6.  
  7. $pasek_hp = (($wynik1 / $wynik2) * 100);
  8. $pasek_hp = round($pasek_hp,'0');
kadlub
Cytat(-pp- @ 25.01.2011, 16:16:21 ) *
Nadal wyrzuca mi błędy:


  1.  
  2.  
  3. $pasek_hp = (($wynik1 / $wynik2) * 100);
  4.  

nie tak tylko tak:
  1.  
  2. $pasek_hp = (($wynik1['hp'] / $wynik2['hp_max']) * 100);
  3.  

i pokaż tabele bazy danych bo coś masz z zapytaniami
-pp-
Próbowałem tak te same błędy są:
  1. $hp = mysql_query("SELECT `hp` FROM `users` WHERE `id` = '1'");
  2. $hp_max = mysql_query("SELECT `hp_max` FROM `users` WHERE `id` = '1'");
  3. $wynik1=mysql_fetch_array($hp);
  4. $wynik2=mysql_fetch_array($hp_max);
  5.  
  6.  
  7. $pasek_hp = (($wynik1['hp'] / $wynik2['hp_max']) * 100);
  8. $pasek_hp = round($pasek_hp,'0');


tabela taka chwilowa wygląda tak:
user_id user_login user_haslo hp hp_max
Ulysess
  1. $id = 1;
  2. $zapytanie = mysql_query("SELECT `hp`,`hp_max` FROM `users` WHERE `id` = '".$id."'");
  3. $dane = mysql_fetch_assoc($zapytanie);
  4.  
  5. $pasek_hp = (($dane['hp'] / $dane['hp_max']) * 100);
  6. $pasek_hp = round($pasek_hp,0);


mam wrażenie że 'tworzysz' grę , jeśli się nie mylę to dłuuuga droga przed Tobą..
Tajgeer
Jeśli dalej będzie wyrzucało błąd:
  1. Warning: Division by zero in xxxxx on line X

dodaj coś podobnego przez obliczaniem $pasek_hp
  1. if($dane['hp_max'] == 0) $dane['hp_max'] = 1;

Ewentualnie możesz zastosować jeszcze rzutowanie typów:
  1. $pasek_hp = (((int)$dane['hp'] / (int)$dane['hp_max']) * 100);


Pamiętaj, że przez 0 się nie dzieli!
-pp-
A czemu ma służyć przypisanie do w moim przypadku hp_max liczby? To przecież zmieni wartość tego co mam trzymane w bazie.


Nie mogę wymyślić co jest nie tak w linijkach gdzie jest $wiersz1 i $wiersz2
  1. $hp = mysql_query("SELECT `hp` FROM `users` WHERE `id` = '1'");
  2. $hp_max = mysql_query("SELECT `hp_max` FROM `users` WHERE `id` = '1'");
  3. $wynik1=mysql_fetch_array($hp);
  4. $wynik2=mysql_fetch_array($hp_max);
  5. if($dane['hp_max'] == 0) $dane['hp_max'] = 1;
  6. $pasek_hp = (((int)$dane['hp'] / (int)$dane['hp_max']) * 100);
  7. $pasek_hp = round($pasek_hp,'0');
Ulysess
bez komentarza... skoro nie rozumiesz , nie patrzysz na uwagi innych to radź sobie sam
Tajgeer
Cytat
A czemu ma służyć przypisanie do w moim przypadku hp_max liczby? To przecież zmieni wartość tego co mam trzymane w bazie.


Instrukcja:
  1. if($dane['hp_max'] == 0) $dane['hp_max'] = 1;

nie powoduje zmiany wartości w bazie danych, lecz nadpisaniu wartości zmiennej w tablicy $dane o indeksie hp_max.

Poza tym zauważ, że tablica z wynikiem zapytania przypisywana jest odpowiednio do $wynik1 oraz $wynik2, natomiast Ty w swoich obliczeniach odnosisz się do tablicy $dane, która nie istnieje (stąd między innymi błąd z dzieleniem przez 0).

Zrób jedno zapytanie:
  1. $hp = mysql_query("SELECT `hp`,`hp_max` FROM `users` WHERE `id` = 1");

Przypisz do jednej zmiennej wynik:
  1. $dane = mysql_fetch_array($hp);

a następnie odwołuj się do tablicy $dane:
  1. if($dane['hp_max'] == 0) $dane['hp_max'] = 1;
  2. $pasek_hp = ((int)$dane['hp'] / (int)$dane['hp_max']) * 100);
  3. $pasek_hp = round($pasek_hp, 0);

i powinno działać.
-pp-
Teraz mam tak lecz wyrzuca błąd przy mysql_fetch_array. Dorzuciłem jeden nawias więcej przy dzieleniu bo brakowało.
Dodam, że w miejscu w którym chce wyświetlić hp_max jest 1 a hp nie ma.
  1. $hp = mysql_query("SELECT `hp`,`hp_max` FROM `users` WHERE `id` = 1");
  2. $dane = mysql_fetch_array($hp);
  3. if($dane['hp_max'] == 0) $dane['hp_max'] = 1;
  4. $pasek_hp = (((int)$dane['hp'] / (int)$dane['hp_max']) * 100);
  5. $pasek_hp = round($pasek_hp, 0);
Tajgeer
Czasami mi sie wydaje, że ludzie nie myślą...



Domyśl się, gdzie to trzeba wstawić.
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.