Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mysql
Forum PHP.pl > Forum > Przedszkole
plej
Witam. smile.gif
bo mam problem z dodawaniem tematów do forum które sam buduje (w ramach edukacyjnych) chodzi że wszystko ładnie mi pobiera itd. ale jak już chce dodać klikając na przycisk "Dodaj" pojawia mi się błąd "Notice: Undefined index: id_kategorii in /opt/lampp/htdocs/footbool/example3/add_post.php on line 5" i nie mogę tego rozszyfrować proszę o pomoc, Z góry bardzo dziękuje:)

Oto pliki
posts.php:
  1. <?php
  2. $id_kategorii = $_GET["id_kategorii"];
  3. $temat = $_GET["temat"];
  4. $tytul = $temat;
  5. include('naglowek.php');
  6. include('panel-logowania.php');
  7. include('menu-gora.php');
  8. include('menu-lewe.php');
  9. ?>
  10. <div id="srodek">
  11. <div id="srodekt"></div>
  12. <div id="srodeks">
  13. <?php
  14. echo '<font color="black" size="3" ><center>'.$temat.'</center></font>';
  15. include('db.php');
  16. $query = ("SELECT * FROM artykuly WHERE id_kategorii = $id_kategorii");
  17. mysql_query('SET NAMES \'utf8\'');
  18. $result = mysql_query($query);
  19. if (!$result) {
  20. die("Nie można wykonać zapytanai do bazy danych.");
  21. }
  22. while ($row = mysql_fetch_assoc($result)) {
  23. $tytul = $row["tytul"];
  24. $id_artykulu = $row["id_artykulu"];
  25. $uzytkownik = $row["uzytkownik"];
  26. echo '<div class="naglowek"><a href="view_post.php?id_artykulu='.$id_artykulu.'&tytul='.$tytul.'">'.$tytul.'</a> | Dodał: '.$uzytkownik.'</div>';
  27. $query2 = "SELECT * FROM komentarze WHERE id_artykulu = $id_artykulu";
  28. mysql_query('SET NAMES \'utf8\'');
  29. $result2 = mysql_query($query2);
  30. if (!$result2) {
  31. die("Nie można nawiązać połączenia z bazą danych.");
  32. }
  33. $ile = mysql_num_rows($result2);
  34. echo '<div class="srodek">Odpowiedzi: '.$ile.'</div>';
  35. }
  36. mysql_close($polaczenie);
  37. echo '<br/><br/>';
  38. if (isset($_SESSION['login'])) {
  39. echo '<a href="add_post.php?id_kategorii='.$id_kategorii.'">Dodaj temat</a> | <a href="modify_post.php?akcja=moje_tematy">Moje tematy</a>';
  40. } else {
  41. echo 'Musisz się <a href="logowanie.php">zalogować</a> lub <a href="rejestracja.php">zarejestrować</a>, aby dodać nowy temat';
  42. }
  43. ?>
  44. </div>
  45. <div id="srodekb"></div>
  46. </div>
  47.  
  48.  
  49. <?php
  50. include('prawa-strona.php');
  51. include('stopka.php');
  52. ?>


add_post.php
  1. <?php
  2. $tytul = "Dodawanie tematu";
  3. $id2 = $_GET["id_kategorii"];
  4. include('naglowek.php');
  5. include('panel-logowania.php');
  6. include('menu-gora.php');
  7. include('menu-lewe.php');
  8. ?>
  9. <div id="srodek">
  10. <div id="srodekt"></div>
  11. <div id="srodeks">
  12. <?php
  13. if (isset($_SESSION['login'])) {
  14.  
  15.  
  16. include 'db.php';
  17. $query = "SELECT * FROM kategorie WHERE id_kategorii = $id2";
  18. mysql_query('SET NAMES \'utf8\'');
  19. $result = mysql_query($query);
  20. if (!$result) {
  21. die("Nie można wykonać zapytania do bazy danych.");
  22. }
  23. while ($row = mysql_fetch_assoc($result)) {
  24. $id = $row["id_kategorii"];
  25. $temat = $row["temat"];
  26. }
  27. $uzytkownik = $_SESSION["login"];
  28. if ($_POST["wyslane"]) {
  29. $tytul2 = $_POST["tytul"];
  30. $tresc = $_POST["tresc"];
  31.  
  32. $query = "INSERT INTO artykuly VALUES('', '$id', '$uzytkownik', '$tytul2', '$tresc', NOW())";
  33. mysql_query('SET NAMES \'utf8\'');
  34. $result = mysql_query($query);
  35. if (!$result) {
  36. die("Nie można nawiązać połączenia z bazą danych.");
  37. }
  38.  
  39. }
  40.  
  41. mysql_close($polaczenie);
  42. // tworzenie formularza HTML
  43. echo <<< KONIEC
  44. <center><font color="black">
  45. Dodajesz temat do forum: <b>$temat</b></font>
  46. <br /></center>
  47. <form action="add_post.php" method="post">
  48. <input type="hidden" name="wyslane" value="TRUE" />
  49. <p>Tytuł: <input type="text" name="tytul" /></p>
  50. <div class="label"><label for="tresc">Treść</label></div>
  51. <textarea id="tresc" name="tresc" cols="40" rows="10"></textarea>
  52. <p><input type="submit" value="Dodaj" /></p></form>
  53. KONIEC;
  54.  
  55. } else {
  56. echo 'Musisz się <a href="logowanie.php">zalogować</a> lub <a href="rejestracja.php">zarejestrować</a>, aby dodawać nowe temat, komentarze.';
  57. }
  58. ?>
  59. <br />
  60. </div>
  61. <div id="srodekb"></div>
  62. </div>
  63. <?php
  64. include('prawa-strona.php');
  65. include('stopka.php');
  66. ?>


