Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Czemu Nie Obsluguje?
Forum PHP.pl > Forum > Przedszkole
Gość_kuba
mam problem z formularzem. no ale moze po kolei...

mam plik autor.php, w ktorym mam dwa linki:
Kod
<a href="autor2.php?link=komentarze">0</a>
<a href="autor2.php?link=dodaj">dodaj</a>

oba linki prowadza, zreszta co widac, do tego samego pliku - autor2.php.
w pliku tym mam skrypty, ktore w zaleznosci od wartosci zmiennej $link includuja odpowiedni pliki.
problem twki w tym, ze pliki sa includowane poprawnie, bo jezeli $link == 'dodaj' to wyswietla mi formularz, ale nie chce go obslugiwac. kod formularza i obslugujacy go sa includowane.
po prawidlowym wypelnieniu powinno mnie przeniesc do autor2.php?link=komentarze, a po blednym, powinny pojawic sie informacje o bledzie, a tymczasem przenosi mnie do... autor.php.
dlaczego tak jest? gdzie jest blad?
ponizej jest caly kod wszystkich plikow

autor2.php
  1. <?php
  2. if (!isset($_GET['link'])) {
  3. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/autor.php\");
  4. exit();
  5. } else {
  6. switch (($_GET['link'])) {
  7. case 'dodaj':
  8. $strona = 'autor - dodaj komentarz';
  9. break;
  10. case 'komentarze':
  11. $strona = 'autor - komentarze';
  12. break;
  13. }
  14. }
  15.  
  16. //koniec
  17.  
  18. if (($_GET['link']) == 'dodaj') {
  19. include ('inc/autor_dodaj1.inc');
  20. } 
  21. include ('inc/head.inc');
  22. $bg_color = rand(1,4);
  23. $bg_color = 'bg_color' . $bg_color . '.css';
  24. include ('inc/dane.inc');
  25. include ('inc/data.inc');
  26. include ('inc/zegar.inc');
  27. ?>
  28. <script language=\"JavaScript\">
  29. // by Jakub
  30. var szer=screen.width
  31. if (szer<=800)
  32. document.write('<link rel=\"stylesheet\" type=\"text/css\" href=\"css/800.css\">');
  33. if (szer>800&&szer<=1024)
  34. document.write('<link rel=\"stylesheet\" type=\"text/css\" href=\"css/1024.css\">');
  35. if (szer>1024)
  36. document.write('<link rel=\"stylesheet\" type=\"text/css\" href=\"css/1280.css\">');
  37. </script>
  38. <link rel=\"stylesheet\" type=\"text/css\" href=\"css/<?php echo $bg_color; ?>\" />
  39. <?php
  40. if (($_GET['link']) == 'dodaj') {
  41. echo '<link rel=\"stylesheet\" type=\"text/css\" href=\"css/autor_dodaj.css\" />';
  42. } elseif (($_GET['link']) == 'komentarze') {
  43. echo '<link rel=\"stylesheet\" type=\"text/css\" href=\"css/autor_komentarze.css\" />';
  44. }
  45. ?>
  46. </head>
  47. <body onLoad=\"show5()\">
  48.  
  49. <!-- cale okno -->
  50. <div id=\"okno1\">
  51.  
  52. <!-- okno wlasciwe -->
  53. <div id=\"okno2\">
  54.  
  55. <!-- gora -->
  56. <div id=\"g_tlo\">
  57. <div id=\"g_menu\">
  58. <?php
  59. include ('inc/g_menu.inc');
  60. ?>
  61. </div>
  62.  
  63. </div>
  64. <!-- /gora -->
  65.  
  66. <!-- srodek -->
  67. <!-- srodek s_kolumna1 -->
  68. <div id=\"s_kolumna1\">
  69.  
  70. <table id=\"dataiczas\" cellspacing=\"0\" cellpadding=\"0\">
  71. <tr>
  72. <td id=\"data\">
  73. <?php
  74. echo &#092;"$day1, $day2 $month $year\";
  75. ?></td>
  76. <td id=\"zegar\">
  77. <span id=\"liveclock\"></span></td>
  78. </tr>
  79. </table>
  80.  
  81. <!-- srodek s_kolumna1 s_naglowek -->
  82. <div id=\"s_naglowek\">
  83. <?php echo $strona; ?>
  84.  
  85. </div>
  86. <!-- /srodek s_kolumna1 s_naglowek -->
  87.  
  88. <!-- srodek s_kolumna1 s_okno -->
  89. <div id=\"s_okno\">
  90. <?php
  91. if (isset($message)) {
  92. echo '<div style=\"color: #dc143c;\">' . $message . '</div>';
  93. }
  94. if (($_GET['link']) == 'dodaj') {
  95. include('inc/autor_dodaj2.inc');
  96. } elseif (($_GET['link']) == 'komentarze') {
  97. include('inc/autor_komentarze2.inc');
  98. }
  99. ?>
  100.  
  101. </div>
  102. <!-- /srodek s_kolumna1 s_okno -->
  103.  
  104. </div>
  105. <!-- /srodek s_kolumna1 -->
  106.  
  107. <!-- srodek s_kolumna2 -->
  108. <div id=\"s_kolumna2\">
  109. <div id=\"s_menu\">
  110. <?php
  111. include ('inc/s_menu1.inc');
  112. include ('inc/s_menu2.inc');
  113. include ('inc/s_menu3.inc');
  114. ?>
  115.  
  116. </div>
  117. <!-- /srodek s_kolumna2 -->
  118.  
  119. </div>
  120. <!-- /srodek -->
  121.  
  122. <!-- dol -->
  123. <div id=\"d_tlo\">
  124. <div id=\"d_menu\">
  125. <?php
  126. include ('inc/d_menu.inc');
  127. ?>
  128. </div>
  129. <div id=\"d_prawa\">
  130. <span style=\"font-size: 9px;\">&copy;</span> 2002-04 by <a href=\"mailto:<?php echo $kontakt; ?>\">kuba</a> | v<?php echo $wersja; ?>
  131. </div>
  132.  
  133. </div>
  134. <!-- /dol -->
  135.  
  136. </div>
  137. <!-- /okno wlasciwe -->
  138.  
  139. </div>
  140. <!-- /cale okno -->
  141.  
  142. </body>
  143. </html>


