Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Pomoc z naprawie skryptu
kawon
post 16.06.2011, 09:17:25
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


Witam.

Prosiłbym o pomoc w naprawie skryptu:
  1. <?PHP
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting(E_ALL ^ E_NOTICE);
  4.  
  5.  
  6. include("../config.php");
  7. include("komunikaty.php");
  8. $grupa = mysql_query('SELECT `group` FROM `users` WHERE `id` = '.$_SESSION['id'].'');
  9. $grupa = mysql_fetch_assoc($grupa);
  10. $tytul = $_POST['tytul'];
  11. $tresc = $_POST['tresc'];
  12. $autor = $_SESSION['nick'];
  13. $data = time();
  14. $sql = mysql_query('INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')');
  15. $sql = mysql_fetch_assoc($sql);
  16. // jeśli user jest zalogowany mysql_error()
  17. if($_SESSION['logged'])
  18. {
  19. if ($grupa['group'] == 2)
  20. {
  21. if(isset($_POST['dodaj']))
  22. {
  23. if(!$tytul || !$tresc)
  24. {
  25. echo 'Musisz podać tytuł i treść komunikatu.';
  26. }
  27. else{
  28. if($sql)
  29. {
  30. header( "refresh:2;url=index.php" );
  31. echo 'Komunikat został dodany.';
  32.  
  33.  
  34.  
  35. }
  36. else{
  37. echo 'Problem z zapytaniem<br>mysql_error()';
  38. }
  39. }
  40. }
  41. else{
  42. echo 'Problem z dodaniem.';
  43. }
  44. }
  45. else{
  46. echo 'Musisz się zalogować jako administrator żeby dodać komunikat.';
  47. }
  48. }
  49. ?>



Wywala dwa błędy w tych linijkach:
  1. $grupa = mysql_fetch_assoc($grupa);

  1. $sql = mysql_fetch_assoc($sql);



  1. Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in


Robi się cała biała strona i skrypt nie wykonuje się, już mi brakuje się. Jakieś wskazówki co z tym zrobić?
Pozdrawiam

Ten post edytował kawon 16.06.2011, 09:25:53
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 09:49:19
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




rozwiązanie Twojego problemu znajduje się tu:
Temat: Jak poprawnie zada pytanie
Zapoznaj się, zastosuj, zapytaj ponownie

ps:
error_reporting(E_ALL ^ E_NOTICE);
ma byc:
error_reporting(E_ALL);

ps2: tekst w zapytaniu bierze się w apostrofy.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
aachi
post 16.06.2011, 09:50:34
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 12
Dołączył: 4.08.2007

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


mysql_query wykonało Ci się z błędem...
Połączony jesteś z bazą?

Zerknij w przykłady jak powinno się używać tej funkcji: mysql_query ta strona akurat jest przetłumaczona na polski. Dodaj sprawdzanie, czy funkcja wykonała się poprawnie i sprawdź jaki błąd wyświetla.

Swoją drogą wrzucasz dane od użytkownika bezpośrednio do zapytania przez co narażony jesteś na atak sql injection. Użyj mysql_real_escape_string() na danych które odbierasz z $_POST i wstawiasz je do zapytania sql.

Ten post edytował aachi 16.06.2011, 09:51:30
Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:00:47
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


Poprawiłem cały kod i niestety nadal nic...

Zapytanie wykonuje się poprawnie, wkleiłem je do pma i wykonałem zapytanie z przykładowymi danymi i wykonało bez problemu..
  1. <?PHP
  2. ini_set('display_errors','1');
  3.  
  4.  
  5. include("../config.php");
  6. include("komunikaty.php");
  7.  
  8. // jeśli user jest zalogowany mysql_error()
  9. if($_SESSION['logged'])
  10. {
  11. $grupa = mysql_query('SELECT `group` FROM `users` WHERE `id` = '.$_SESSION['id'].'') or die('BŁĄD:'.mysql_error());
  12. $grupa = mysql_fetch_assoc($grupa);
  13. if ($grupa['group'] == 2)
  14. {
  15. if(isset($_POST['dodaj']))
  16. {
  17. $tytul = mysql_real_escape_string($_POST['tytul']);
  18. $tresc = mysql_real_escape_string($_POST['tresc']);
  19. $autor = mysql_real_escape_string($_SESSION['nick']);
  20. $sql = mysql_query('INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')') or die("BŁĄD ZAPYTANIA");
  21.  
  22. if(!$tytul || !$tresc)
  23. {
  24. echo 'Musisz podać tytuł i treść komunikatu.';
  25. }
  26. else{
  27. if($sql)
  28. {
  29. header( "refresh:2;url=index.php" );
  30. echo 'Komunikat został dodany.';
  31.  
  32.  
  33.  
  34. }
  35. else{
  36. echo 'Problem z zapytaniem<br>mysql_error()';
  37. }
  38. }
  39. }
  40. else{
  41. echo 'Problem z dodaniem.';
  42. }
  43. }
  44. else{
  45. echo 'Musisz się zalogować jako administrator żeby dodać komunikat.';
  46. }
  47. }
  48. ?>
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 10:05:22
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
i wykonałem zapytanie z przykładowymi danymi i wykonało bez problemu..
Ty nie masz wykonać z przykłądowymi danymi, ale masz wykonać dokładnie takie samo jakie wykonujesz tu.

ps: po wprowadzeniu popraprawek nie wyswietliły ci się zadnego dodatkowe błędy?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:11:31
Post #6





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


