Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML][MYSQL] dodanie rekordow do bazy
Raffuss
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Witam.

Choc pisze po raz pierwszy czytuje forum nie od wczoraj.. Ostatnio zabrałem się za próbę stworzenia kodu dodającego nowe wiadomosci do bazy.. jako że nie berdzo chciało cokolwiek dodawać, sięgnąłem po książke i ładnie przepisałem tamtejszy kod i ku mojemu zdziwieniu owy kod także nie chce dodawać rekordów..

Po kolei.. dwa pliki.
Pierwszy z polem formularza:
  1.  
  2. <head>
  3. </head>
  4. <h1>"dodanie nowego newsa"</h1>
  5. <form action="news_add.php" method="post">
  6. <table border="0">
  7. <tr>
  8. <td>Autor:</td>
  9. <td><input type="text" name="username" maxlength="30" size="30" value="admin"></td>
  10. </tr>
  11. <tr>
  12. <td>Tytul:</td>
  13. <td><input type="text" name="tytul" maxlength="30" size="30"></td>
  14. </tr>
  15. <tr>
  16. <td>Skrot:</td>
  17. <td><textarea name="skrotart" maxlength="300" cols="50" rows="10"></textarea></td>
  18. </tr>
  19. <tr>
  20. <td>Pelna tresc:</td>
  21. <td><textarea name="pelnyart" maxlength="1000" cols="50" rows="10"></textarea></td>
  22. </tr>
  23. <tr>
  24. <td>Publikacja (wpisz 1 by potwierdzic):</td>
  25. <td><input type="text" name="ok" maxlength="1" size="4" value="0"></td>
  26. </tr>
  27. <tr>
  28. <td>Dodaj:</td>
  29. <td><input type="submit" value=" Dodaj news "></td>
  30. </tr>
  31. </form>
  32. </body>
  33. </html>


..oraz drugi odbierajacy dane:
  1. <html>
  2. <head>
  3. <title></title>
  4. </head>
  5.  
  6. <body>
  7. <h2>dodanwanie newsa.. rezultat</h2>
  8.  
  9. <?php
  10. //utworzenie ktorkich nazw zmiennych
  11. $username=$_POST['username'];
  12. $tytul=$_POST['tytul'];
  13. $skrotart=$_POST['skrotart'];
  14. $pelnyart=$_POST['pelnyart'];
  15. $ok=$_POST['ok'];
  16.  
  17. if (!$username || !$tytul || !$skrotart || !$pelnyart)
  18. {
  19. echo 'Nie podano wymaganych danych<br />'
  20. .'Wroc do poprzedniej <a href="news.html">strony</a> i sprobuj ponownie.';
  21. }
  22.  
  23. {
  24.  
  25. $username = addslashes($username);
  26. $tytul = addslashes($tytul);
  27. $skrotart = addslashes($skrotart);
  28. $pelnyart = addslashes($pelnyart);
  29.  
  30. }
  31.  
  32. include ('config.php');
  33.  
  34. // Połaczenie z baza danych
  35. $db = mysql_connect ($db_host,$db_user,$db_password);
  36. mysql_select_db ($db_name);
  37.  
  38. //dodanie rekordow
  39. $zapytanie = "insert into tb_news values ('".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')"; 
  40. $wynik = $db->query($zapytanie);
  41. if ($wynik)
  42. echo $db->affected_rows.' news zostal zapisany do bazy.'; 
  43. ?>
  44.  
  45. </body>
  46. </html>


Błąd jaki wyskakuje:
  1. <?php
  2. PHP Fatal error: Call to a member function query() on a non-object in /news_add.php on line 42
  3. ?>


Przyznam szczerze ze spróbowałe jeszcze z dwoma innymi książkami. Którą bym nie wziął w rękę i z którego kodu nie skorzystał, jeszcze mi się nie zdarzyło by dodał jakiś rekord. Odczytuje bez problemu. Wyświetla po wskazanej ilości, ale dodać nie chce uparciuch..

Co więc robię nie tak..?
Na serwerze i localu php5 powyższy skrypt w/g książki to także php5.. hm..


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
SirZooro
post
Post #2





Grupa: Zarejestrowani
Postów: 243
Pomógł: 32
Dołączył: 14.06.2007

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


Pomieszałeś funkcje z rozszerzeń mysql i mysqli. To pierwsze jest starsze, i m.in. nie ma wsparcia dla programowania obiektowego. Zmień mysql_ na mysqli_ i powinno zadziałać.


--------------------
Go to the top of the page
+Quote Post
Raffuss
post
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Ok..poprawilem na cos takiego:
  1. <?php
  2. // Połaczenie z baza danych
  3. $db = mysqli_connect ($db_host,$db_user,$db_password);
  4. mysqli_select_db ($db_name);
  5. ?>


I kolejny bledzik:
  1. <?php
  2. PHP Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in /news_add.php on line 38
  3. ?>



Jak wstawie polaczenie z baza dokladnie takie samo jakie jest w ksiazce:
  1. <?php
  2. @ $db = new mysqli('local', 'user', 'pass', 'baza');
  3. if (mysqli_connect_errno())
  4. {
  5.  echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  6. }
  7. ?>


