Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Skrypt dodawania (problem)
Forum PHP.pl > Forum > Przedszkole
beka
Witam serdecznie.
Napisałem skrypt, który ma za zadanie dodawanie danych do bazy danych mysql.
Podczas testowania lokalnie (localhost) wyświetlany jest błąd :
Warning: require_once(DB.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/dodaj.php on line 4Fatal error: require_once() [function.require]: Failed opening required 'DB.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/dodaj.php on line 4" title="Zobacz w manualu PHP" target="_manual

To jest zapewne efekt złego zainstalowania php czy coś winksmiley.jpg (pracuję na linuxie - Ubuntu 9.04). To jednak jest mało ważne.

Główny problem polega na tym, iż po wprowadzeniu i zatwierdzeniu danych... nic się nie dzieje sad.gif zamiast wyświetlać cokolwiek, pokazuje się czysta strona (testowane na dobrym serwerze w sieci z obsługą najnowszego php, mysql itd. wszystkie pakiety zainstalowane - więc tego błędu z DB.php nie wyświetla winksmiley.jpg ).

Oto kod :

  1. <?php
  2. function insert_db($title, $author, $edition, $format, $year){
  3. require_once('db_login.php');
  4. require_once('DB.php');
  5. $connection =
  6. DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");
  7. if (DB::isError($connection)){
  8.  die('Nie mozna nawiazac polaczenia z baza danych: <br />'.
  9. DB::errorMessage($connection));
  10. }
  11. $title = stripslashes($title);
  12. $author = stripslashes($author);
  13. $edition = stripslashes($edition);
  14. $format = stripslashes($format);
  15. $year = stripslashes($year);
  16. }
  17.  
  18. $title - mysql_real_escape_string($title);
  19. $author - mysql_real_escape_string($author);
  20. $edition - mysql_real_escape_string($edition);
  21. $format - mysql_real_escape_string($format);
  22. $year - mysql_real_escape_string($year);
  23.  
  24. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  25. $result = $connection->query($query);
  26. if (DB::isError($result)){
  27. die ('Nie mozna wykonac zapytania do bazdy danyc: <br />'. $query.'
  28. '.DB::errorMessage($result));
  29. }
  30. echo 'Dane zostały wstawione pomyślnie.<br />';
  31. $query = 'SELECT * FROM `plyty`';
  32. $result = $connection->query($query);
  33. if (DB::isError($result)){
  34. die('Nie mozna wykonac zapytania do bazy danych : <br />'. $query.'
  35. '.DB::errorMessage($result));
  36. }
  37. echo '<table border="1">';
  38. echo '<tr><th>Tytuł</th><th>Autor</th><th>Wydanie</th><th>Format</th><th>Rok</th></tr>';
  39. while ($result_row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
  40. echo '<tr><td>';
  41. echo $result_row['tytul'] .'</td><td>';
  42. echo $result_row['autor'] .'</td><td>';
  43. echo $result_row['wydanie'] .'</td><td>';
  44. echo $result_row['format'] .'</td><td>';
  45. echo $result_row['rok'] .'</td></tr>';
  46. }
  47. echo '</table>';
  48. $connection->disconnect();
  49. }
  50. ?>
  51. <html>
  52. <head>
  53. <title>Wstawianie danych</title>
  54. </head>
  55. <body>
  56. <?php
  57. $title = htmlentities($_GET['tytul']);
  58. $author = htmlentities($_GET['autor']);
  59. $edition = htmlentities($_GET['wydanie']);
  60. $format = htmlentities($_GET['format']);
  61. $year = htmlentities($_GET['rok']);
  62. if (($title != NULL ) && ($author != NULL ) && ($edition != NULL ) && ($format != NULL ) && ($year != NULL)){
  63.  insert_db($title,$author,$edition,$format,$year);
  64. }
  65. else {
  66. <h1>Wprowadź nową pozycję:</h1>
  67. <form action="'.$_SERVER['PHP_SELF'].'" method="GET">
  68. <table><tr>
  69. <td><label>Tytuł:<input type="text" name="tytul" id="tytul" /></label></td>
  70. <td><label>Autor:<input type="text" name="autor" id="autor" /></label></td>
  71. <td><label>Wydanie:<input type="text" name="wydanie" id="wydanie" /></label></td>
  72. <td><label>Format:<input type="text" name="format" id="format" /></label></td>
  73. <td><label>Rok:<input type="text" name="rok" id="rok" /></label></td><br />
  74. <input type="submit" value="Zatwierdź" />
  75. </tr></table>
  76. </form>';
  77. }
  78. ?>
  79. </body>
  80. </html>


Bardzo proszę o pomoc.
Pozdrawiam.
zeten
Warning: require_once(DB.php) [function.require-once]: failed to open stream: No such file or directory in /var/www/dodaj.php on line 4

/var/www/ <-- nie masz tutaj pliku DB.php
beka
no wiem, ale nie mam pojęcia skąd go wziąć i co ma w nim być :] opierałem się o książkę, w której było napisane, że to jakiś tam pakiet pear, który się instaluje sam smile.gif ...
ale mówię - ten problem to tam pikuś... bardziej mnie interesuje i tak działanie skryptu na serwerze w sieci...
zeten
To pewnie zlepiły Ci się strony ;-) require_once('DB.php'); <-- domyślam się, że w DB.php będą się znajdowały dane do łączenia z bazą danych. Poczytaj jeszcze raz ten rozdział z książki ;-)
beka
Nie nie winksmiley.jpg Dane do łączenia znajdują się w db_login.php
DB.php = PEAR DB

