Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+mysql] Resource id #9
Forum PHP.pl > Forum > PHP
Dziadzia
Witam.

Mam taki kod:

  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $tr = $_POST['content'];
  6. $nazwa_kom = $_GET['nazwa_k'];
  7. echo $nazwa_kom;
  8.  
  9. if ($tr AND $nazwa_kom){
  10.  
  11. $dupa = ("INSERT INTO `komentarze` SET tresc='$tr', nazwa_komentarza='$nazwa_kom' ");
  12. $iddupa = mysql_query($dupa) or die ('zapytanie: '.$dupa.'----blad:'.mysql_error());
  13. }
  14.  
  15. if ($tr) include('pokaz_komentarze.php');
  16.  
  17. else {
  18.  
  19. ?>
  20.  
  21. <html>
  22. <head>
  23. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  24. <script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
  25. </head>
  26. <body>
  27.  
  28. <div class="news">
  29.  
  30. <span id="tresc_newsa">
  31. <script type="text/javascript">
  32. tinyMCE.init({mode : "textareas",theme : "simple"});
  33. </script>
  34.  
  35. <form method="post" action="index.php?p=dodaj_komentarz">
  36.  
  37. <textarea name="content" style="width:100%"></textarea>
  38. <br /><br />
  39.  
  40. <input type="submit" value="dodaj" class="przycisk_komentuj">
  41.  
  42. </form>
  43. </span>
  44. <br />
  45.  
  46. <hr class="lini_przerywajaca" />
  47.  
  48. </div>
  49.  
  50. </body>
  51. </html>
  52. <?
  53. };
  54. ?>



i wyskakuje mi taki błąd: zapytanie: Resource id #9----blad:Something is wrong in your syntax obok 'Resource id #9' w linii 1

Od jakiegoś czasu staram się znaleźć błąd, lecz nie jestem w stanie. Najlepsze w tym wszystkim jest to, że mam identycznie wyglądający drugi plik, który dodaje newsy iDZIAŁA...

Proszę Was o pomoc, ponieważ mam ochotę rozwalić monitor klawiaturą... Z góry thx. smile.gif
Fifi209
Te pliki na pewno się includują, może w nich jest błąd?

  1. $dupa = ("INSERT INTO `komentarze` SET tresc='$tr', nazwa_komentarza='$nazwa_kom' ");

czemu to jest w nawiasach? ;o
darko
masz niepoprawne zapytanie, dla składni insert używasz set jak dla update, proponuję zmienić zapytanie na coś w tym stylu:

  1. INSERT INTO komentarze.tresc, komentarze.nazwa_komentarza VALUES ('$tr', '$nazwa_kom')
Fifi209
Cytat(darko @ 22.11.2009, 22:47:34 ) *
dla składni insert używasz set jak dla update

Co nie oznacza, że ma nie działać. Widziałem, już takie przykłady na necie.
tvister
tu
  1. <form method="post" action="index.php?p=dodaj_komentarz">

i tu
  1. $nazwa_kom = $_GET['nazwa_k'];
ps. składnia insert-a jest poprawna
thek
Chłopaki... Zapytanie jest w porządku. Problem jest prostszej natury. $dupa to już przetworzone przez mysql_query zapytanie. Dlatego mu wywala resource_blabla
On do mysql_query wysyła coś w stylu
mysql_query( mysql_query($dupa) ) smile.gif Bo to że ma zapytanie w nawiasach jest pewnie pozostałością po innym mysql_query...
Dziadzia
W poprzednim pliku również miałem zapytanie w stylu mysql_query aby wyświetlić newsy... tamto zapytanie jest o innej nazwie i działa poprawnie... tak wygląda plik który dodaje newsy i działa...

  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $tr = $_POST['content'];
  6. $nazwa = $_POST['nazwa'];
  7.  
  8. if ($tr AND $nazwa){
  9.  
  10. $pytanie = mysql_query("INSERT INTO `news` SET tresc='$tr', nazwa='$nazwa' ");
  11.  
  12. };
  13.  
  14. if ($tr) include('news.php');
  15.  
  16. else {
  17.  
  18. ?>
  19.  
  20.  
  21. <html>
  22. <head>
  23. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  24. <script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
  25. </head>
  26. <body>
  27.  
  28. <div class="news">
  29.  
  30. <span id="tresc_newsa">
  31. <script type="text/javascript">
  32. tinyMCE.init({mode : "textareas",theme : "simple"});
  33. </script>
  34.  
  35. <form method="post" action="index.php?p=dodaj_news">
  36.  
  37. Nazwa: <input type="text" name="nazwa" style="width: 200px; height: 20x;">
  38. <br /><br />
  39.  
  40. Treść:
  41. <textarea name="content" style="width:100%"></textarea>
  42. <br /><br />
  43.  
  44. <input type="submit" value="dodaj" class="przycisk_komentuj">
  45.  
  46. </form>
  47. </span>
  48. <br />
  49.  
  50. <hr class="lini_przerywajaca" />
  51.  
  52. </div>
  53.  
  54. </body>
  55. </html>
  56. <?
  57. };
  58. ?>