Wyswietla sie jedynie naglowek strony news_add.php <h2> i nic poza tym.. zadnego bledu, zadnego komunikatu.. i oczywiscie rekordu w bazie nie ma.. choc polaczenie z baza istnieje.. sprawdzone wywolaniem wyswietlenia rekordu dodanego recznie..


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
ferrero2
post
Post #4





Grupa: Zarejestrowani
Postów: 171
Pomógł: 32
Dołączył: 5.08.2008
Skąd: Lublin

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


hmm Ja bym zostawił połączenie na zasadzie mysql i zmienił tego INSERTA. U mnie działa :

Kod
$zapytanie = "INSERT INTO tb_news (tutaj,twoje,pola,z_bazy,danych) VALUES ('".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')";
mysql_query($zapytanie);


U mnie wygląda to tak:

Kod
$sql3 = "INSERT INTO wpisy (Wpis,Autor,data,data_mod,temat_id) VALUES('" . $str . "','". $_SESSION['USERNAME2'] . "', '". $tajm . "','". $tajm . "','". $row['0'] . "')";
mysql_query($sql3);


Działa bez zarzutu, trzeba tylko pamiętać o kolejności pól i ustawić primary key na auto_increment, wtedy ja go pomijam przy dodawnaniu wierszy.

Ten post edytował ferrero2 6.08.2008, 07:18:07


--------------------
---------------------------
"Jeżeli trzeci dzień z rzędu nie chce Ci się pracować tzn że dziś jest ŚRODA !
Algorytmy , Programowanie , Tworzenie WWW - SPRAWDŹ
Go to the top of the page
+Quote Post
Raffuss
post
Post #5





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Wstawiłem jak piszesz, choć wcześniej już tak sprawdzałem i bez zmian niestety. Po zmianie dzisiaj wciąż to samo.. brak jakiego kolwiek komunikatów o errorku, mysql_error() nie zwraca niczego, nie ma informacji o dodaniu wpisow do bazy, brak nowego rekordu w bazie.. Coż to może być za ustrojstwo..

Ten post edytował Raffuss 6.08.2008, 17:27:03


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
Lars
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


A gdzie uruchamiasz ten skrypt - na localhoście czy na jakimś serwerze?


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
Raffuss
post
Post #7





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Cytat(Lars @ 6.08.2008, 18:45:50 ) *
A gdzie uruchamiasz ten skrypt - na localhoście czy na jakimś serwerze?

W tej chwili odpalam na serwerze iq.


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
pablo114
post
Post #8





Grupa: Zarejestrowani
Postów: 49
Pomógł: 0
Dołączył: 11.07.2007

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


moim zdaniem połączenie powinno wyglądać tak:
  1. <?php
  2. $db = mysql_connect ($db_host,$db_user,$db_password);
  3. mysql_select_db ($db_name, $db);
  4. ?>
Go to the top of the page
+Quote Post
Raffuss
post
Post #9





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Także nie działa.. winksmiley.jpg Prawda że robi się ciekawie..? winksmiley.jpg


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
Lars
post
Post #10





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


Cytat(Raffuss @ 6.08.2008, 18:54:01 ) *
Także nie działa.. winksmiley.jpg Prawda że robi się ciekawie..? winksmiley.jpg


Pobierz sobie np. XAMPPA i spróbuj na localu.


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
Raffuss
post
Post #11





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


mam na localu webserv.. zaraz zerkne..

Dodam ze dodajac do tego skryptu kilka linijek kodu, ktore pobieraja rekordy z bazy, wszystko wyswietla sie nader poprawnie.. winksmiley.jpg tylko wciaz nie dodaje nowych.. ale wyswietla.. winksmiley.jpg

Ok, sprawa na localu wygląda następująco..
Przy wpisie w kodzie:
  1. <?php
  2. $zapytanie = "insert into tb_news values ('".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')"; 
  3. $wynik = $db->query($zapytanie);
  4. if ($wynik)
  5. echo $db->affected_rows.' news zostal zapisany do bazy.';
  6. ?>


Wyskakuje taki błąd:
  1. Fatal error: Call to a member function query() on a non-object in C:\Program Files (x86)\WebServ\httpd\nauka\news_add.php on line 49


Linia 49 dla przypomnienia:
  1. <?php
  2. $wynik = $db->query($zapytanie);
  3. ?>


Przy takim wpisie:
  1. <?php
  2. $zapytanie = "INSERT INTO tb_news (nr, username, tytul, skrotart, pelnyart, ok) VALUES ('".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')";
  3. mysql_query($zapytanie);
  4. ?>


Pokazuje komunikat iż skrypt dodał nowy wpis do bazy, choć w samej bazie rekord się nie pojawia nadal..
Połączenie przez mysql_connect