Ale mówię - mnie bardziej interesuje ten drugi problem... z serwerem sieciowym, na którym nie ma tego błędu. Po prostu nie wyświetla się nic, chociaż w linku pojawia się (przykładowe dane wprowadziłem) /index.php?tytul=Breakfast+In+America&autor=Supertramp&wydanie=A%26M+Records&format=1LP&rok=1979
marian2299
  1. <?php
  2. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  3. ?>

zamień na
  1. <?php
  2. $query = "INSERT INTO `plyty` VALUES (NULL, '".$title."', '".$author."', '".$edition."', '".$format."', '".$year"')";
  3. ?>


i tak dalej...
beka
Cytat(marian2299 @ 2.08.2009, 20:36:59 ) *
  1. <?php
  2. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  3. ?>

zamień na
  1. <?php
  2. $query = "INSERT INTO `plyty` VALUES (NULL, '".$title."', '".$author."', '".$edition."', '".$format."', '".$year"')";
  3. ?>


i tak dalej...


nie działa...
teraz to jest pustka tongue.gif worriedsmiley.gif
z resztą wydaje mi się, że to jest błąd winksmiley.jpg taki zapis... mogę się mylić, bo php i mysql uczę się dość krótko smile.gif


Udało mi się poprawnie zainstalować na localhoscie ten pakiet DB i już jest niby dobrze, ale gdy zatwierdzam to :

Nie mozna nawiazac polaczenia z baza danych:
connect failed


Czyli zapewne błąd jest w tym kodzie i raczej nie chodzi tu o ten cudzysłów...
marian2299
Połączenie nieudane. Pokaż jak łączysz się z bazą, tam masz błąd.
beka
plik db_login.php
  1. <?php
  2. $db_host='localhost';
  3. $db_database='winyle';
  4. $db_username='root';
  5. $db_password='haslo';
  6. ?>


ot i całe logowanie... wątpię by tu był jakikolwiek błąd tongue.gif z resztą w innym pliku, który ma za zadanie np. tylko wyświetlać zawartość bazy danych (też korzysta z tego db-login.) jest wszystko dobrze.



DB.php jak wspominałem to pakiet PEAR'a ...
Pawel_W
@up
Ameryki to ty nie odkryłeś...

  1. <?php
  2. $connection =
  3. DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");
  4. ?>

tak się łączy, a błąd mu wyskakuje ponieważ nie ma tych dwóch plików z klasą

co do tego:
Cytat
Kod PHP1
2
3
4

<?php
$query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
?>

zamień na
Kod PHP1
2
3
4

<?php
$query = "INSERT INTO `plyty` VALUES (NULL, '".$title."', '".$author."', '".$edition."', '".$format."', '".$year"')";
?>


