Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/mysql] Problem przy dodawniu do bazy
aga323
post
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


Witam. Otóż mój problem wygląda następująco: mam zrobiony dziennik internetowy z ocenami w bazie tabele userzy, oceny itd. w tabeli oceny mam kolumny id_user, id_przedmiot, semestr i ocena. I mam problem przy kolumnie semestr. Gdy przez skrypt dodaje ocenki na pierwszy semestr wszystko ładnie działa bez zastrzeżeń, ale gdy dodaję na drugi semestr to wcześniej mi dodawało na oba semestry tą ocenę, a teraz to mi nawet w ogóle nie dodaje... proszę o pomoc
Oto mój kod:
  1. <?
  2.  
  3. include ("connect.php");
  4. //------------------
  5. // Tablica post
  6. //---------------
  7. $ilosc = count($_POST);
  8. $powtuzen = $ilosc /2;
  9. //--------------------
  10. $id_przedmiot = $_POST['przedmiot'];
  11. $query = "SELECT id FROM `users`";
  12. $result = mysql_query ($query);
  13. for ($i=$ilosc; $i>=1; $i--)
  14. {
  15. $t = 'T'.$i;
  16. $t2 = 'T2'.$i;
  17. $b = $_POST[$t];
  18. $b2 = $_POST[$t2];
  19. $u = 'U'.$i;
  20. $u2 = 'U2'.$i;
  21. $user = $_POST[$u];
  22. $user2 = $_POST[$u2];
  23. $semestr = 1;
  24. $semestr2 = 2;
  25. if(!empty($b))
  26. {
  27. $a = explode(',', $b);
  28. $cos = count($a);
  29. for ($j=0; $j<$cos; $j++)
  30. {
  31. $ocena = $a[$j];
  32. if(!empty($ocena))
  33. {
  34. //-------------------------
  35. //  Zapytanie
  36. //-------------------------
  37. $query = "INSERT INTO `oceny` (id_user, id_przedmiot, semestr, ocena) VALUES ('$user', '$id_przedmiot', '1', '$ocena')" or die(mysql_error());
  38. $result = mysql_query ($query);
  39. //-------------------------
  40. }
  41. }
  42. }
  43.  
  44.  
  45.  
  46. else if(!empty($b2))
  47. {
  48. $a = explode(',', $b2);
  49. $cos = count($a);
  50. for ($k=0; $k<$cos; $k++)
  51. {
  52. $ocena2 = $a[$k];
  53. if(!empty($ocena2))
  54. {
  55. //-------------------------
  56. //  Zapytanie
  57. //-------------------------
  58. $query = "INSERT INTO `oceny` (id_user, id_przedmiot, semestr, ocena) VALUES ('$user2', '$id_przedmiot', '2', '$ocena2')" or die(mysql_error()) ;
  59. $result = mysql_query ($query);
  60.  
  61.  
  62. //-------------------------
  63. }
  64. }
  65. }
  66. }
  67. header( 'Location: ses.php?co=lista_p' );
  68. ?>


--------------------
Go to the top of the page
+Quote Post
Garrappachc
post
Post #2





Grupa: Zarejestrowani
Postów: 76
Pomógł: 2
Dołączył: 15.11.2007
Skąd: Kraków

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


A ten semestr to jaki typ? Tinyint, int, char...


--------------------


CPU | GPU | RAM | HDD | OS
Go to the top of the page
+Quote Post
Hazel
post
Post #3





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

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


No to tak. Przede wszystkim zapis
  1. <?php
  2. $query = "INSERT INTO `oceny` (id_user, id_przedmiot, semestr, ocena) VALUES ('$user2', '$id_przedmiot', '2', '$ocena2')" or die(mysql_error()) ;
  3. ?>

