Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie mogę drukować przesyłanych z formularza zmiennych
Forum PHP.pl > Forum > Przedszkole
Testosteron
  1. <?php
  2.  
  3.  
  4. $ISBN = $_POST['ISBN'];
  5. $autor =$_POST['autor'];
  6. $tytul = $_POST['tytul'];
  7. $cena = $_POST['cena'];
  8.  
  9.  
  10. If (!$ISBN || !$autor || !$tytul || !$cena)
  11. {
  12. echo 'Wprowadz poprawne dane';
  13. }
  14.  
  15. $db = mysql_connect('localhost', 'root', 'krasnal', 'ksiazki')
  16. If (!$db)
  17. {
  18. echo 'Nie mozna polaczyc z baza danych';
  19. }
  20. else
  21. {
  22. $zapytanie = "INSERT into ksiazki values ('" . $ISBN . ", '" . $autor . ", '" . $tytul . ", '" . $cena . ")";
  23. echo $zapytanie;
  24. }
  25. ?>

No właśnie. W zapisie w zmiennej $zapytanie łatwo się pomylić, więc postanowiłem wydrukować zawartość. Niestety, nie jest drukowana. Żeby tego było mało, jeżeli zaraz pod deklaracją zmiennych wpiszę echo $autor, czy coś w tym stylu to zmienna także nie jest drukowana. Jeżeli natomiast usunę cały kod znajdujący się pod tymi deklaracjami do zmienne drukowane są normalnie.

Dlaczego tak się dzieje?
gorden
po pierwsze, nie !$db, tylko die
po drugie, zapomniałeś chyba o mysql_query
Testosteron
Nie zapomniałem, tylko (tak jak pisałem w poście) chcę sobie najpierw wydrukować całe zapytanie, żeby wykryć ewentualne błędy. A dlaczego ten zapisc !$db jest zły?
aachi
Hejka.
Prawidłowo powinieneś chyba użyć słowa "wyświetlać", nie "drukować"...

Jeśli chodzi o twój problem, to skrypt wywala się w połowie, a ty nie włączyłeś wyświetlania błędów. Dlatego skrypt nie dochodzi do echo $zapytanie. Na końcu linii 16 zapomniałeś dodać średnika. Popraw i sprawdź ponownie.

Wyświetlanie wszystkich błędów włącza się wpisując na początku:

  1. ini_set('display_errors', 1);


pozdrawiam

[EDIT] Zapomniałem dodać, że w zapytaniu nie zamykasz apostrofów po zmiennych w zapytaniu, ale jak już je wyświetlisz to pewnie sam się zorientujesz.
Testosteron
OK. Obsługą błędów zrobię na samym końcu. Na początek sam skrypt dodawania do bazy (bo z tego co widzę najwięcej problemów jest z obsługą błędów). Może wrzucę to co wymodziłem do tej pory:
  1. <?php
  2.  
  3.  
  4. $ISBN = htmlentities($_POST['ISBN']);
  5. $autor = htmlentities($_POST['autor']);
  6. $tytul = htmlentities(;$_POST['tytul']);
  7. $cena = htmlentities($_POST['cena']);
  8.  
  9. If (!$ISBN || !$autor || !$tytul || !$cena)
  10. {
  11. echo 'Wprowadz poprawne dane';
  12. }
  13.  
  14. mysql_connect('localhost', 'root', 'krasnal', 'ksiazki');
  15.  
  16. $zapytanie = "INSERT into ksiazki values ('" . $ISBN . "', '" . $autor . "', '" . $tytul . "', '" . $cena . "')";
  17. $nowe_zapytanie = mysql_query($zapytanie);
  18. $sprawdz = mysql_affected_rows($zapytanie);
  19. If ($sprawdz)
  20. {
  21. echo 'Dodano do bazy';
  22. }
  23.  
  24.  
  25. ?>

Dalej nie działa sad.gif
nospor
Cytat
Obsługą błędów zrobię na samym końcu
blink.gif
WYŚWIETLANIE błędów to nie żadna OBSŁUGA a WYŚWIETLANIE.

Wyświetlanie to pierwsza rzecz jaką musisz zrobić przed rozpoczęciem pisania. Nie widząc jakie masz błędy to sobie możesz conajwyżej gwiazdy nocą pooglądać a nie programować.

Dostajesz PARSE ERRORY przez to nic ci się nie wyświetla. Więc marsz do pliku php.ini i włącz tam wyświetlanie wszystkich błędów. I masz to zrobić w php.ini gdyż PARSE ERRORY będą widoczne tylko wtedy, gdy właśnie tam to ustawisz.
Testosteron
Zrobiłem tak jak pisałeś. Jeden błąd był przy deklaracjach (literówka), dalej był problem z jakim ś argumentem w mysql_affected_rows. Wywaliłem to, ale skrypt dalej nie działa a żaden błąd nie jest wyświetlany pomimo modyfikacji php.ini.
  1. <?php
  2.  
  3.  
  4. $ISBN = htmlentities($_POST['ISBN']);
  5. $autor = htmlentities($_POST['autor']);
  6. $tytul = htmlentities($_POST['tytul']);
  7. $cena = htmlentities($_POST['cena']);
  8.  
  9. If (!$ISBN || !$autor || !$tytul || !$cena)
  10. {
  11. echo 'Wprowadz poprawne dane';
  12. }
  13.  
  14. mysql_connect('localhost', 'root', 'krasnal', 'ksiazki');
  15.  
  16. $zapytanie = "INSERT into ksiazki values ('" . $ISBN . "', '" . $autor . "', '" . $tytul . "', '" . $cena . "')";
  17. $nowe_zapytanie = mysql_query($zapytanie);
  18.  
  19. If (!$nowe_zapytanie)
  20. {
  21. echo 'Nie mozna dodac produktu do bazy';
  22. }
  23. else
  24. {
  25. echo 'Produkt zostal dodany do bazy';
  26. }
  27.  
  28.  
  29. ?>