autor_dodaj1.inc - obslugujacy formularz:
  1. <?php
  2. if (isset($_POST['wyslij'])) {
  3. $message = NULL;
  4. if (strlen($_POST['nick']) > 0) {
  5. $nick1 = $_POST['nick'];
  6. } else {
  7. $nick1 = FALSE;
  8. $message .= 'podaj imię i nazwisko lub nick.' . '<br />';
  9. }
  10. if (strlen($_POST['email']) > 0) {
  11. $email1 = $_POST['email'];
  12. } else {
  13. $email1 = FALSE;
  14. $message .= 'podaj swój adres e-mail.' . '<br />';
  15. }
  16. if (strlen($_POST['tresc']) > 0) {
  17. $tresc1 = $_POST['tresc'];
  18. } else {
  19. $tresc1 = FALSE;
  20. $message .= 'podaj tresc komentarza.' . '<br />';
  21. }
  22. if ($data && $nick1 && $email1 && $tresc1) {
  23. require_once('../kuba1.php');
  24. $query = &#092;"INSERT INTO autor_komentarze (data, nick, email, adres, tresc) VALUES (NOW(), '$nick1', '$email1', '$adres1', '$tresc1')\";
  25. $result = @mysql_query($query);
  26. if ($result) {
  27. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/autor2.php?link=komentarze\");
  28. exit();
  29. } else {
  30. $message = 'awaria systemu.' . '<br />';
  31. }
  32. } else {
  33. $message .= 'wypełnij formularz jeszcze raz.' . '<br />';
  34. }
  35. }
  36. ?>