i tak dalej...

to jak nie wiesz na pewno to zasugeruj mu tylko aby zmienił, a nie każ mu zmieniać, bo takie rozwiązanie nic nie daje, radzę poczytać o różnicach między ' a "
beka
Tak tak cokolwiek (czyli raport, że nie można się połączyć) wyświetla na localhoście, na którym de facto mogę mieć źle skonfigurowany Apache itd. (choć już powinno być dobrze...), ale jak wytłumaczyć to, że na serwerze w sieci, który ma wszystko co powinien mieć... nic się nie wyświetla po kliknięciu Zatwierdź blinksmiley.gif pusto, nawet komunikatu nie ma...
Pawel_W
bo na niektórych serwerach może być wyłączony error_reporting winksmiley.jpg
beka
To co mam począć sadsmiley02.gif da się to jakoś rozwiązać tongue.gif tudzież napisać inaczej blinksmiley.gif questionmark.gif
Pawel_W
error_reporting(E_ALL);

nie jestem pewien czy poprawnie
beka
Chodziło mi raczej o działanie skryptu smile.gif ... może napisać bez korzystania z tego DB.php (PEAR'u) questionmark.gif Ale jak worriedsmiley.gif ? To mój pierwszy jako taki "projekt" tongue.gif
Pawel_W
  1. <?php
  2. function insert_db($title, $author, $edition, $format, $year){
  3. $sql = mysql_connect("host", "user", "password") or die('Nie mozna nawiazac polaczenia z baza danych.'.mysql_error());
  4. mysql_select_db("nazwa_bazy") or die('Nie mozna wybrac bazy danych.'.mysql_error());
  5. $title = stripslashes($title);
  6. $author = stripslashes($author);
  7. $edition = stripslashes($edition);
  8. $format = stripslashes($format);
  9. $year = stripslashes($year);
  10. }
  11.  
  12. $title = mysql_real_escape_string($title);
  13. $author = mysql_real_escape_string($author);
  14. $edition = mysql_real_escape_string($edition);
  15. $format = mysql_real_escape_string($format);
  16. $year = mysql_real_escape_string($year);
  17.  
  18. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  19. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  20. echo 'Dane zostały wstawione pomyślnie.<br />';
  21. $query = 'SELECT * FROM `plyty`';
  22. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  23. echo 'Dane zostały pobrane pomyślnie.<br />';
  24. echo '<table border="1">';
  25. echo '<tr><th>Tytuł</th><th>Autor</th><th>Wydanie</th><th>Format</th><th>Rok</th></tr>';
  26. while ($result_row = mysql_fetch_array($result)) {
  27. echo '<tr><td>';
  28. echo $result_row['tytul'] .'</td><td>';
  29. echo $result_row['autor'] .'</td><td>';
  30. echo $result_row['wydanie'] .'</td><td>';
  31. echo $result_row['format'] .'</td><td>';
  32. echo $result_row['rok'] .'</td></tr>';
  33. }
  34. echo '</table>';
  35. }
  36. ?>
  37. <html>
  38. <head>
  39. <title>Wstawianie danych</title>
  40. </head>
  41. <body>
  42. <?php
  43. $title = htmlentities($_GET['tytul']);
  44. $author = htmlentities($_GET['autor']);
  45. $edition = htmlentities($_GET['wydanie']);
  46. $format = htmlentities($_GET['format']);
  47. $year = htmlentities($_GET['rok']);
  48. if (($title != NULL ) && ($author != NULL ) && ($edition != NULL ) && ($format != NULL ) && ($year != NULL)){
  49. insert_db($title,$author,$edition,$format,$year);
  50. }
  51. else {
  52. <h1>Wprowadź nową pozycję:</h1>
  53. <form action="'.$_SERVER['PHP_SELF'].'" method="GET">
  54. <table><tr>
  55. <td><label>Tytuł:<input type="text" name="tytul" id="tytul" /></label></td>
  56. <td><label>Autor:<input type="text" name="autor" id="autor" /></label></td>
  57. <td><label>Wydanie:<input type="text" name="wydanie" id="wydanie" /></label></td>
  58. <td><label>Format:<input type="text" name="format" id="format" /></label></td>
  59. <td><label>Rok:<input type="text" name="rok" id="rok" /></label></td><br />
  60. <input type="submit" value="Zatwierdź" />
  61. </tr></table>
  62. </form>';
  63. }
  64. ?>
  65. </body>
  66. </html>