nospor
Cytat
Wywaliłem to, ale skrypt dalej nie działa
Kurcze.... a czymże teraz objawia sie to nie działanie? No napisz a nie trzeba cię ciągąć za słówka.

Cytat
@nospor, masz 20k postów - mieszkasz na forum? <-:
A ty widzę prosisz się o 10% za bezsensowen nabijanie postów. Masz do mnie sprawę to pisz na PW albo w temacie OFFTOPIC a nie śmiecisz w normalnym wątku na forum tongue.gif

Cytat
dalej był problem z jakim ś argumentem w mysql_affected_rows. Wywaliłem to
Się nie wywala a sie poprawia. Błąd ten oznaczał, że masz błąd zapytania. Jak wyświetlać pełne błędy zapytania masz napisane tu:
Temat: Jak poprawnie zada pytanie
Masz tam też masę innych cennych wskazówek. Z racji, że jesteś bardzo początkujący to się z nimi zapoznaj
Testosteron
Mówiąc w skrócie objawia się tym, że wpis nie jest dodawany do bazy danych. Dodałem na początku skryptu:
  1. ini_set('display_errors','1');

Żadne błędy mi nie wyskakują. Dodałem instrukcję warunkową, którą widać na poniższym przykładzie i pojawia się napis, że produkt nie mógł zostać dodany do bazy.
  1. <?php
  2. ini_set('display_errors','1');
  3.  
  4. $ISBN = htmlentities($_POST['ISBN']);
  5. $autor = htmlentities($_POST['autor']);
  6. $tytul = htmlentities($_POST['tytul']);
  7. $cena = htmlentities($_POST['cena']);
  8.  
  9. If (!$ISBN || !$autor || !$tytul || !$cena)
  10. {
  11. echo 'Wprowadz poprawne dane';
  12. }
  13.  
  14. mysql_connect('localhost', 'root', 'krasnal', 'ksiazki');
  15.  
  16. $zapytanie = "INSERT into ksiazki values ('" . $ISBN . "', '" . $autor . "', '" . $tytul . "', '" . $cena . "')";
  17. $nowe_zapytanie = mysql_query($zapytanie);
  18.  
  19. If (!$nowe_zapytanie)
  20. {
  21. echo 'Nie mozna dodac produktu do bazy';
  22. }
  23. else
  24. {
  25. echo 'Produkt zostal dodany do bazy';
  26. }
  27.  
  28.  
  29. ?>
nospor
Zgodnie z tematem, do którego cię odesłałem, miałeś dodać mysql_error()! czemu skupiłeś się tylko na początku tematu? Temat to całość a nie pierwszy punkt.
Testosteron
OK. Problem rozwiązany. Okazało się, że baza nie została wybrana. W książce widziałem taki zapis, jaki zastosowałem w przykładzie. Teraz trochę to zmieniłem:
  1. mysql_pconnect('localhost', 'root', 'krasnal');
  2. mysql_select_db('ksiazki');

I wszystko działa bez zarzutu. Dlaczego więc był problem z poprzednim zapisem?

PS. Dzięki za pomoc.
aachi
Poprzednio problem był taki, że mysql_connect nie pobiera nazwy bazy jako czwarty parametr. Wystarczyło zerknąć do manulala php. http://www.php.net/manual/pl/function.mysql-connect.php
takie parametry co ty podałeś pobiera mysqli_connect (taka nowsza wersja biblioteki do obsługi mysql w php).

Obecnie raczej nie masz potrzeby korzystać z mysql_pconnect (chodzi o tą literkę "p" w nazwie funkcji).

Tak sobie myślę, że powinieneś zmienić książkę i kursy z których się uczysz na coś bardziej aktualnego.
Testosteron
Akurat to pconnect wziąłem z video kursu a nie z książki. Jeżeli chodzi o książkę do korzystam z PHP i MySQL Vademecum Profesjonalisty. Książka jest dobra, ale z kolei obiektowość została bardzo źle przedstawiona. Niby są przykłady tworzenia obiektów, klas, itp. Zaraz jest przykład tworzenia całej strony, tylko efekt nie jest wyświetlany. W jakiej książce programowanie obiektowe zostało dobrze wyjaśnione?
aachi
Jakiekolwiek materiały w których używana jest biblioteka mysql (a nie PDO, lub mysqli) są przestarzałe. I dobrze Ci radzę poszukaj nowszych.
Testosteron
W moim Cademevum jest używane MySQL, ale mnie chodzi o programowanie obiektowe. W tej mojej ten aspekt jest beznadziejnie wytłumaczony
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.