Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem logiczny.
Forum PHP.pl > Forum > PHP
jam09
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.
bismak
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.
tehaha
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
jam09
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 ?
tehaha
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. ?>
jam09
Dzięki bardzo.
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.