może zadziała winksmiley.jpg
Pawel_W
no bo musisz zmienić host, user, password i nazwa_bazy danych winksmiley.jpg

$sql = mysql_connect("host", "user", "password") or die('Nie mozna nawiazac polaczenia z baza danych.'.mysql_error());
mysql_select_db("nazwa_bazy")
beka
Eee tak tak zamuliłem smile.gif

Działa exclamation.gif! Dziękuje bardzoo smile.gif)



edit.

Ehh, ale tylko na localhoście tongue.gif... na serwerze :

Nie mozna nawiazac polaczenia z baza danych.Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

a
Pawel_W
no a dobry host podałeś? bo jezeli wrzucasz na serwer to nie mozesz podac localhost, chyba ze masz wewnetrzna baze danych
marian2299
http://forum.php.pl/index.php?showtopic=44...t=0&start=0

Tu jest odpowiedź.
beka
Cytat(Pawel_W @ 2.08.2009, 22:25:29 ) *
no a dobry host podałeś? bo jezeli wrzucasz na serwer to nie mozesz podac localhost, chyba ze masz wewnetrzna baze danych

tak zmieniłem...

Cytat(marian2299 @ 2.08.2009, 22:26:13 ) *


a co do tego linku ... czyli jak mam zrobić (przepraszam, ale w książce tego inaczej nie wyjaśnili) ?
wszystkie zmienne typu $title zmienic na .$_GET['title'] ?
marian2299
Jeżeli pochodzą z formularza.
Ale raczej chodziło mi o usunięcie wszystkich @ smile.gif.
beka
Cytat(marian2299 @ 2.08.2009, 22:45:20 ) *
Jeżeli pochodzą z formularza.
Ale raczej chodziło mi o usunięcie wszystkich @ smile.gif.

Tak.. jeszcze żeby jakiekolwiek @ było w kodzie blinksmiley.gif ...
marian2299
A tu:
Cytat
$connection =
DB::connect("mysql://$db_username:$db_password@$db_host/$db_database");
?

Edit:
Chyba, że je usunąłeś ?
beka
Cytat(marian2299 @ 2.08.2009, 22:50:41 ) *
A tu:
?

Edit:
Chyba, że je usunąłeś ?


Tak, usunięte smile.gif i nadal nie działa smile.gif o to właśnie chodzi ...
marian2299
Cytat
Can't connect to local MySQL server through

