Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MYSQL] Problem logiczny.
jam09
post 3.04.2010, 08:20:13
Post #1





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 19.01.2010

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


Napisałem skrypt wyświetlający mapę do gry.
  1. <?php
  2. $sql = mysql_query("select * from mapa");
  3. $pole = mysql_fetch_array($sql);
  4. echo "<table>";
  5. for ($i=1; $i<=8; $i++){ //pętla pozioma
  6. echo "<tr><td>$i</td>";
  7. for ($p=1; $p<=8; $p++){ //pętla pozioma pól
  8. if($i == $pole['y'] AND $p == $pole['x']){
  9. echo "<td>Wiocha !</td>";
  10. }else{
  11. echo "<td>Pustkowia</td>";
  12. }
  13. }
  14. echo "</tr>";
  15. }
  16. echo "<tr>";
  17. for ($i=NULL; $i<=8; $i++){ //pętla pozioma
  18. echo "<td>$i</td>";
  19. }
  20. echo "</tr></table>";
  21. ?>

I wszystko działa dobrze ale gdy mam np. 3 rekordy w bazie to porównuje tylko pierwszy rekord i wyświetla info wiocha!. Wiadomo dlaczego. I teraz moje pytanie jak mogę dostosować ten skrypt by porównywało więcej niż 1 rekord ?
Stworzyłem jeszcze jedną wersję tego skryptu.
  1. <?php
  2. $sql = mysql_query("select * from mapa");
  3.  
  4. echo "<table>";
  5. for ($i=1; $i<=8; $i++){ //pętla pozioma
  6. echo "<tr><td>$i</td>";
  7. for ($p=1; $p<=8; $p++){ //pętla pozioma pól
  8. while($pole = mysql_fetch_array($sql)){
  9. if($i == $pole['y'] AND $p == $pole['x']){
  10. echo "<td>Wiocha !</td>";
  11. }else{
  12. echo "<td>Pustkowia</td>";
  13. }
  14. }
  15. }
  16. echo "</tr>";
  17. }
  18. echo "<tr>";
  19. for ($i=NULL; $i<=8; $i++){ //pętla pozioma
  20. echo "<td>$i</td>";
  21. }
  22. echo "</tr></table>";
  23. ?>

Ale i ona mnie nie zadowala. Ponieważ wyświetla tyle pól odpowiednio wiocha/pustkowia ile jest rekordów w bazie , a rekordy w bazie chcę tylko stworzyć dla wiosek aby nie obciążać bazy. Z góry dziękuję wszystkim za pomoc.
PS : Ten temat był w dziale przedszkole i nikt nie odpowiedział więc daję tu.
Go to the top of the page
+Quote Post
bismak
post 3.04.2010, 09:36:19
Post #2





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 4.02.2010
Skąd: Jasło

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


Jeśli chcesz porównywać więcej niż jeden rekord to musisz drugą sekwencje if zrobić... (ale nie do końca wiem o co Ci chodzi)

Spróbuj wytłumaczyć to w inny sposób.

A jeśli chcesz wyświetlać tylko wiocha to wsadź w else instrukcje break.
Go to the top of the page
+Quote Post
tehaha
post 3.04.2010, 09:44:25
Post #3





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


pokaż przykładowe dane z tabeli ? Ty trzymasz tam współrzędne x i y wiosek tak? skrypt porównuje CI jeden rekord ponieważ nie wyciągasz danych w pętli , wydaje mi się, że powinieneś najpierw w pętli pobrać wszystkie dane z bazy i zapisać je w tablicy(array) i potem sprawdzasz czy takie współrzędne znajdują się w tablicy jak tak to stawiasz wiocha
Go to the top of the page
+Quote Post
jam09
post 3.04.2010, 10:13:40
Post #4





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 19.01.2010

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


No to tak. Mam przykładowo 2 rekordy w tabeli :
id|x|y|
1 |1|1|
2 |1|3|
I kod php pierwszy.
Wyświetla mi to tak.
1 Wiocha ! Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
2 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
3 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
4 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
5 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
6 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
7 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
8 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
1 2 3 4 5 6 7 8
I problem mam bo tylko pierwszy rekord porównuje z tabeli i wyświetla tam gdzie pasują x i y, a drugiego już nie porównuje . Czyli chcę aby w oparciu o bazę przykładowo wyświetlało tak :
1 Wiocha ! Pustkowia Wiocha ! Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
2 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
3 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
4 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
5 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
6 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
7 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
8 Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia Pustkowia
1 2 3 4 5 6 7 8
EDIT : tehaha możesz dokładniej ? Podać jakiś kod może ?


Ten post edytował jam09 3.04.2010, 10:15:09
Go to the top of the page
+Quote Post
tehaha
post 3.04.2010, 10:26:11
Post #5





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

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


Ja bym to zrobił mniej więcej tak: (pisane na kolanie więc musisz to dostosować).
1. wyciągnął bym wszystkie rekordy z bazy i wstawił do tablicy np. w formacie x;y
2. potem sprawdzasz czy taki zestaw współrzędnych jest w bazie jak tak to stawiasz: wiocha

czyli coś takiego:

  1. <?php
  2. $sql = mysql_query("select * from mapa");
  3. $cord = array();
  4. while($pole = mysql_fetch_array($sql))
  5. {
  6. $cord[] = $pole['x'].";".$pole['y'];
  7. }
  8. echo "<table>";
  9. for ($i=1; $i<=8; $i++){ //pętla pozioma
  10. echo "<tr><td>$i</td>";
  11. for ($p=1; $p<=8; $p++){ //pętla pozioma pól
  12. if(in_array($i.";".$p, $cord)){
  13. echo "<td>Wiocha !</td>";
  14. }else{
  15. echo "<td>Pustkowia</td>";
  16. }
  17. }
  18. echo "</tr>";
  19. }
  20. echo "<tr>";
  21. for ($i=NULL; $i<=8; $i++){ //pętla pozioma
  22. echo "<td>$i</td>";
  23. }
  24. echo "</tr></table>";
  25. ?>


Ten post edytował tehaha 3.04.2010, 10:27:16
Go to the top of the page
+Quote Post
jam09
post 3.04.2010, 10:32:35
Post #6





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 19.01.2010

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


Dzięki bardzo.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 22:39