autor_dodaj2.inc - kod formularza:
  1. <form action=\"<?php echo $_SERVER['PHP_SELF']; ?>\" method=\"post\">
  2. <table cellspacing=\"0\" cellpadding=\"0\">
  3. <tr>
  4. <td class=\"lewa\">imię i nazwisko lub nick:</td>
  5. <td class=\"prawa\"><input type=\"text\" name=\"nick\" size=\"30\" value=\"<?php if (isset($_POST['nick'])) echo $_POST['nick']; ?>\" /></td>
  6. </tr>
  7. <tr>
  8. <td class=\"lewa\">e-mail:</td>
  9. <td class=\"prawa\"><input type=\"text\" name=\"email\" size=\"30\" value=\"<?php if (isset($_POST['email'])) echo $_POST['email']; ?>\" /></td>
  10. </tr>
  11. <tr>
  12. <td class=\"lewa\">adres strony www:</td>
  13. <td class=\"prawa\"><input type=\"text\" name=\"adres\" size=\"30\" value=\"<?php if (isset($_POST['adres'])) echo $_POST['adres']; ?>\" /></td>
  14. </tr>
  15. <tr>
  16. <td class=\"lewa\">tre&para;ć:</td>
  17. <td class=\"prawa\"><textarea name=\"tresc\" cols=\"55\" rows=\"4\" value=\"<?php if (isset($_POST['tresc'])) echo $_POST['tresc']; ?>\" /></textarea></td>
  18. </tr>
  19. <tr>
  20. <td class=\"lewa\">&nbsp;</td>
  21. <td class=\"prawa\"><input type=\"submit\" name=\"wyslij\" value=\"dodaj\" /></td>
  22. </tr>
  23. </table>
  24. </form>
sf
juz pisalem w innych postach... po co dajesz caly kod? tworzysz nowy plik,w ktorym zawierasz tylko problem i na nim testujesz... a jak sie nie da dalej to go wklejasz tutaj

sorry, ale jesli mialbym szukac bledu w tym calym kodzie, ktory nie ja pisalem to by mnie cos wzielo, zwlaszcza, ze nie jest on ladnie napisany :/
Dawid Pytel
Faktycznie, jakos nie chce sie tego czytac, z problemu ktory opisales mozna zrozumiec ze w formularzy nie wysylasz zmiennej $_GET['link']. Masz jedynie action="autor.php" a powinno byc autor.php?link=to_co_chcesz
Gość_kuba
dzieki za rady...
zrobilem tak jak pisales sf i sprawdzilem, poprawilem i rzeczywiscie blad byl w tym, ze nie dopisalem ?link=dodaj , dzieki dawid.

no ale jeszcze jedno pytanie tak na marginesie... dlaczego po niepelnym wypelneniu formularza sa zapamietywane dane z pol typu text a z pola textarea nie? czy no normalne?
Paul
Moze maly OT ale zauwazylem, ze masz niektore pliki z rozszerzeniem inc... Gdy nie jest odpowiednio skonfugurowany serwer ten plik jest normalnie wypluwany bez przetworzenia przez php... A co za tym idzie ktos moze podejrzec twoj kod (na przyklad hasla do bazy) jesli zna sciezke pliku.. Dlatego uzywaj rozszerzen inc.php albo samo php, mozna co prawda odpowiednio skonfigurowac serwer tylko przy zmianie serwera (na docelowy zamiast localhosta) trzeba to uwzgledniac...
Gość_kuba
wszystkie pliki z jakimis istotnymi danymi mam zapisane z rozszerzeniem .php, np. w takim pliku mam haslo do bazy, nazwe, itd. - chyba o to ci chodzi?
no to to akurat mam dobrze... w plikach .inc mam tylko kody html lub php ktore nie zawieraja poufnych danych.
ale dzieki za rady.
Gość_kuba
no to moze jeszcze jedno pytanie...
otoz znalazlem pewna funkcje, ktora ma zwiekszac stopien bezpieczenstwa...

  1. <?php
  2. //funkcja wstawiajaca odwrotny ukosnik przed znakami spejclanymi
  3. function escape_data ($data) {
  4. global $dbc;
  5. if (ini_get('magic_quotes_gpc')) {
  6. $data = stripslashes($data);
  7. }
  8. return mysql_real_escape_string($data, $dbc);
  9. }
  10.  
  11. ?>


