Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Zapętlanie się zapytania
Forum PHP.pl > Forum > Przedszkole
ArekJ
Witam. Mam problem z zapytaniem. Otóż napisałem kod, który odpowiada za losowanie, a potem wyświetlanie oraz wykonywanie skryptu. Wygląda to tak:
  1. <?php
  2. include 'includes/config.php';
  3.  
  4. /********************************************************************************
  5. **************************************
  6. Tu sš zmienne, które przechowujš teksty w piwnicy***********************************************************************
  7. ********************************************************************************
  8. **************************************/
  9.  
  10. $a1 = 'Wylosowałeś opcję pierwszą. Doda Ci ona jeden knut<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Idz dalej</a>';
  11. $a2 = 'Wylosowałeś opcję drugą. Doda Ci ona dwa knuty<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Idz dalej</a>';
  12.  
  13. /********************************************************************************
  14. **************************************
  15. Tu są zmienne, które przechowują zapytania w piwnicy********************************************************************
  16. ********************************************************************************
  17. **************************************/
  18.  
  19. $b1 = 'UPDATE uzytkownicy SET zloto = zloto + 1, energia = energia - 5 WHERE id = '.$_SESSION['id'].'';
  20. $b2 = 'UPDATE uzytkownicy SET zloto = zloto + 2, energia = energia - 5 WHERE id = '.$_SESSION['id'].'';
  21.  
  22. /********************************************************************************
  23. **************************************
  24. Cały kod piwnicy*************************************************************************
  25. ******************************
  26. ********************************************************************************
  27. **************************************/
  28. if (isset($_GET['akcja']) && $_GET['akcja'] == 'idzie')  
  29. {
  30.    if ($players -> energia < 5)  
  31.    {
  32.        $tekst = 'Niestety, ale nie możesz wykonywać tej czynności ponieważ Twoja postać nie posiada wystarczającej ilości energii';
  33.    }
  34.    else
  35.    if ($players -> zycie == 0)  
  36.    {
  37.        $tekst = 'Niestety, ale nie możesz wykonywać tej czynności ponieważ Twoja postać jest martwa';
  38.    }
  39.    else
  40.    {
  41.        $rand = rand(1,2); //losowanie liczby z podanego zakresu
  42.        $tekst = ${'a'.$rand}; //wyświetlanie wylosowanego tekstu
  43.        $sql = ${'b'.$rand};
  44.        mysql_query($sql);
  45.     }
  46. }
  47. else
  48. {
  49. $tekst = 'Jesteś w piwnicy<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Wejdź do piwnicy</a>';
  50. }
  51. ?>

Niestety, ale jest jakiś problem z zapytaniem do bazy, ponieważ wykonuje się ono podwójnie lub potrójnie-różnie. Nie wiem jaka jest tego przyczyna. Proszę o pomoc.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dodaje to, ponieważ pewna osoba podsuneła mi, że to może chodzić o inne pliki, które to includują. I dlatego się zapętla. A więc wszystko zawarte jest tak:
dom.php-to odpowiada za zaincludowanie odpowiedniego pliku:
  1. <?php
  2. $miejsce_dom = $_GET['miejsce'];
  3. $miejsce_pages_dom= array('piwnica');
  4. if(in_array($miejsce_dom,$miejsce_pages_dom)){
  5. include 'gra/lokacje/dom/'.$miejsce_dom.'.php';
  6. }
  7. else{
  8. $tekst = '
  9. Tutaj będzie opis lokacji zwanej Dom, tylko ktoś go musi zrobić.<br /><br />
  10.  
  11. <table>
  12.    <tr>
  13.        <td width="150" valign="top"><b><u>Piwnica</u></b><br />
  14.            <a href="gra.php?act=lokacja&miejsce=piwnica">Piwnica</a>
  15.                <br /></td>
  16.         <td width="150" valign="top"><b><u>Parter</u></b><br />
  17.         <a href="gra.php?act=lokacja&miejsce=salon">Salon</a>
  18.                <br /></td>
  19.        <td width="150" valign="top"><b><u>1 piętro</u></b><br />
  20.        <a href="gra.php?act=lokacja&miejsce=sypialnia">Sypialnia</a>
  21.                <br /></td>
  22.  
  23.    </tr>
  24.     <tr>
  25.        <td width="150" valign="top"><b><u>Strych</u></b><br />
  26.        <a href="gra.php?act=lokacja&miejsce=strych">Strych</a>
  27.                <br /></td>
  28.                <br /></td>
  29. </table>
  30. ';
  31. }
  32. ?>