Wykorzystujac ponizszy kod:
  1. <?php
  2. @ $db = new mysqli('localhost', 'root', 'pass', 'nazwa');
  3. if (mysqli_connect_errno())
  4. {
  5.  echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  6.  exit;
  7. }
  8. $zapytanie = "insert into tb_news values ('".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')"; 
  9. $wynik = $db->query($zapytanie);
  10.  
  11. if ($wynik)
  12. echo $db->affected_rows.' news zostal zapisany do bazy.';
  13. ?>


Takze zadnego rekordu nie chce dodac.. hm.. czy ktos moze cokolwiek przypuszcza? Mi juz pomysłów zabrakło..

Tzn iż poprawnie korzystam z $db->query() jeśli korzystam z ostatniego kodu? Dobrze rozumuję..?

Ten post edytował Raffuss 6.08.2008, 18:58:35


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
baszkir
post
Post #12





Grupa: Zarejestrowani
Postów: 22
Pomógł: 8
Dołączył: 2.08.2008

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


Wlasnie sobie Twoj kod wklepalem do kompa i zmienilem $db->query($zapytanie) na mysql_query($zapytanie) i wszystko zadzialalo ok. Ja akurat dalem wszystkie pola w tabeli jako varchar(100) (tak dla testow).
Moglbys napisac, jak wyglada Twoja tabela tb_news .
Go to the top of the page
+Quote Post
Raffuss
post
Post #13





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


A prosze:

  1. CREATE TABLE `tb_news` (
  2. `nr` int NOT NULL AUTO_INCREMENT,
  3. `username` varchar(15) NOT NULL,
  4. `tytul` varchar(30) NOT NULL,
  5. `skrotart` varchar(300) NOT NULL,
  6. `pelnyart` varchar(1500) NOT NULL,
  7. `ok` TINYINT NOT NULL,
  8. KEY `nr` (`nr`)


Mi niestety za żadne skarby dodać rekordu nie chce.. z ciekawosci wrzucilem sobie przyklad z helionowskiej ksiegi.. takze bez rezultatu.. zerknalem wiec w skrypty ktore mi pracuja na serwerze i dodaja rekordy bez problemu, ale tamtejszy kod nie jest moj i taki bardzo dlugo-rozbudowany jest.. zachodzi obawa ze jest w php4 wiec przykladu z niego nie chce brac..


--------------------
zaburzony.pl
Go to the top of the page
+Quote Post
baszkir
post
Post #14





Grupa: Zarejestrowani
Postów: 22
Pomógł: 8
Dołączył: 2.08.2008

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


Problem byl z pole nr w bazie danych.
Przerobilem zapytanie (dodalem NULL na samym poczatku wartosci - linia 41) i dziala.
Acha - zgodnie z manualem do PHP uzywa sie $db->select_db(nazwa_bazy) (linia 38)
Oto kod
  1. <html>
  2. <head>
  3. <title></title>
  4. </head>
  5.  
  6. <body>
  7. <h2>dodanwanie newsa.. rezultat</h2>
  8.  
  9. <?php
  10. //utworzenie ktorkich nazw zmiennych
  11. $username=$_POST['username'];
  12. $tytul=$_POST['tytul'];
  13. $skrotart=$_POST['skrotart'];
  14. $pelnyart=$_POST['pelnyart'];
  15. $ok=$_POST['ok'];
  16.  
  17. if (!$username || !$tytul || !$skrotart || !$pelnyart)
  18. {
  19. echo 'Nie podano wymaganych danych<br />'
  20. .'Wroc do poprzedniej <a href="news.html">strony</a> i sprobuj ponownie.';
  21. }
  22.  
  23. {
  24.  
  25. $username = addslashes($username);
  26. $tytul = addslashes($tytul);
  27. $skrotart = addslashes($skrotart);
  28. $pelnyart = addslashes($pelnyart);
  29.  
  30. }
  31.  
  32. include ('config.php');
  33.  
  34. // Połaczenie z baza danych
  35. $db = mysqli_connect ($db_host,$db_user,$db_password);
  36. $db->select_db ($db_name);
  37.  
  38. //dodanie rekordow
  39. $zapytanie = "insert into tb_news values (NULL,'".$username."', '".$tytul."', '".$skrotart."', '".$pelnyart."', '".$ok."')"; 
  40. $wynik = $db->query($zapytanie);
  41. echo $zapytanie;
  42. if ($wynik)
  43. echo $db->affected_rows.' news zostal zapisany do bazy.'; 
  44. ?>
  45.  
  46. </body>
  47. </html>


U mnie dziala, ma nadzieje, ze pomoglo i u Ciebie tez teraz bedzie dzialac.
Go to the top of the page
+Quote Post
Raffuss
post
Post #15





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 26.07.2008

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


Dziękuje działa.. smile.gif

Co prawda przyznam iż w zaciszach domostwa ustawiłem sobie pole nr ale nie wstawiłem (null), a ("",).
Dziękuję bardzo raz jeszcze..

Widać książka heliona ma błęda.. winksmiley.jpg

Ten post edytował Raffuss 6.08.2008, 23:29:13


--------------------
zaburzony.pl
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 Aktualny czas: 22.08.2025 - 03:29