Proszę nie zwracać uwagi że kody nie są piękne bo to wiem:) nauka czyni mistrza z czasem się poprawie smile.gif
mat-bi
Cytat
Notice: Undefined index: id_kategorii in /opt/lampp/htdocs/footbool/example3/add_post.php on line 5


Eeee, to naprawdę taie ciężkie do odszyforwania? Jesli znasz angielski, powinno to łatwo pójść.
plej
Eeee, to naprawdę taie ciężkie do odszyforwania? Jesli znasz angielski, powinno to łatwo pójść.

Tak ciężko:) proszę o wyrozumiałość nie mam styczności z php nie wiem roku czy dłużej ucze się go zaledwie miesiąć a angielski cieżko mi idzie:/
mat-bi
Mam pytanie - czemu startujesz bufor, a nigdzie go nie wysyłąsz?
plej
nie wiem haha.gif
Liczę na waszą pomoc smile.gif


Pomożesz ?
nospor
Cytat
a angielski cieżko mi idzie
Miałem nie odpowiadać w tym temacie, ale znalazł plej twoją wypowiedź w innym wątku. Pozwól, że ją zacytuję:
Cytat
jak nie umiesz zbytnio angielskiego to na google chrome włącz i ustaw tłumaczenie stronki:)
Tak więc czegoś tu nie rozumiem. Innych pouczasz jak mają sobie radzić z angielskim a sam tutaj płaczesz, że angielskiego nie znasz.
Kshyhoo
Jezu, jak to ludzie wcześnie wstają ;p
Jak dobrze widzę, chcesz przekazać parametr $id_kategorii w linku:
  1. echo '<a href="add_post.php?id_kategorii='.$id_kategorii.'">Dodaj temat</a>';

Ale widocznie go nie przekazujesz. Sprawdź dlaczego, np. tak:
  1. print('<pre>GET: ');
  2. print_r($_GET);
  3. print('</pre>');
nospor
@Kshyhoo przecież w linku on go przekazuje. Nie przekazuje go gdy klika DODAJ w formularzu.
Kshyhoo
To ja wiem, ale chciałem, żeby sam poszukał ;p
plej
Tak wiem googgle chrome tłumaczy wiem co oznacza błąd ale nie znam tak php jeszcze zęby się domyślić co zrobić :/

Po naciśnieciu Dodaj wyskakuje błąd. wtedy dopisałem pare if'ów i pisze że zmienna $id2 nie istnieje i że nie można wykonać zapytania do bazy danych:/
Kshyhoo
Skoro pisze, że zmienna $id2 nie istnieje, to znaczy, że skrypt jej nie widzi.
Sprawdź swój formularz. Zmienną tą możesz przekazać np. poprzez ukryte pole formularza.
mortus
No to tak łopatologicznie. Jeśli mamy formularz, który wygląda tak:
  1. <form action="add_post.php" method="POST">
  2. <!-- ... -->
  3. <input type="submit" value="Dodaj" />
  4. </form>

To naciśnięcie przycisku Dodaj będzie równoważne z przekierowaniem do adresu, który określa właściwość action formularza, czyli w tym przypadku do pliku add_post.php. Czegoś chyba brakuje, prawda?