lokacja.php-to sprawdza jaką mamy lokację i includuje właściwą(np.dom.php):
  1. <?php
  2. $lokacje = array('dom' => "lokacje/dom.php", 'londyn' => "lokacje/londyn.php");
  3.  
  4. if(array_key_exists($lokacja, $lokacje)){
  5. require $lokacje[$lokacja];
  6. }
  7. else{
  8. $tekst = 'Lokacja nie istnieje!<br /><br /><br /><br />';
  9. }
  10. ?>
A plik gra.hp-on wszystko includuje. Zawiera w sobie takie cos:
  1. <?php
  2. if(in_array($act,$act_pages)){
  3. include 'gra/'.$act.'.php';
  4. }
  5. else{
  6. if(isset($_SESSION['login'])){
  7. $tekst = 'jestes zalogowany';
  8. }
  9. else{
  10. header("Location: index.php");
  11. die();
  12. }
  13. }
  14. ?>

A potem dalej w kodzie jest echo $tekst;
No i nie wiem co powoduje te zapętlanie? Proszę o pomoc!
erix
Cytat
Niestety, ale jest jakiś problem z zapytaniem do bazy, ponieważ wykonuje się ono podwójnie lub potrójnie-różnie. Nie wiem jaka jest tego przyczyna. Proszę o pomoc.

Daruj sobie takie kombinowanie ze zmiennym $b1, $b2; po to stworzono tablice, aby z nich korzystać, a nie tak naprawdę wynajdujesz je sobie na nowo. tongue.gif

Poza tym, wyświetl sobie najpierw zapytanie, jakie leci do bazy i je przeanalizuj.
ArekJ
Eh sorki... To też mi ktoś już powiedział i kod mam na tablicach, ale tutaj wstawiłem zły sad.gif
  1. <?php
  2. include 'includes/config.php';
  3.  
  4. $options = array(
  5.    array(
  6.        'text' => 'Wylosowałeś opcję pierwszą. Doda Ci ona jeden knut<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Idz dalej</a>',
  7.        'query' => 'UPDATE uzytkownicy SET zloto = zloto + 1, energia = energia - 5 WHERE id = '.$_SESSION['id']),
  8.    array(
  9.        'text' => 'Wylosowałeś opcję drugą. Doda Ci ona dwa knuty<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Idz dalej</a>',
  10.        'query' => 'UPDATE uzytkownicy SET zloto = zloto + 2, energia = energia - 5 WHERE id = '.$_SESSION['id'])
  11. );
  12.  
  13. if (isset($_GET['akcja']) && $_GET['akcja'] == 'idzie')  
  14. {
  15.    if ($players -> energia < 5)  
  16.    {
  17.        $tekst = 'Niestety, ale nie możesz wykonywać tej czynności ponieważ Twoja postać nie posiada wystarczającej ilości energii';
  18.    }
  19.    elseif ($players -> zycie == 0)  
  20.    {
  21.        $tekst = 'Niestety, ale nie możesz wykonywać tej czynności ponieważ Twoja postać jest martwa';
  22.    }
  23.    else
  24.    {
  25.        $rand = rand(0,count($options)-1); //losowanie liczby z podanego zakresu
  26.        $tekst = $options[$rand]['text'];
  27.        mysql_query($options[$rand]['query']);
  28.     }
  29. }
  30. else
  31. {
  32. $tekst = 'Jesteś w piwnicy<br /><a href="gra.php?act=lokacja&miejsce=piwnica&akcja=idzie" />Wejdź do piwnicy</a>';
  33. }
  34. ?>