Tak jak mówił kolega Paweł_W, może baza nie powinna być lokalna ?
beka
ehh lokalnie działa idealnie, ale na serwerze sieciowym (zagraniczny host) nie działa ...
A zmieniłem dane do łączenia z bazą danych.
marian2299
A jak wyglądają obecnie twoje dane ? I jaki to hosting (link) ?
beka
  1. <?php
  2. function insert_db($title, $author, $edition, $format, $year){
  3. $sql = mysql_connect("host", "uzytkownik", "haslo") or die('Nie mozna nawiazac polaczenia z baza danych.'.mysql_error());
  4. mysql_select_db("baza_danych") or die('Nie mozna wybrac bazy danych.'.mysql_error());
  5. $title = stripslashes($title);
  6. $author = stripslashes($author);
  7. $edition = stripslashes($edition);
  8. $format = stripslashes($format);
  9. $year = stripslashes($year);
  10. }
  11.  
  12. $title = mysql_real_escape_string($title);
  13. $author = mysql_real_escape_string($author);
  14. $edition = mysql_real_escape_string($edition);
  15. $format = mysql_real_escape_string($format);
  16. $year = mysql_real_escape_string($year);
  17.  
  18. $query = "INSERT INTO `plyty` VALUES (NULL, '$title', '$author', '$edition', '$format', '$year')";
  19. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  20. echo 'Dane zostały wstawione pomyślnie.<br />';
  21. $query = 'SELECT * FROM `plyty`';
  22. $result = mysql_query($query) or die('Nie mozna wykonac zapytania.'.mysql_error());
  23. echo 'Dane zostały pobrane pomyślnie.<br />';
  24. echo '<table border="1">';
  25. echo '<tr><th>Tytuł</th><th>Autor</th><th>Wydanie</th><th>Format</th><th>Rok</th></tr>';
  26. while ($result_row = mysql_fetch_array($result)) {
  27. echo '<tr><td>';
  28. echo $result_row['tytul'] .'</td><td>';
  29. echo $result_row['autor'] .'</td><td>';
  30. echo $result_row['wydanie'] .'</td><td>';
  31. echo $result_row['format'] .'</td><td>';
  32. echo $result_row['rok'] .'</td></tr>';
  33. }
  34. echo '</table>';
  35. }
  36. ?>
  37. <html>
  38. <head>
  39. <title>Wstawianie danych</title>
  40. </head>
  41. <body>
  42. <?php
  43. $title = htmlentities($_GET['tytul']);
  44. $author = htmlentities($_GET['autor']);
  45. $edition = htmlentities($_GET['wydanie']);
  46. $format = htmlentities($_GET['format']);
  47. $year = htmlentities($_GET['rok']);
  48. if (($title != NULL ) && ($author != NULL ) && ($edition != NULL ) && ($format != NULL ) && ($year != NULL)){
  49. insert_db($title,$author,$edition,$format,$year);
  50. }
  51. else {
  52. <h1>Wprowadź nową pozycję:</h1>
  53. <form action="'.$_SERVER['PHP_SELF'].'" method="GET">
  54. <table><tr>
  55. <td><label>Tytuł:<input type="text" name="tytul" id="tytul" /></label></td>
  56. <td><label>Autor:<input type="text" name="autor" id="autor" /></label></td>
  57. <td><label>Wydanie:<input type="text" name="wydanie" id="wydanie" /></label></td>
  58. <td><label>Format:<input type="text" name="format" id="format" /></label></td>
  59. <td><label>Rok:<input type="text" name="rok" id="rok" /></label></td><br />
  60. <input type="submit" value="Zatwierdź" />
  61. </tr></table>
  62. </form>';
  63. }
  64. ?>
  65. </body>
  66. </html>

Oczywiście host, uzytkownik, haslo i baza_danych uzupełnione jak należy (jestem pewien), ale byłoby głupota, gdybym je tu pisał winksmiley.jpg
hosting : www.byethost.com
marian2299
Napisz je tutaj, za wyjątkiem hasła, oczywiście winksmiley.jpg.
beka
Nie wiem po co, ale cóż....

host : sql205.byethost5.com
user : b5_2111021
baza : b5_2111021_winyle
marian2299
Na pewno nie pomyliłeś bazy z userem, sprawdź.


PS: dobry ten hosting ? płatny ?

EDIT: http://sql205.byethost5.com/ tu powinien być phpmyadmin, a jest "nie można wyświetlić strony".
beka
Nie, nie pomyliłem.

Serwer - świetny. Płatny/Darmowy smile.gif Czyli standardowo na darmowym masz mniej wszystkiego, ale to i tak dużo. Poczytaj - stronę przecież podałem, tam wszystko jest.
Ja mam ten free oczywiście już jakiś rok i nie narzekam smile.gif

edit.
Jednak była literówka winksmiley.jpg akurat w haśle smile.gif ehh późno już - to pewnie przez to.

Ok, ale prosiłbym nie zamykać tematu, bo mam zamiar rozwinąć ten "system" więc będę pisał tu.

Jeszcze raz wielkie dzięki !

Hmmm napotkałem kolejny problem smile.gif A dokładniej dwa.
- skrypt nie dodaje polskich znaków (tak, czytalem na forum, ale nic nie działa jak dotąd... nie wiem... w bazie danych zmieniłem kodowanie i nic, na stronie też jest dobre)
- po dodaniu wpisu, przy odświeżaniu strony wpis dodaje się ponownie ... i tak ile się chce...

worriedsmiley.gif
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.