Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Niekończąca się pętla while
Forum PHP.pl > Forum > Przedszkole
nikestylex7
Witam mam następujący problem. Napisałem skrypt który rozlicza mi kupony jakie złożył użytkownik gdy wejdzie na podstrone. Skrypt wykonuje się tak długo że serwer sam go zatrzymuje i nic się nie dzieje. W pętli zostają pobrane tylko 2 wyniki czyli powinna zrobić się 2 razy. Gdzie jest problem?

  1. //rozliczanie
  2. while($roz = mysql_fetch_assoc($rekordy)){
  3. $idd = $roz['id'];
  4. $cos = "SELECT *
  5. FROM kupony k
  6. JOIN uni_kupony u ON k.uni_id=u.id
  7. JOIN spotkania s ON s.id=k.zdarzenie
  8. WHERE
  9. s.rozliczony=0 AND
  10. k.uni_id='$idd'";
  11. $cos1 = mysql_query($cos);
  12. $wiersze = mysql_num_rows($cos1);
  13. echo $wiersze;
  14. if ($wiersze == 0){
  15. $spot = "SELECT * FROM kupony WHERE uni_id='$idd'";
  16. $rekord = mysql_query($spot);
  17. while($spotkanie = mysql_fetch_assoc($rekord)){
  18. $ids=$spotkanie['zdarzenie'];
  19. $spot2 = "SELECT * FROM spotkania WHERE id='$ids'";
  20. $rekord2 = mysql_query($spot2);
  21. while($sp = mysql_fetch_assoc($rekord2)){
  22. if($sp['wynik'] == $spotkanie['typ']){
  23. if($spotkanie['typ'] == 1){
  24. $tab[] = $sp['kurs1'];
  25. }else if($spotkanie['typ'] == 0){
  26. $tab[] = $sp['kursx'];
  27. }else if($spotkanie['typ'] == 2){
  28. $tab[] = $sp['kurs2'];
  29. }
  30. }else{
  31. mysql_query("UPDATE uni_kupony SET rozliczony='1' WHERE id='$idd'");
  32. }
  33. }}
  34. $rozlicz = "SELECT * FROM uni_kupony WHERE id_user='$iduser'";
  35. $rekordy = mysql_query($rozlicz);
  36. $spa = mysql_fetch_assoc($rekordy);
  37. if($spa['rozliczony'] == 0){
  38. $wynik = count ($tab);
  39. if($wynik == 1) {
  40. $razem = $tab[0] * $roz['stawka'];
  41. $iduser = $roz['id_user'];
  42. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  43. $kontopo = $konto['konto'] + $razem;
  44. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  45. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  46. }else if($wynik == 2) {
  47. $razem = ($tab[0] * $tab[1]) * $roz['stawka'];
  48. $iduser = $roz['id_user'];
  49. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  50. $kontopo = $konto['konto'] + $razem;
  51. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  52. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  53. }else if($wynik == 3) {
  54. $razem = ($tab[0] * $tab[1] * $tab[2]) * $roz['stawka'];
  55. $iduser = $roz['id_user'];
  56. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  57. $kontopo = $konto['konto'] + $razem;
  58. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  59. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  60. }else if($wynik == 4) {
  61. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3]) * $roz['stawka'];
  62. $iduser = $roz['id_user'];
  63. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  64. $kontopo = $konto['konto'] + $razem;
  65. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  66. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  67. }else if($wynik == 5) {
  68. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4]) * $roz['stawka'];
  69. $iduser = $roz['id_user'];
  70. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  71. $kontopo = $konto['konto'] + $razem;
  72. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  73. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  74. }else if($wynik == 6) {
  75. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5]) * $roz['stawka'];
  76. $iduser = $roz['id_user'];
  77. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  78. $kontopo = $konto['konto'] + $razem;
  79. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  80. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  81. }else if($wynik == 7) {
  82. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6]) * $roz['stawka'];
  83. $iduser = $roz['id_user'];
  84. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  85. $kontopo = $konto['konto'] + $razem;
  86. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  87. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  88. }else if($wynik == 8) {
  89. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6] * $tab[7]) * $roz['stawka'];
  90. $iduser = $roz['id_user'];
  91. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  92. $kontopo = $konto['konto'] + $razem;
  93. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  94. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  95. }else if($wynik == 9) {
  96. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6] * $tab[7] * $tab[8]) * $roz['stawka'];
  97. $iduser = $roz['id_user'];
  98. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  99. $kontopo = $konto['konto'] + $razem;
  100. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  101. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  102. }else if($wynik == 10) {
  103. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6] * $tab[7] * $tab[8] * $tab[9]) * $roz['stawka'];
  104. $iduser = $roz['id_user'];
  105. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  106. $kontopo = $konto['konto'] + $razem;
  107. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  108. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  109. }else if($wynik == 11) {
  110. $razem =($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6] * $tab[7] * $tab[8] * $tab[9] * $tab[10]) * $roz['stawka'];
  111. $iduser = $roz['id_user'];
  112. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  113. $kontopo = $konto['konto'] + $razem;
  114. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  115. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  116. }else if($wynik == 12) {
  117. $razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4] * $tab[5] * $tab[6] * $tab[7] * $tab[8] * $tab[9] * $tab[10] * $tab[11]) * $roz['stawka'];
  118. $iduser = $roz['id_user'];
  119. $konto = mysql_fetch_assoc(mysql_query("SELECT konto FROM user WHERE id = '$iduser'")) or die(mysql_error());
  120. $kontopo = $konto['konto'] + $razem;
  121. mysql_query("UPDATE uni_kupony SET wygrana='$razem', rozliczony='1' WHERE id='$idd'");
  122. mysql_query("UPDATE user SET konto='$kontopo' WHERE id='$iduser'");
  123. }
  124. }}
  125. }
  126. //koniec rozliczania
nospor
Ale sieczka.....

Co do problemu:
nadpisujesz zmienną $rekordy z pierwszej głównej pętli WHILE, więc ci się zapętla....
nikestylex7
aha widzę zaraz sprawdzę i dam znać //dzięki
timon27
a tak poza tym:
http://php.net/manual/en/control-structures.switch.php
nospor
A po co tu switch? Każdy z IFów zawiera to samo, różnią się jedynie tą linijką
$razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4]) * $roz['stawka'];
gdzie ilosc $tab jest dynamiczna i zależna od $wynik. Wystarczy wiec wywalić te wszystkie IFy, dać tam jeden ten ogólny kod a te linijke
$razem = ($tab[0] * $tab[1] * $tab[2] * $tab[3] * $tab[4]) * $roz['stawka'];
zamienić na FOR gdzie limit będzie określać właśnie $wynik.
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.