bije po oczach, bo błąd MySQL nie może wyskoczyć, dopóki w ogóle nie ma zapytania do bazy. W tym wierszu przypisujesz do zmiennej $query łańcuch znaków, będący nawiasem mówiąc zapytaniem do bazy. Nic się tutaj nie dzieje z MySQL. Dopiero wiersz kolejny, to jest $result = mysql_query($query) wykonuje zapytanie i dopiero on ma prawo wygenerować błąd MySQL. Poprawnym zapisem jest zatem:
  1. <?php
  2. $query = "INSERT INTO `oceny` (id_user, id_przedmiot, semestr, ocena) VALUES ('$user2', '$id_przedmiot', '2', '$ocena2')";
  3. $result = mysql_query($query) or die(mysql_error());
  4. ?>

Teraz funkcja mysql_error() ma szansę zwrócić cokolwiek. No i nie ma sensu zagłębiac się w kod, dopóki nie uruchomisz tego co jest i nie zobaczysz, co takiego wypluwa zapytanie do bazy. Na oko innych poważnych błędów nie widać, dlatego najlepiej będzie, jak zobaczysz przy odpowiednim wywołaniu mysql_error(), co jest nie tak.
Pozdrawiam.

Ten post edytował Hazel 28.12.2007, 15:02:18


--------------------
Go to the top of the page
+Quote Post
aga323
post
Post #4





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 26.01.2007
Skąd: Oborniki

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


Zrobiłam tak jak mówiłeś Hazel, ale nadal nie wywala mi żadnego błędu a ocen po prostu nie dodaje blinksmiley.gif
Może błąd leży w pliku, który przekazuje wcześniej te dane... W razie co podam ten wcześniejszy:
  1. <?
  2.  
  3. include ("connect.php");
  4. $id = $_GET['id'];
  5. $klasa = $_SESSION['klasa'];
  6. //-------------------------
  7. //  Zapytanie
  8. //-------------------------
  9. $przedmioty = mysql_query("SELECT * FROM przedmioty WHERE id=$id");
  10. $row = mysql_fetch_assoc($przedmioty);
  11. //-------------------------
  12.  
  13. echo '<form name="ocen" action="up.php" method="POST">';
  14. echo '<input type="hidden" name="przedmiot" value="'.$id.'" />';
  15. echo 'Przedmiot: ';
  16. echo $row['Nazwa'];
  17.  
  18. echo '<table border="1"><tr><td>Przedmioty</td><td>Semestr 1</td><td>Semestr 2</td></tr>';
  19.  
  20.  
  21. //-------------------------
  22. //  Zapytanie
  23. //-------------------------
  24.  
  25. $query = "SELECT * FROM `users` WHERE klasa = '$klasa' AND ranga ='0'";
  26. $result = mysql_query ($query);
  27. $uczen = $wynik['id'];
  28. $klasa = $_GET['klasa'];
  29. //-------------------------
  30.  
  31. while($wynik=mysql_fetch_array($result))
  32. {
  33.  
  34. if($wynik['id'] != 1)
  35. {
  36.  
  37. echo "\n";
  38. echo '<tr>';
  39. echo '<td>';
  40.  
  41. echo $wynik['imie']. ' ' .$wynik['nazwisko'];
  42. echo '</td>';
  43. echo '<td>';
  44. $uczen = $wynik['id'];
  45. $klasa = $_GET['klasa'];
  46. //-------------------------
  47. //  Zapytanie
  48. //-------------------------
  49. $oceny = mysql_query("SELECT * FROM `oceny` WHERE id_user=$uczen AND id_przedmiot=$id AND semestr
    =1"
    );
  50. $ilosc = mysql_num_rows($oceny);
  51. //-------------------------
  52.  
  53. if($ilosc != 0)
  54. {
  55.  
  56. while($wiersz = mysql_fetch_assoc($oceny))
  57. {
  58.  
  59. echo $wiersz['ocena']. ', ';
  60. }
  61. echo '<br>';
  62. echo '<input type="hidden" name="U'.$cos.'" value="' .$wynik['id']. '" />';
  63.  
  64. echo "\n";
  65. echo '<input type="text" name="T' .$cos. '" value="" />';
  66. }
  67. else
  68. {
  69. echo 'Brak ocen.';
  70.  
  71. echo "\n";
  72. echo '<input type="hidden" name="U'.$cos.'" value="' .$wynik['id']. '" />';
  73. echo '<br>';
  74.  
  75. echo "\n";
  76. echo '<input type="text" name="T' .$cos. '" value="" />';
  77.  
  78. echo "\n";
  79. }
  80. $cos++;
  81. echo '</td>';
  82. echo '<td>';
  83. $uczen = $wynik['id'];
  84. $klasa = $_GET['klasa'];
  85. $cos2=1;
  86. //-------------------------
  87. //  Zapytanie
  88. //-------------------------
  89. $oceny2 = mysql_query("SELECT * FROM `oceny` WHERE id_user=$uczen AND id_przedmiot=$id AND semestr
    =2"
    );
  90. $ilosc2 = mysql_num_rows($oceny2);
  91. //-------------------------
  92.  
  93. if($ilosc2 != 0)
  94. {
  95.  
  96. while($wiersz2 = mysql_fetch_assoc($oceny2))
  97. {
  98.  
  99. echo $wiersz2['ocena']. ', ';
  100. }
  101. echo '<br>';
  102. echo '<input type="hidden" name="U2'.$cos2.'" value="' .$wynik['id']. '" />';
  103.  
  104.  echo "\n";
  105. echo '<input type="text" name="T2' .$cos2. '" value="" />';
  106. }
  107. else
  108. {
  109. echo 'Brak ocen.';
  110.  
  111. echo "\n";
  112. echo '<input type="hidden" name="U2'.$cos2.'" value="' .$wynik['id']. '" />';
  113. echo '<br>';
  114.  
  115. echo "\n";
  116. echo '<input type="text" name="T2' .$cos2. '" value="" />';
  117.  
  118. echo "\n";
  119. }
  120.  $cos++;
  121. echo '</td>';
  122. echo '</tr>';
  123.  
  124. echo "\n";
  125. }
  126. }
  127. echo '</table>';
  128. echo '<input type="submit" value="wyslij" />';
  129. echo '</form>';
  130. ?>