Ponadto doszedłem do wniosku, że nie samo zapytanie się zapętla tylko cały kod! Bo potrafi mi najpierw wylosować pierwszą opcję-dodać 1 a do bazy leci 3 czyli w pętli wykonuje jeszcze raz losowanie i trafia na opcje druga.
erix
A o array_rand" title="Zobacz w manualu PHP" target="_manual słyszałeś? tongue.gif Znowu wynajdujesz koło na nowo. tongue.gif

Cytat
Bo potrafi mi najpierw wylosować pierwszą opcję-dodać 1 a do bazy leci 3 czyli w pętli wykonuje jeszcze raz losowanie.

Cóż, musisz sam jakoś do tego dojść, bo problem może tkwić w innym miejscu skryptu. Przyda Ci się Xdebug i wstawianie echo 'asd' w losowych miejscach kodu.
ArekJ
hehe no to zaraz dam to array_rand winksmiley.jpg Mógłbyś mi opisać jak korzysta się z tego Xdebug? Bo narazie go zainstalowałem, włączyłem sesje i profiler i co dalej?
erix
Włącz sobie tracing w konfiguracji. Co do reszty, to manual. winksmiley.jpg
ArekJ
Uf... Dodałem do pliku config.php, który jest requirowany w playerclass.php zapytanie dodające mi 1 czegoś. I teraz po 2h testów doszedłem do czegoś takiego:

Nie powiem odkryłem coś ciekawego^^ Otóż w desperacji zaczołem bawić się exit; i doszedłem do tego, że jak dam:
  1. <?php
  2. require_once 'playerclass.php';
  3. $players = new player($id['id']);
  4. $lokacja = $players->lokacja;
  5. $zloto = $players->zloto;
  6. $energia = $players->energia;
  7. $zycie = $players->zycie;
  8. $act = $_GET['act'];
  9. $act_pages = array('czat', 'lokacja');
  10. if(in_array($act,$act_pages)){
  11. require_once 'gra/'.$act.'.php';
  12. }
  13. else{
  14. if(isset($_SESSION['login'])){
  15. $tekst = 'jestes zalogowany';
  16. }
  17. else{
  18. header("Location: index.php");
  19. die();
  20. }
  21. }
  22. $players = new player($id['id']);
  23. $zloto = $players->zloto;
  24. $energia = $players->energia;
  25. $zycie = $players->zycie;
  26. ?>
To dodaje mi poprawną wartość zapytania, a gdy dam tak:
  1. <?php
  2. require_once 'playerclass.php';
  3. $players = new player($id['id']);
  4. $lokacja = $players->lokacja;
  5. $zloto = $players->zloto;
  6. $energia = $players->energia;
  7. $zycie = $players->zycie;
  8. $act = $_GET['act'];
  9. $act_pages = array('czat', 'lokacja');
  10. if(in_array($act,$act_pages)){
  11. require_once 'gra/'.$act.'.php';
  12. }
  13. else{
  14. if(isset($_SESSION['login'])){
  15. $tekst = 'jestes zalogowany';
  16. }
  17. else{
  18. header("Location: index.php");
  19. die();
  20. }
  21. }
  22. $players = new player($id['id']);
  23. $zloto = $players->zloto;
  24. $energia = $players->energia;
  25. $zycie = $players->zycie;
  26. ?>
To już podwaja Czemu tak się dzieje? Gdzie tam jest błąd? Dodam, że dzieje się to jak jestem poprostu na gra.php nie ma żadnego ?act... a się zapętla. Wie ktoś czemu?
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.