Kolega wyżej wspomniał, że zmienną można przekazać poprzez ukryte pole formularza. Owszem, ale w tym przypadku nie spowoduje to zniknięcia błędu, bowiem należałoby wtedy nieco inaczej obsłużyć cały skrypt (dopisać odpowiednie warunki). Poza tym w komunikacie błędu nie było żadnej wzmianki o zmiennej $id2.
plej
Dzięki smile.gif błędu już nie ma choć do bazy danych przekazuje i tak id_kategorii = 0 , a powinno 1 ale ważne że błędu nie ma:)
mortus
Przekazywanie niewłaściwego parametru to również błąd, wklej tutaj kod i sprawdzimy, czy problem tkwi w przekazywaniu parametru, czy może w zapytaniu do bazy danych.
plej
  1. <?php
  2. $id2 = $_GET["id_kategorii"];
  3. $tytul = "Dodawanie tematu";
  4. include('naglowek.php');
  5. include('panel-logowania.php');
  6. include('menu-gora.php');
  7. include('menu-lewe.php');
  8. ?>
  9. <div id="srodek">
  10. <div id="srodekt"></div>
  11. <div id="srodeks">
  12. <?php
  13.  
  14. if (isset($_SESSION['login'])) {
  15.  
  16.  
  17. include 'db.php';
  18. $query = "SELECT * FROM kategorie WHERE id_kategorii = $id2";
  19. mysql_query('SET NAMES \'utf8\'');
  20. $result = mysql_query($query);
  21. if (!$result) {
  22. die("Nie można wykonać zapytania do bazy danych.");
  23. }
  24. while ($row = mysql_fetch_assoc($result)) {
  25. $id = $row["id_kategorii"];
  26. $temat = $row["temat"];
  27. }
  28.  
  29. $uzytkownik = $_SESSION["login"];
  30. if ($_POST["wyslane"]) {
  31. $tytul2 = $_POST["tytul"];
  32. $tresc = $_POST["tresc"];
  33.  
  34. $query = "INSERT INTO artykuly VALUES('', '$id', '$uzytkownik', '$tytul2', '$tresc', NOW())";
  35. mysql_query('SET NAMES \'utf8\'');
  36. $result = mysql_query($query);
  37. if (!$result) {
  38. die("Nie można nawiązać połączenia z bazą danych.");
  39. }
  40. }
  41.  
  42.  
  43. mysql_close($polaczenie);
  44.  
  45. // tworzenie formularza HTML
  46. echo <<< KONIEC
  47. <center><font color="black">
  48. Dodajesz temat do forum: <b>$temat</b></font>
  49. <br /></center>
  50. <form action="add_post.php?id_kategorii=$id" method="post">
  51. <input type="hidden" name="wyslane" value="TRUE" />
  52. <p>Tytuł: <input type="text" name="tytul" /></p>
  53. <div class="label"><label for="tresc">Treść</label></div>
  54. <textarea id="tresc" name="tresc" cols="40" rows="10"></textarea>
  55. <p><input type="submit" value="Dodaj" /></p></form>
  56. KONIEC;
  57.  
  58. } else {
  59. echo 'Musisz się <a href="logowanie.php">zalogować</a> lub <a href="rejestracja.php">zarejestrować</a>, aby dodawać nowe temat, komentarze.';
  60. }
  61. ?>
  62. <br />
  63. </div>
  64. <div id="srodekb"></div>
  65. </div>
  66. <?php
  67. // mysql_query('SET NAMES \'utf8\'');
  68. include('prawa-strona.php');
  69. include('stopka.php');
  70. ?>



Linia '3' przypisuje id_kategorii do $id2
linia '19-27' pobieram dane jeśli $id2jest w bazie zeby pobrać nazwe tematu:)
linia '30-40' dodaje rekord do bazy i nizej jest formularze:)

tak wiem że nie filtruje danych:) dopisze to:)


a tak to dobrze jest??
mortus
Cytat
Linia '3' przypisuje id_kategorii do $id2
To dlaczego nie użyjesz zmiennej $id2 w parametrze action formularza?
W liniach 25-28 pętla while jest niepotrzebna, bo jeśli wcześniejsze zapytanie zwróci jakieś dane, to będzie to pojedynczy wiersz, zatem wystarczy:
  1. // ...
  2. $row = mysql_fetch_assoc($result);
  3. $id = $row['id_kategorii'];
  4. $temat = $row['temat'];
  5. // ...
  6. // opcjonalnie możesz tutaj sprawdzić, czy pobrało właściwe id
  7. // po prostu je wyświetlając
  8. echo $id.'<br />';
  9. // ...