tylko, ze przy blednym wypelnieniu formularza pojawia mi sie blad, ze funckja nie moze uzyskac dostepu do bazy danych.

Warning: mysql_real_escape_string() expects parameter 2 to be resource, null given in c:\inetpub\wwwroot\kuba\inc\autor_dodaj1.inc on line 8

jak to moge naprawic?
Paul
Blad jest najprawdopodobniej spowodowany tym, ze nie masz przypisanego do zmiennej $dbc polaczenia...

Jesli nie masz naraz kilku polaczen to mozesz poprostu nie wpisywac indentyfikatora polaczenia w mysql_real_escape_string, czyli:

  1. <?php
  2. function escape_data ($data) {
  3. if (ini_get('magic_quotes_gpc')) {
  4. $data = stripslashes($data);
  5. }
  6. return mysql_real_escape_string($data);
  7. }
  8. ?>
Gość_kuba
nie moge skorzystac z tego rozwiazania - kodu, co ty mi podales, z czego wynika, ze mam kilka polaczen... pozostaje mi wiec przypisac polaczenie do zmiennej $dbc. ale jak? tylko prosze o wyrozumialosc.
Paul
  1. <?php
  2. $dbc = mysql_connect('','login','haslo');
  3. ?>
Gość_kuba
kurde... dalej mi nie dziala...
wystwietla mi sie 'awaria systemu' po wypelnieniu formularza i kliknieciu 'wyslij', a dane powinny zostac wyslane do bazy.
probowalem na dwa sposoby:

w piarszym dane o hoscie, loginie, hasle i nazwie bazy sa wstawiane z pliku plik.php
  1. <?php
  2. //funkcja wstawiajaca odwrotny ukosnik przed znakami spejclanymi
  3. require_once ('../plik.php');
  4. function escape_data ($data) {
  5. global $dbc;
  6. if (ini_get('magic_quotes_gpc')) {
  7. $data = stripslashes($data);
  8. }
  9. return mysql_real_escape_string($data, $dbc);
  10. }
  11. ?>


drugi polegal po prostu na wpisaniu danych:
  1. <?php
  2. //funkcja wstawiajaca odwrotny ukosnik przed znakami spejclanymi
  3. $dbc = mysql_connect ('localhost', 'login', 'haslo');
  4. mysql_select_db ('nazwa_bazy');
  5. function escape_data ($data) {
  6. global $dbc;
  7. if (ini_get('magic_quotes_gpc')) {
  8. $data = stripslashes($data);
  9. }
  10. return mysql_real_escape_string($data, $dbc);
  11. }
  12. ?>


no i gdzie jest blad? niby powinno przeciez dzialac...
Paul
Dziwne, dziwne - u mnie to dziala tongue.gif... A mam takie pytanie... gdzie wywolujesz funkcje? I jaki blad ci zwraca?

PS. Mowisz, ze masz kilka polaczen z baza naraz (czyli jakby kilka mysql_connect przypisanych do roznych zmiennych) a podajesz kod w ktorym przy funkcji mysql_select_db nie jest to uwzglednione... Mam wrazenie, ze masz jedno... To, ze masz kilka to chyba efekt nieporozumienia sie pare postow wczesniej spowodowanego tym, ze ci to nie dziala smile.gif
Gość_kuba
w obsludze bledow dodalem jeszcze mysql_error().
w formularzu mam 4 pola, a w zwracanym komunikacie o bledzie jest podana tresc tylko jednoe z nich - 'tresc'.
a to komunikat:

awaria systemu.
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ' 'tresc')' at line 1