może wy znajdziecie różnicę, ja nie widzę sad.gif ... może za długo nad tym siedzę... tongue.gif
thek
A ja Ci mówię, że masz coś w stylu:
$dupa = mysql_query("INSERT INTO `komentarze` SET tresc='$tr', nazwa_komentarza='$nazwa_kom' ");
$iddupa = mysql_query($dupa) or die ('zapytanie: '.$dupa.'----blad:'.mysql_error());
zamiast:
$dupa = "INSERT INTO `komentarze` SET tresc='$tr', nazwa_komentarza='$nazwa_kom' ";
$iddupa = mysql_query($dupa) or die ('zapytanie: '.$dupa.'----blad:'.mysql_error());
i dlatego na zapytaniu dwukrotnie wykonuje Ci mysql_query i stąd ten błąd.
Nie wiem gdzie dokładnie to drugie mysql_query masz wbite... Może w innym pliku jeszcze, ale to właśnie powoduje przekazanie do bazy tego dziwnego resource zamiast zapytania.
Dziadzia
Ok! Znalazłem błąd w innym pliku i faktycznie było tak jak mówiliście miałem mysql_query(mysql_query(zapytanie...) - pozostałość po jednej linijce nie do końca skasowana smile.gif Lecz teraz problem nadal istnieje ponieważ nie mam pojęcia czemu nie chce mi dodawać do bazy dwóch zmiennych...

  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $tr = $_POST['content'];
  6. $nazwa_kom = $_GET['nazwa_k'];
  7. echo $nazwa_kom;
  8.  
  9. if ($tr AND $nazwa_kom) {
  10.  
  11. $zapytanie = mysql_query(" INSERT INTO `komentarze` SET tresc='$tr', nazwa_newsa='$nazwa_kom' ");
  12.  
  13.  
  14.  
  15. }
  16.  
  17. if ($tr) include('pokaz_komentarze.php');
  18.  
  19. else {
  20.  
  21. ?>
  22.  
  23. <html>
  24. <head>
  25. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  26. <script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
  27. </head>
  28. <body>
  29.  
  30. <div class="news">
  31.  
  32. <span id="tresc_newsa">
  33. <script type="text/javascript">
  34. tinyMCE.init({mode : "textareas",theme : "simple"});
  35. </script>
  36.  
  37. <form method="post" action="index.php?p=dodaj_komentarz">
  38.  
  39. <textarea name="content" style="width:100%"></textarea>
  40. <br /><br />
  41.  
  42. <input type="submit" value="dodaj" class="przycisk_komentuj">
  43.  
  44. </form>
  45. </span>
  46. <br />
  47.  
  48. <hr class="lini_przerywajaca" />
  49.  
  50. </div>
  51.  
  52. </body>
  53. </html>
  54. <?
  55. };
  56. ?>


zmienna nazwa_k jest pobierana z adresu strony.
  1. <a href=\"index.php?p=dodaj_komentarz&nazwa_k=$wiersz->nazwa\>


zamienna $nazwa_kom jest wyświetlana i w pasku adresu strony oraz w echo... Dlatego moje pytanie czemu w takim razie nie dodaje tej zmiennej do bazy?!
thek
Prawdopodobnie ma problem z przechwyceniem jednocześnie GET i POST. Sprawdź czy aby rzeczywiście coś jest w tych zmiennych i czy zapytanie się wykonuje. Przydają Ci się var_dump i mysql_error.
Dziadzia
Troszkę pozmieniałem, bo uznałem, że będzie lepiej i jest lepiej ale brakuje 1 rzeczy biggrin.gif to jest formularz pliku poprzedniego który nam wysyła id_newsa który chcemy skomentować:

  1. <form action=\"index.php?p=dodaj_komentarz\" method=\"post\">
  2.  
  3. <input type=\"hidden\" value=\"$wiersz->id\" name=\"id_newsa\">
  4.  
  5. <input type=\"submit\" value=\"komentuj\" class=\"przycisk_komentuj\">
  6.  
  7. </form> ";



A to jest plik który dodaje nam komentarze:

  1. <?php
  2.  
  3. include('conn.php');
  4.  
  5. $tr = $_POST['content'];
  6. $id_newsa = $_POST['id_newsa'];
  7.  
  8. var_dump($id_newsa);
  9.  
  10. if ($tr AND $id_newsa) {
  11.  
  12. $zapytanie = (" INSERT INTO `komentarze` SET tresc='$tr', id_newsa='$id_newsa' ");
  13.  
  14. $idzapytania = mysql_query($zapytanie) or die ('zapytanie: '.$zapytanie.'----blad:'.mysql_error());
  15.  
  16. var_dump($id_newsa);
  17. }
  18.  
  19. if ($tr) {
  20.  
  21.  
  22. echo $idzapytania;
  23. }
  24. else {
  25.  
  26. ?>
  27.  
  28. <html>
  29. <head>
  30. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  31. <script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
  32. </head>
  33. <body>
  34.  
  35. <div class="news">
  36.  
  37. <span id="tresc_newsa">
  38. <script type="text/javascript">
  39. tinyMCE.init({mode : "textareas",theme : "simple"});
  40. </script>
  41.  
  42. <form method="post" action="index.php?p=dodaj_komentarz">
  43. <input type="hidden" name="id_newsa" value="$id_newsa">
  44.  
  45. <textarea name="content" style="width:100%"></textarea>
  46. <br /><br />
  47.  
  48. <input type="submit" value="dodaj" class="przycisk_komentuj">
  49.  
  50. </form>
  51. </span>
  52. <br />
  53.  
  54. <hr class="lini_przerywajaca" />
  55.  
  56. </div>
  57.  
  58. </body>
  59. </html>
  60. <?
  61. };
  62. ?>


1. wiersz jest dodawany do bazy danych
2. wiersz zawiera poprawną treść
3. id_newsa przed textarea wypisuje nam dobry id_newsa
4. id_newsa jest dodawane lecz w bazie ma wartość 0
5. drugi var_dump (po zapytaniu) zwraca nam wartość NULL

dlaczego tak się dzieje? Jeszcze nigdy nie miałem tak dziwnego problemu... :|



Spróbowałem zmienić zapytanie na takie:
  1. zapytanie = (" INSERT INTO komentarze.tresc, komentarze.id_newsa VALUES ('$tr', '$id_newsa') ");
  2.  
  3. $idzapytania = mysql_query($zapytanie) OR die ('zapytanie: '.$zapytanie.'----blad:'.mysql_error());


i wyskakuje taki błąd:
string(9) "$id_newsa" zapytanie: INSERT INTO komentarze.tresc, komentarze.id_newsa VALUES ('iujh[9h[', '$id_newsa') ----blad:Something is wrong in your syntax obok ' komentarze.id_newsa VALUES ('iujh[9h[', '$id_newsa')' w linii 1
maryaan
Zacznij od prawidłowej składni poleceń sql,
Kod
INSERT INTO komentarze (tresc, id_newsa) VALUES ('jakas tresc', 323421)
Dziadzia
Cytat(maryaan @ 24.11.2009, 17:18:22 ) *
Zacznij od prawidłowej składni poleceń sql,
Kod
INSERT INTO komentarze (tresc, id_newsa) VALUES ('jakas tresc', 323421)



1. tamto polecenie jest dobre ponieważ w innych plikach je wykorzystuje i działa
2. id_newsa nie jest liczbą wymyśloną przeze mnie tylko jest zmienną...
3. dalej nie działa smile.gif
thek
To że w innych działa, nie znaczy, że masz akurat przypadek dokładnie taki sam jak w pozostałych. Zauważ, że baza pluje się o coś, co jest przed wskazanym fragmentem, a więc o przecinek, którego tam nie powinno być. Użyj albo składni maryaana, albo jeśli się przyzwyczaiłeś do seta to
  1. $zapytanie = 'INSERT INTO komentarze SET tresc = \''.$tr.'\', id_newsa = \''.$id_newsa.'\'';

Przy czym ja bym to z pewnych względów zamienił na:
  1. $zapytanie = 'INSERT INTO komentarze SET tresc = \''.$tr.'\', id_newsa = \''.$id_newsa.'\' ON DUPLICATE KEY UPDATE tresc = \''.$tr.'\'';


Doczytaj sobie dlaczego...A co do błędu jeszcze. Jak Ty przekazujesz do formularza zmienną$id_newsa? Jako tekst? Chłopie... Uciekaj z html ze zmienną poprzez wstawkę php a nie wpisuj ją na pałę. Tak ma to być smile.gif
  1. <input type="hidden" name="id_newsa" value="<?php echo $id_newsa; ?>">

Dziadzia
Zapytanie to które miałem jednak działało poprawnie. Błąd tkwił w <input> źle go sformułowałem ma być tak jak piszesz:
  1. <input type="hidden" name="id_newsa" value="<?php echo $id_newsa; ?>">


Serdecznie dziękuję wszystkim za pomoc w tym temacie smile.gif Pozdrawiam!
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.