Jakby co to typ tego semestru to tinyint...

Pomimo tego, że nie wywala mi żadnego błędu doszłam do fragmentu, w którym może siedzieć przyczyna. Zaraz podam ten kawałek kodu tylko wyjasnię o co mi chodzi. Więc, gdy w drugim semestrze mam zmienną $cos to wtedy dodaje mi ocenę na pierwszy i drugi semestr, a gdy ta zmienna zmienie na $cos2 to wtedy mi w ogóle nie dodaje nigdzie oceny :/ to teraz podaje kod:
  1. <?php
  2. $cos=1;
  3. $oceny2 = mysql_query("SELECT * FROM `oceny` WHERE id_user=$uczen AND id_przedmiot=$id AND semestr
    =2"
    );
  4. $ilosc2 = mysql_num_rows($oceny2);
  5. //-------------------------
  6.  
  7. if($ilosc2 != 0)
  8. {
  9.  
  10. while($wiersz2 = mysql_fetch_assoc($oceny2))
  11. {
  12.  
  13. echo $wiersz2['ocena']. ', ';
  14. }
  15. echo '<br>';
  16. echo '<input type="hidden" name="U2'.$cos.'" value="' .$wynik['id']. '" />';
  17.  
  18.  echo "\n";
  19. echo '<input type="text" name="T2' .$cos. '" value="" />';
  20. }
  21. else
  22. {
  23. echo 'Brak ocen.';
  24.  
  25. echo "\n";
  26. echo '<input type="hidden" name="U2'.$cos.'" value="' .$wynik['id']. '" />';
  27. echo '<br>';
  28.  
  29. echo "\n";
  30. echo '<input type="text" name="T2' .$cos. '" value="" />';
  31.  
  32. echo "\n";
  33. }
  34.  $cos++;
  35. echo '</td>';
  36. echo '</tr>';
  37.  
  38. echo "\n";
  39. }
  40. ?>

Jakby co to w pierwszym semestrze jest zmienna $cos zrobiona i tam wszystko działa.
Na prawdę proszę o pomoc, bo zależy mi na tym, żeby to szybko zrobić.


--------------------
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 Aktualny czas: 21.08.2025 - 03:50