Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pomoc z naprawie skryptu
Forum PHP.pl > Forum > Przedszkole
kawon
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
nospor
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.
aachi
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.
kawon
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. ?>
nospor
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?
kawon
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
nospor
Przecież napisałem w poprzednim poście:

tekst w zapytaniu bierze się w apostrofy. Ty nie bierzesz.
kawon
  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ć?
nospor
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
kawon
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..
nospor
no ale mysql_query($sql); zrobiłeś?
No chyba nie ograniczyłeś się tylko do zrobienia echo $sql? wink.gif
kawon
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'
nospor
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ę.
kawon
arrowheadsmiley.png

Udało się.. Muszę nauczyć się czytać
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.