Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][MYSQL] dodanie rekordow do bazy
Forum PHP.pl > Forum > Przedszkole
Raffuss
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..
SirZooro
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ć.
Raffuss
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..
ferrero2
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.
Raffuss
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..
Lars
A gdzie uruchamiasz ten skrypt - na localhoście czy na jakimś serwerze?
Raffuss
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.
pablo114
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. ?>
Raffuss
Także nie działa.. winksmiley.jpg Prawda że robi się ciekawie..? winksmiley.jpg
Lars
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.
Raffuss
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ę..?
baszkir
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 .
Raffuss
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..
baszkir
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.
Raffuss
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
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.