Zrobiłem tak:

  1. <?PHP
  2. ini_set('display_errors','1');
  3.  
  4. include("../config.php");
  5.  
  6. // jeśli user jest zalogowany mysql_error()
  7. if($_SESSION['logged'])
  8. {
  9. $grupa = mysql_query('SELECT `group` FROM `users` WHERE `id` = '.$_SESSION['id'].'') or die('BŁĄD:'.mysql_error());
  10. $grupa = mysql_fetch_assoc($grupa);
  11. if ($grupa['group'] == 2)
  12. {
  13. if(isset($_POST['dodaj']))
  14. {
  15. $tytul = mysql_real_escape_string($_POST['tytul']);
  16. $tresc = mysql_real_escape_string($_POST['tresc']);
  17. $autor = mysql_real_escape_string($_SESSION['nick']);
  18. $sql = mysql_query('INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')') or die('BŁĄD:'.mysql_error());
  19.  
  20. if(!$tytul || !$tresc)
  21. {
  22. echo 'Musisz podać tytuł i treść komunikatu.';
  23. }
  24. else{
  25. if($sql)
  26. {
  27. header( "refresh:2;url=index.php" );
  28. echo 'Komunikat został dodany.';
  29.  
  30.  
  31.  
  32. }
  33. else{
  34. echo 'Problem z zapytaniem<br>mysql_error()';
  35. }
  36. }
  37. }
  38. else{
  39. echo 'Problem z dodaniem.';
  40. }
  41. }
  42. else{
  43. echo 'Musisz się zalogować jako administrator żeby dodać komunikat.';
  44. }
  45. }
  46. ?>



I teraz gdy w tytule komunikatu lub w treści wpiszę LITERY to mam błąd np:
Unknown column 'test' in 'field list'

Jak wpiszę cyfry w obu np: 1221 to zaś wywala błąd autora komunikatu:
Unknown column 'kawon' in 'field list'

Kolumny w bazie są zapisane na pobieranie danych typu string text więc nie wiem o co chodzi
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 10:12:42
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Przecież napisałem w poprzednim poście:

tekst w zapytaniu bierze się w apostrofy. Ty nie bierzesz.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:17:53
Post #8





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


  1. $sql = mysql_query('INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')') or die('BŁĄD:'.mysql_error());


Wszystko jest w apostrofach, wklejam całe zapytanie do bazy i normalnie dodaje. Więc w którym miejscu poprawka musi być?
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 10:20:39
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




NIe, nic nie jest w apostrofach. W apostrofy to ty kolego wstawiłeś zapytanie.

Jakbyś zastosował się do raz z tematu do którego cię odesłałem to byś zrobił tak:
$sql = 'INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')';
echo $sql;

Nadal tam widzisz apostrofy w tekscie? smile.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:25:56
Post #10





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


Co za głupi błąd.. Oczywiście teraz mi wywala że komunikat dodany i normalnie przerzuca do index.php tak jak miało być, jednak do bazy nie zostanie dodany ten news..
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 10:26:51
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale mysql_query($sql); zrobiłeś?
No chyba nie ograniczyłeś się tylko do zrobienia echo $sql? wink.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:42:01
Post #12





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


No tak i zaś problem z apostrofami chociaż mam tak jak kazałeś

  1. <?PHP
  2. ini_set('display_errors','1');
  3.  
  4. include("../config.php");
  5.  
  6. // jeśli user jest zalogowany mysql_error()
  7. if($_SESSION['logged'])
  8. {
  9. $grupa = mysql_query('SELECT `group` FROM `users` WHERE `id` = '.$_SESSION['id'].'') or die('BŁĄD:'.mysql_error());
  10. $grupa = mysql_fetch_assoc($grupa);
  11. if ($grupa['group'] == 2)
  12. {
  13. if(isset($_POST['dodaj']))
  14. {
  15. $tytul = mysql_real_escape_string($_POST['tytul']);
  16. $tresc = mysql_real_escape_string($_POST['tresc']);
  17. $autor = mysql_real_escape_string($_SESSION['nick']);
  18. $sql = 'INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')';
  19. if(!$tytul || !$tresc)
  20. {
  21. echo 'Musisz podać tytuł i treść komunikatu.';
  22. }
  23. else{
  24. if(mysql_query($sql))
  25. {
  26. header( "refresh:2;url=../index.php" );
  27. echo 'Komunikat został dodany.';
  28.  
  29.  
  30.  
  31.  
  32. }
  33. else{
  34. echo 'Problem z zapytaniem<br>';
  35. }
  36. }
  37. }
  38. else{
  39. echo 'Problem z dodaniem.';
  40. }
  41. }
  42. else{
  43. echo 'Musisz się zalogować jako administrator żeby dodać komunikat.';
  44. }
  45. }
  46. ?>



Błąd mysql:
  1. Problem z zapytaniem
  2. Unknown column 'sedfs' in 'field list'
Go to the top of the page
+Quote Post
nospor
post 16.06.2011, 10:45:53
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




O ja pierdziu.... nadal nie wstawiłeś tekstu w zapytaniu w aspotrofy!

No ograniczyłeś się tylko do
$sql = 'INSERT INTO `news` (`data_dodania` , `tytul`, `tresc`, `autor`) VALUES ('.$data.', '.$tytul.', '.$tresc.', '.$autor.')';
No przecież ja ci to podałem byś zobaczył jaki masz błąd.
No przecież jak zrobisz
echo $sql;
to dopiero widać jak wygląda to zapytanie. I to zapytanie nie zawiera apostrofów. Ty te apostrofy masz dodać. No pomyśl trochę.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kawon
post 16.06.2011, 10:56:09
Post #14





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 3.03.2010

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


arrowheadsmiley.png

Udało się.. Muszę nauczyć się czytać
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 Wersja Lo-Fi Aktualny czas: 14.07.2025 - 13:16