Poza tym troszkę źle masz wszystko zorganizowane. Nie za bardzo rozumiem, po co są linie 18-28, skoro id kategorii i tak przekazujesz w adresie. Jeśli ma to służyć sprawdzeniu, czy kategoria o takim id istnieje, to takie sprawdzenie powinno się odbyć wcześniej, a nie w tym skrypcie.
plej
sprawdzam id czy jest takie w bazie i pobieram temat choć mogę getem pobrać z innego skrypt tzn. z posts.php wiem poprawie to:)
jak wspominałem wcześniej uczę się miesiąc php. Proszę o wyrozumiałośćsmile.gif
mortus
Nie już rozumiem i tak jest dobrze, tylko warto by było odseparować w kodzie część odpowiedzialną za obsługę formularza, od części odpowiedzialnej za jego wyświetlanie, ja bym to zrobił tak:
  1. <?php
  2.  
  3. // ustalamy tytuł strony i includujemy potrzebne pliki
  4. $tytul = "Dodawanie tematu";
  5. include 'naglowek.php';
  6. include 'panel-logowania.php';
  7. include 'menu-gora.php';
  8. include 'menu-lewe.php';
  9. include 'db.php';
  10. ?>
  11. <div id="srodek">
  12. <div id="srodekt">
  13. </div>
  14. <div id="srodeks">
  15. <?php
  16. $id2 = $_GET["id_kategorii"];
  17. // sprawdzamy, czy użytkownik jest zalogowany
  18. if (isset($_SESSION['login'])) {
  19.  
  20. // sprawdzamy, czy użytkownik wysłał formularz
  21. if ($_POST["wyslane"]) {
  22.  
  23. // pobieramy potrzebne dane
  24. $uzytkownik = $_SESSION["login"];
  25.  
  26. // pobieramy dane z formularza
  27. $tytul2 = $_POST["tytul"];
  28. $tresc = $_POST["tresc"];
  29. // i dodajemy do bazy danych
  30. $query = "INSERT INTO artykuly VALUES('', $id2, '$uzytkownik', '$tytul2', '$tresc', NOW())";
  31. mysql_query('SET NAMES \'utf8\'');
  32. $result = mysql_query($query);
  33. if (!$result) {
  34. die("Nie można nawiązać połączenia z bazą danych.");
  35. }
  36. // tutaj można przekierowanie zrobić
  37. }
  38.  
  39. // pobieramy informację na temat określonej kategorii, czyli jej temat
  40. $query = "SELECT temat FROM kategorie WHERE id_kategorii = $id2";
  41. mysql_query('SET NAMES \'utf8\'');
  42. $result = mysql_query($query);
  43. if (!$result) {
  44. die("Nie można wykonać zapytania do bazy danych.");
  45. }
  46. $row = mysql_fetch_assoc($result);
  47. $temat = $row["temat"];
  48. mysql_close($polaczenie);
  49.  
  50. // tworzenie formularza HTML
  51. echo <<< KONIEC
  52. <center><font color="black">
  53. Dodajesz temat do forum: <b>$temat</b></font>
  54. <br /></center>
  55. <form action="add_post.php?id_kategorii=$id" method="post">
  56. <input type="hidden" name="wyslane" value="TRUE" />
  57. <p>Tytuł: <input type="text" name="tytul" /></p>
  58. <div class="label"><label for="tresc">Treść</label></div>
  59. <textarea id="tresc" name="tresc" cols="40" rows="10"></textarea>
  60. <p><input type="submit" value="Dodaj" /></p></form>
  61. KONIEC;
  62. } else {
  63. echo 'Musisz się <a href="logowanie.php">zalogować</a> lub <a href="rejestracja.php">zarejestrować</a>, aby dodawać nowe temat, komentarze.';
  64. }
  65. ?>
  66. <br/>
  67. </div>
  68. <div id="srodekb">
  69. </div>
  70. </div>
  71. <?php
  72. // mysql_query('SET NAMES \'utf8\'');
  73. include ('prawa-strona.php');
  74. include ('stopka.php');
  75. ?>

W sumie to chodzi tylko o lepszą organizację kodu, ale poza tym jest dobrze.
plej
No tak:) z czasem poprawie kod:) ale i tak użyje twój sposób hehe:)
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.