moze to cos pomoze... ?
Gość_kuba
funkcje wywoluje przy obsludze formularza... we wczesniejszych kodach co podawalem nie bylo tego...

  1. <?php
  2. //funkcja wstawiajaca odwrotny ukosnik przed znakami spejclanymi
  3. require_once ('../kuba1.php');
  4. function escape_data ($data) {
  5. global $dbc;
  6. if (ini_get('magic_quotes_gpc')) {
  7. $data = stripslashes($data);
  8. }
  9. return mysql_real_escape_string($data, $dbc);
  10. }
  11.  
  12. //funkcja obslugujaca formularz
  13. if (isset($_POST['wyslij'])) {
  14. $message1 = NULL;
  15. if (strlen($_POST['nick']) > 0) {
  16. $nick1 = escape_data($_POST['nick']);
  17. } else {
  18. $nick1 = FALSE;
  19. $message1 .= 'podaj imię i nazwisko lub nick.' . '<br />';
  20. }
  21. if (strlen($_POST['email']) > 0) {
  22. $email1 = escape_data($_POST['email']);
  23. } else {
  24. $email1 = FALSE;
  25. $message1 .= 'podaj swój adres e-mail.' . '<br />';
  26. }
  27. if (strlen($_POST['tresc']) > 0) {
  28. $tresc1 = escape_data($_POST['tresc']);
  29. } else {
  30. $tresc1 = FALSE;
  31. $message1 .= 'podaj tresc komentarza.' . '<br />';
  32. }
  33. if ($nick1 && $email1 && $tresc1) {
  34. require_once('../kuba1.php');
  35. $query = &#092;"INSERT INTO autor_komentarze (data, nick, email, adres, tresc) VALUES (NOW(), '$nick1', '$email1', \" . escape_data($_POST['adres']) . \", '$tresc1')\";
  36. $result = @mysql_query($query);
  37. if ($result) {
  38. header (&#092;"Location: http://\" . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . \"/autor2.php?link=komentarze\");
  39. exit();
  40. } else {
  41. $message1 = 'awaria systemu.' . mysql_error() . '<br />';
  42. }
  43. } else {
  44. $message1 .= 'wypełnij formularz jeszcze raz.' . '<br />';
  45. }
  46. }
  47. ?>
Gość_kuba
ok... zmienilem kod funkcji na ten podany przez ciebie jeszcze raz, tak dla pewnosci:

  1. <?php
  2. //funkcja wstawiajaca odwrotny ukosnik przed znakami spejclanymi
  3. function escape_data ($data) {
  4. if (ini_get('magic_quotes_gpc')) {
  5. $data = stripslashes($data);
  6. }
  7. return mysql_real_escape_string($data);
  8. }
  9. ?>


ale mimo to, dalej jest ten sam blad.
Paul
Hmm odpalilem sobie ten kod ze zmienonymi zmiennymi POST na GET z takim adresem:

wyslij=a&nick=b&email=a&adres=b&tresc=a

No i skrypt z mala poprawka dziala jak nalezy:

  1. <?php
  2. $query = &#092;"INSERT INTO autor_komentarze (data, nick, email, adres, tresc) VALUES (NOW(), '$nick1', '$email1', '\" . escape_data($_POST['adres']) . \"', '$tresc1')\";
  3. ?>


Dodala mi sie do bazy odpowiednia pozycja i nie wywalilo nigdzie zandego errora...
Gość_kuba
a wiesz co... wrzocilem te pliki na stronke, troche pozmienialem i dziala :D . wprawdzie niewiele zmienilem, bo tylko kody wkleilem i zamienilem miejsce require_once(); no i dziala... nie dawalem przesylania sposobem GET - to miala byc jak cos to ostatecznosc.
dzieki za pomoc.

z tego chyba wynika, ze ja mam cos zle skonfigurowane... :|
Gość_kuba
ooo... dziala i u mnie... czyli byl jednak gdzies blad, bo teraz poprawilem i swoje na wzor tego, co dalem na serwer na necie...
praktycznie, to zmienilem miejsce require_once(); i jeszcze obsluge pola 'adres' z formularza i wszystko co z nim zwiazane, czyli tez wpisywanie do bazy.
kamien spadl mi z serca. dzieki.

mozna juz zamknac smile.gif
Paul
To z tym get bylo dlatego, ze nie chcialo mi sie formularza z POST robic lub bawic sie w udawanie go skryptem smile.gif
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.