Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Problem z method="post"
Forum PHP.pl > Forum > Przedszkole
wafel611
Witam, jestem dosyć początkujący i od razu wystąpił pewien problem, otóż mam taki sobie tutaj skrypt:

  1. <html>
  2. <head>
  3. <title>Gra tekstowa</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
  5. </head>
  6. <body>
  7.  
  8. <?
  9. mysql_connect("xxx", "xxx", "xxx") or die(mysql_error());
  10. mysql_select_db("xxx", "xxx", "xxx", "xxx") or die(mysql_error());
  11.  
  12. INSERT INTO final VALUES ('imie');
  13.  
  14. ?>
  15.  
  16. <form action="final.php" method="post" />
  17. Podaj swoje imię: <input type="text" name="imie"/>
  18. <input type="submit" value="Zatwierdź" />
  19.  
  20.  
  21. </body>
  22. </html>


I oczywiście wywala mi błąd
Kod
Parse error: syntax error, unexpected '<' in /home/sites/i/in/inf/xxx/final.php on line 16

Czy ktoś mógłby mi powiedzieć, co robię nie tak?
Korab
Kolego... mysql_query() sie klania.
kadlub
nie masz zamknięcia formularza a to w linii 12 to jak ma niby działać
może powinno być tam mysql_query()
poczytaj też o POST i GET
wafel611
  1. <html>
  2. <head>
  3. <title>Gra tekstowa</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
  5. </head>
  6. <body>
  7.  
  8.  
  9. <form action="final.html" method="post" />
  10. Podaj swoje imię: <input type="text" name="imie"/>
  11. <input type="submit" value="Zatwierdź" />
  12. </form>
  13.  
  14. </body>
  15. </html>
  16.  
  17.  
  18. <?
  19. $mysql1 = "host"
  20. $mysql2 = "login"
  21. $mysql3 = "hasło"
  22. $mysql4 = "nazwa bazy"
  23. mysql_connect($mysql1, $mysql2, $mysql3)
  24. mysql_select_db($mysql4, $mysql1, $mysql2, $mysql3 )
  25. mysql_query("INSERT INTO final VALUES("('$_POST['imie']')")
  26. ?>


Dodałem, przeczytałem o post i get, niby wszystko robię tak jak jest na schematach, ale nijak mi nie chce dodać rekordów do bazy.
Kostek.88
Jakie rozszerzenie ma Twoj plik? W formularzu masz wpisana akcje do HTML... Poza tym na dole sprobuj otworzyc skrypt znacznikiem <?php . Generalnie to nie ma znaczenia, ale spotkalem serwery skonfigurowane tak, ze otwarcie <? nie dzialalo.
wafel611
Plik ma rozszerzenie .html, próbowałem w php tak samo i nic nie daje. Dopisałem też <?php i nic.
Kostek.88
1) plik do ktorego wysylasz akcje musi miec rozszerzenie PHP. No chyba, ze ktos ustawil inaczej, ale to graniczy z cudem.

2) Czy ten plik ktory zaprezentowales nazywa sie final.php?

3) Jaki blad Ci sie wyswietla? A moze sie nic nie wyswietla. Daj strukture tabeli, do ktorej dodajesz ten rekord...
mortus
Zapis:
  1. <form action="final.html" method="post" />

jest nieprawidłowy. Zamykasz formularz zaraz po jego otwarciu, a pole imie i przycisk 'Zatwierdź' znajdują się poza tym formularzem i nie będą przesłane.
Powinno być:
  1. <form action="final.php" method="post">
  2. <!-- pola i przyciski -->
  3. </form>


I pozostaje jeszcze kwestia zapytania. Łańcuchy znaków ze zmiennymi łączymy np. tak:
  1. mysql_query("INSERT INTO final VALUES('{$_POST['imie']}')"

O tym radzę również poczytać.

Rozumiem, że serwer www z obsługą PHP masz postawiony i uruchomiony, a pliki znajdują się w odpowiednim katalogu?

Pominąłem kwestię budowy tabeli final. Czy mamy rozumieć, że ma ona w tej chwili jedną kolumnę. Jeśli nie, to zapytanie również nie zadziała. Posłuchaj rad Kaloryfera - parafrazując "ogrzej się".
wafel611
  1. <html>
  2. <head>
  3. <title>Gra tekstowa</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
  5. </head>
  6. <body>
  7.  
  8.  
  9. <form action="final.php" method="post">
  10. Podaj swoje imię: <input type="text" name="imie">
  11. <input type="submit" value="Zatwierdź">
  12. </form>
  13.  
  14. </body>
  15. </html>
  16.  
  17.  
  18. <?php
  19. $mysql1 = "host";
  20. $mysql6 = "login";
  21. $mysql3 = "hasło";
  22. $mysql4 = "nazwa bazy";
  23. mysql_connect($mysql1, $mysql6, $mysql3) or die(mysql_error());
  24. mysql_select_db($mysql4, $mysql1, $mysql6, $mysql3) or die(mysql_error());
  25. mysql_query("INSERT INTO final VALUES('{$_POST['imie']}')");
  26. ?>


Dalej nic. Tabela posiada jedną kolumnę, nic więcej. Żadnego błędu.

Sprawdziłem też czy dobrze łączy się z bazą danych, nie ma z tym żadnego problemu, nie ma żadnych błędów.
abort
Może jestem przewrażliwiony, ale...
1. w tym przykładzie wszystko co zaczyna się od mysql_ jest FUNKCJĄ. Jak wiadomo, istotą funkcji jest zwracanie pewnych wartości.
2. mysql_connect zwraca wartość typu resource, warto tę wartość zbadać (mimo, że jest "or die...")
3. mysql_select_db jest funkcją, której przekazuje się jeden (opcjonalnie dwa) argumenty. Pierwszym, obowiązkowym, jest nazwa tabeli. Drugim (opcjonalnym) jest resource (zwrócone przez funkcję mysql_connect). U Ciebie są cztery - po kiego grzyba? Czytałeś w ogóle manual, czy wywołujesz funkcje "na czuja"? Jeśli to drugie, to nie dziw się
4. mysql_query - tu też warto zbadać wynik funkcji.

A tak w ogóle, to w celu zdiagnozowania kodu powinieneś:
1. na końcu użyć (w celu debugu) funkcji mysql_num_rows
2. zamiast mysql_query("INSERT INTO final VALUES('{$_POST['imie']}')"); użyj:
Kod
$query="INSERT INTO final VALUES('{$_POST['imie']}')";
echo "$query";
$result=mysql_query ($query);


... przynajmniej do czasu, kiedy nie nabędziesz biegłości w konstruowaniu zapytań sql.

P.S.
Jesteś pewien, że cztery apostrofy w jednym query do mysql nie robią kuku całej operacji? Spacja po "VALUES" nie wydaje Ci się potrzebna?
wafel611
  1. <html>
  2. <head>
  3. <title>Gra tekstowa</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
  5. </head>
  6. <body>
  7.  
  8.  
  9. <form action="final.php" method="post">
  10. Podaj swoje imię: <input type="text" name="imie">
  11. <input type="submit" value="Zatwierdź">
  12. </form>
  13.  
  14. </body>
  15. </html>
  16.  
  17.  
  18. <?php
  19. $mysql1 = "xxx";
  20. $mysql6 = "xxx";
  21. $mysql3 = "xxx";
  22. $mysql4 = "xxx";
  23. $res = mysql_connect($mysql1, $mysql6, $mysql3) or die(mysql_error());
  24. mysql_select_db($mysql4, $res) or die(mysql_error());
  25. $query="INSERT INTO final VALUES('{$_POST['imie']}')";
  26. $result=mysql_query ($query);
  27. ?>


echo $query i $res dawało
Kod
INSERT INTO final VALUES('xxx')
oraz
Kod
Resource id #2

Skrypt w końcu działa tak jak powinien. Mam jednak pytanie, skąd
  1. $result
na końcu?
Kostek.88
Cytat
Jesteś pewien, że cztery apostrofy w jednym query do mysql nie robią kuku całej operacji?


1) Apostrofy sa konieczne przy wstawianiu wartosci tekstowych... przynajmniej w tym wypadku. A w tablicy... czy napiszesz $_POST['imie'] czy $_POST["imie"] to jest wszystko jedno. Sam uzywam apostrofow od kilku lat i nigdy nie mam problemow. Mozna to jeszcze napisac tak

  1. mysql_query('INSERT INTO final VALUES("' . $_POST['imie'] . '")');

i nie bedzie problemu (no chyba, ze literowke zrobilem wink.gif )

Cytat
Spacja po "VALUES" nie wydaje Ci się potrzebna?

Mnie wydaje sie niepotrzebna...

@wafel611
1) Dodaje Ci pusty rekord czy nic nie dodaje?

2) Daj strukture bazy danych. Jakiego typu masz to pole w bazie, do ktorego wstawiasz rekord?
wafel611
Dodaje już mi każdy rekord. Jedna tabela, jedno pole 'imie' text bez atrybutów. Problem rozwiązany już jest. Dziękuję wszystkim za pomoc, następnym razem postaram się trochę bardziej pogłówkować smile.gif
abort
Cytat(Kaloryfer @ 10.11.2011, 23:41:35 ) *
Mnie wydaje sie niepotrzebna...


Wiesz... ja wychodzę z założenia, że nadmierna spacja w query nie narobi zamieszania, a jej brak potrafi namieszać, i to bardzo. Poza tym, sama czytelność kodu jest ciutkę lepsza. Ale ja ekspertem nie jestem, w php piszę amatorsko (a nawet, rzekłbym, że rekreacyjnie).
Kostek.88
Cytat
Dodaje już mi każdy rekord. Jedna tabela, jedno pole 'imie' text bez atrybutów. Problem rozwiązany już jest. Dziękuję wszystkim za pomoc, następnym razem postaram się trochę bardziej pogłówkować


A moglbys napisac co bylo nie tak? Nastepnym razem daj wiecej informacji, a nie ze nie dziala tongue.gif

Cytat
Wiesz... ja wychodzę z założenia, że nadmierna spacja w query nie narobi zamieszania, a jej brak potrafi namieszać, i to bardzo. Poza tym, sama czytelność kodu jest ciutkę lepsza. Ale ja ekspertem nie jestem, w php piszę amatorsko (a nawet, rzekłbym, że rekreacyjnie).


Masz racje, czasem tak moze byc, fajny nawyk sobie wypracowales. To prawda, czytelnosc kodu, choc to kwestia indywidualna, moze byc troszke lepsza. Ale w tym przypadku nie byla konieczna po prostu smile.gif
wafel611
Po zmienieniu z:
  1. mysql_query("INSERT INTO final VALUES('{$_POST['imie']}')");

na:
  1. $query="INSERT INTO final VALUES('{$_POST['imie']}')";
  2. $result=mysql_query ($query);

oraz usunięciu niepotrzebnych zmiennych z
zaczęło dodawać rekordy.
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.