Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Problem ze skryptem połączenia z MySQL
Forum PHP.pl > Forum > Przedszkole
-Haczyk-
W ksiażce Helionu PHP i MySQL. Tworzenie stron WWW. Vademecum profesjonalisty. Wydanie trzecie opisane jest połączenie i wysłanie zapytania do bazy danych MySQL. Jednak on nie dziala. Oto kod

  1. <html>
  2. <head>
  3. <title>"Książkorama"-Rezultaty wyszukiwania</title>
  4. </head>
  5. <body>
  6. <h1>"Książkorama"-Rezultaty wyszukiwania </h1>
  7. <?php
  8. // utworzenie krótkich nazw zmiennych
  9. $metoda_szukania=$_POST['metoda_szukania'];
  10. $wyrazenie=$_POST['wyrazenie'];
  11.  
  12. $wyrazenie = trim($wyrazenie);
  13.  
  14. if (!$metoda_szukania || !$wyrazenie)
  15. {
  16.  echo 'Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.';
  17.  exit;
  18. }
  19.  
  20. {
  21. $metoda_szukania = addslashes($metoda_szukania);
  22. $wyrazenie = addslashes($wyrazenie);
  23. }
  24.  
  25. @ $db = new mysqli('localhost', 'ksiazkorama', 'ksiazkorama123', 'ksiazki');
  26.  
  27. if (mysqli_connect_errno())
  28. {
  29.  echo 'Błąd: Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  30.  exit;
  31. }
  32.  
  33. $zapytanie = "select * from ksiazki where ".$metoda_szukania." like '%".$wyrazenie."%'";
  34. $wynik = $db->query($zapytanie);
  35.  
  36. $ile_znalezionych = $wynik->num_rows;
  37.  
  38. echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>';
  39.  
  40. for ($i=0; $i <$ile_znalezionych; $i++)
  41. {
  42.  $wiersz = $wynik->fetch_assoc();
  43.  echo '<p><strong>'.($i+1).'. Tytuł: ';
  44.  echo stripslashes($wiersz['tytul']);
  45.  echo '</strong><br />Autor: ';
  46.  echo stripslashes($wiersz['autor']);
  47.  echo '<br />ISBN: ';
  48.  echo stripslashes($wiersz['isbn']);
  49.  echo '<br />Cena: ';
  50.  echo stripslashes($wiersz['cena']);
  51.  echo '</p>';
  52. }
  53.  
  54. $wynik->free();
  55. $db->close();
  56.  
  57. ?>
  58.  
  59. </body>
  60. </html>


Pokazuje sie tylko tytul i nic wiecej zadnzch komunikatow o bledzie (chyba ze usune malpe wtedz pokazuje sie blad Fatal error: Class 'mysqli' not found in * on line * )

Prosze o pomoc bo meczesie z tym juz pare dni i nic nie moge zrobic.

szukalem w google ale wszzstkie poradz ktore tam znalazlem nie dzialaja np. zebz usunac srednik w php.ini w odpowiednim miejscu

z gory dzieki
redelek
Cytat(-Haczyk- @ 18.06.2008, 10:55:23 ) *
Pokazuje sie tylko tytul i nic wiecej zadnzch komunikatow o bledzie (chyba ze usune malpe wtedz pokazuje sie blad Fatal error: Class 'mysqli' not found in * on line * )

Prosze o pomoc bo meczesie z tym juz pare dni i nic nie moge zrobic.

szukalem w google ale wszzstkie poradz ktore tam znalazlem nie dzialaja np. zebz usunac srednik w php.ini w odpowiednim miejscu

z gory dzieki


Rozumiem że masz poprawnie skonfigurowanego APACHE PHP i MySQL Lite ?
Bo to co napisałeś na samym końcu wygląda na to że nie może znaleźć klasy mysqli ?
Czy zanim się narobiłeś to zrobiłeś małe testy z połączeniem z MySQLi czy nie?
Zacznij od prostych rzeczy ( mam połączenie, brak połączenia, wybrałem bazę, nie mogę wybrać bazy itd)


Pozdro
Redelek

Pozdrawiam
Redelek
-Haczyk-
taki kod działa:

  1. <?php
  2. // nawiazujemy polaczenie
  3. echo 'fff';
  4. $connection = mysql_connect('localhost', 'Kamil', 'Kamil') ;
  5. echo 'Udało się połączyć z serwerem!<br />';
  6. // nawiązujemy połączenie z bazą danych
  7. $db = @mysql_select_db('ksiazki', $connection)
  8. // w przypadku niepowodzenia wyświetlamy komunikat
  9. or die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());
  10. // połączenie nawiązane ;-)
  11. echo "Udało się połączyć z bazą dancych!";
  12. // zamykamy połączenie
  13. mysql_close($connection);
  14. // skrypt pochodzi ze strony www.kess.snug.pl
  15. ?>


ale kiedy wpisuje kod z pierwszego postu wyswietla sie

Fatal error: Class 'mysqli' not found in * on line *
maziak
Hm, na poczatek proponuje zainstalowac jakis sprawdzony pakiecik apache mysql php z odpowiednimi wersjami, np WAMP. Jak to nie pomoże to bedziemy kombinować dalej.
-Haczyk-
mam najnowsze wersje php mysql i apache, mysle ze dobrze skonf. po co instalowac nastepne?
maziak
No mowiac krotko dlatego, że u mnie ten kod działa w najlepszym porządku. Czyli jednak nie najlepiej skonfigurowane. Błąd wyraznie wskazuje na brak klasy mysqli, ktora oczywiscie powinna sie znajdowac na swoim miejscu. Najszybszym sposobem dla upewnienia, zdaje sie zainstalowanie gotowego, skonfigurowanego i sprawdzonego pakietu.

Uczylem sie z tej samej książki nawiasem mówiac smile.gif
-Haczyk-
kurcze nie usmiecha mi sie robic wszystko od poczatku. plik konfiguracyjny modyfikowalem juz przy okazji roznych problemow jak chociazby ten.i jest do mnie "dopasowany".
moglbys mi powiedziec co konkretnie zmienic w tym pliku albo odeslac mnie gdzies gdzie jest to opisane?
maziak
Jak chcesz.
http://pl.php.net/manual/pl/book.mysqli.php
-Haczyk-
kurcze duzo tego i jeszcze po ang. tongue.gif
nie mozna jakos krocej smile.gif
maziak
Hm, w sumie to "Instalacja i konfiguracja" jest po polsku. A reszta Cię póki co nie interesuje.


Zobacz czy masz w swoim php.ini taka linijke :
extension=php_mysqli.dll

Jezeli jej nie ma, to ja dopisz. A jak jest poprzedzona srednikiem to go wywal.
erix
Nie.

Nie kompilujesz php. Zrób tak, jak maziak napisał. No chyba, że pracujesz na Linuksie, to wtedy musisz rekompilować PHP.
-Haczyk-
dalej nie dziala ;/

PS. powiedzcie mi jak to jest? sciagam najnowsze standardowo skonfigorowane wersje a nie dzialaja mi takie podstawowe rzeczy i trzeba to modyfikować...
erix
A co w ogóle zrobiłeś, że "nie działa"?
-Haczyk-
no zrobiłem tak jak maziak napisał. usunalem srednik.
-Haczyk-
o kurcze. dziala. przepraszam zle wpisalem. juz dziala. dziekuje Wam chłopaki
-Haczyk-
mam nastepny problem. zmodyfikowalem troche ten skrypt..

  1. <?php
  2.  $metoda_szukania=$_POST['metoda_szukania'];
  3.  $wyrazenie=$_POST['wyrazenie'];
  4.  $wyrazenie = trim($wyrazenie);
  5.  if (!$metoda_szukania || !$wyrazenie)
  6. {
  7.  echo 'Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.';
  8.  exit;
  9. }
  10. {
  11.  $metoda_szukania = addslashes($metoda_szukania);
  12.  $wyrazenie = addslashes($wyrazenie);
  13. }
  14.  $db = new mysqli('localhost', 'iulili', 'iliill', 'bazabaza');
  15.  if (mysqli_connect_errno())
  16. {
  17.  echo 'Błąd: Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  18.  exit;
  19. }
  20.  else
  21. {
  22.  echo 'Udało się połączyć z bazą danych.<br />';
  23. }
  24.  $zapytanie = "select * from bazabaza where ".$metoda_szukania." like '%".$wyrazenie."%'";
  25.  $wynik = $db->query($zapytanie);
  26.  $ile_znalezionych = $wynik->num_rows;  //linia 42
  27.  echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>';
  28.  for ($i=0; $i <$ile_znalezionych; $i++)
  29. {
  30.  $wiersz = $wynik->fetch_assoc();
  31.  echo '<p><strong>'.($i+1).'. nazwa: ';
  32.  echo stripslashes($wiersz['nazwa']);
  33.  echo '</strong><br /> autor: ';
  34.  echo stripslashes($wiersz['autor']);
  35.  echo '</p>';
  36. }
  37.  $wynik->free();  //linia 53
  38.  $db->close();
  39. ?>


i wyskakuje

Udało się połączyć z bazą danych.

Notice: Trying to get property of non-object in ... on line 42

Ilość znalezionych pozycji:

Fatal error: Call to a member function free() on a non-object in ... on line 53

dodam ze autor to kolumna typu liczbowego
maziak
Witaj ponownie smile.gif

Na pierwszy rzut oka zapytanie do bazy nic nie zwraca. Dlatego $wynik nie jest obiektem. Upewnij się, że to zapytanie cos zwraca (wklej do phpmyadmina albo cos takiego, tylko podmien oczywiscie zmienne na wartosci).

Ogolnie rzecz biorąc, odpowiedzi na to co oznaczja poszczegolne bledy i jak je pokonac - znacznie szybciej uzyskasz w googlach, niż na forum.
-Haczyk-
dzieki udalo sie.

pomylilem nazwy smile.gif
-Haczyk-
kurcze mam kolej ny problem tym razem ze wstawianiem rekordu. co w tym jest zle?

  1. <?php
  2. // utworzenie krótkich anzw zmiennych
  3. $tytul=$_POST['tytul'];
  4. $artysta=$_POST['autor'];
  5.  
  6. if (!$tytul || !$autor)
  7. {
  8.  echo 'Nie podano wszystkich potrzebnych danych.<br />'
  9. .'Wróć do poprzedniej strony i spróbuj ponownie.';
  10.  exit;
  11. }
  12.  
  13. else {echo 'ok';}
  14. {
  15. $tytul = addslashes($tytul);
  16. $artysta = addslashes($autor);
  17. }
  18.  
  19.  $db = new mysqli('localhost', 'fdgdf', 'grgrfggl', 'bazabaza');
  20.  
  21. if (mysqli_connect_errno())
  22. {
  23.  echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  24.  exit;
  25. }
  26.  else {echo 'ok';}
  27. $zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
  28. $wynik = $db->query($zapytanie);
  29. if ($wynik)
  30. echo $db->affected_rows.' książka zapisana do bazy.';
  31. else { echo 'fgdfbgf';}
  32.  
  33.  
  34. ?>


zapytanie jest ok sprawdzalem. a autro jest typu liczbowego
krzycho
Mimo, że robisz tak: $artysta=$_POST['autor'], to w dalszej części skryptu używasz $autor której nie ma.
-Haczyk-
dzieki poprawilem ale dalej nie działa.
erix
Ale co Ci to zwraca? Nie wiem, w których miejscach poprawiłeś, ale podejrzewam, że po prostu niekonsekwentnie używasz nazw zmiennych...

Pokaż, co masz teraz, ale wcześniej upewnij się, że wszystkie zmienne są tam, gdzie być powinny i mają odpowiednie wskazania.
-Haczyk-
  1. <?php
  2. $tytul=$_POST['tytul'];
  3. $autor=$_POST['autor'];
  4.  
  5. if (!$tytul || !$autor)
  6. {
  7.  echo 'Nie podano wszystkich potrzebnych danych.<br />'
  8. .'Wróć do poprzedniej strony i spróbuj ponownie.';
  9.  exit;
  10. }
  11.  
  12. else {echo 'ok';}
  13. {
  14. $tytul = addslashes($tytul);
  15. $autor = addslashes($autor);
  16. }
  17.  
  18.  $db = new mysqli('localhost', 'htyuytuytuyuytumyuyul', 'yuyujyuuytuuuuuytuyil', 'bazabaza');
  19.  
  20. if (mysqli_connect_errno())
  21. {
  22.  echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  23.  exit;
  24. }
  25.  else {echo 'ok';}
  26. $zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
  27. $wynik = $db->query($zapytanie);
  28. if ($wynik)
  29. echo $db->affected_rows.' książka zapisana do bazy.';
  30. else { echo 'fgdfbgf';}
  31. ?>
-Haczyk-
z tego kodu wynika takie coś:

ok ok fgdfbgf

czyli że coś źle sad.gif
Qleer
OK numer 1 ponieważ poprawnie łączy się z bazą danych.
OK numer 2 ponieważ wszystkie dane są wysyłane zmienną $_POST.
fgdfbgf ponieważ jest błąd przy dodawaniu danych, zapewne nazwa kolumny, albo coś w ten deseń. Dodaj pod
  1. <?php
  2. echo 'fgdfbgf';
  3. ?>

Kod który wyświetli Ci błąd Sqli:
  1. <?php
  2. printf("Błąd MySqli: %s\n", $db->error);
  3. ?>

I zobaczymy w czym diabeł tkwi aaevil.gif
-Haczyk-
wyswietla sie takie cos::

Błąd MySqli: Unknown column '<<to co wpisalem w foemularzu w polu autor>>' in 'field list'



i jeszcze mam jeden problem z tej samej ksiazki sad.gif

otoz kiedy proboje wyslac plik wywala dwa bledy

kod php:

  1. <?php
  2.  if ($_FILES['plikuzytkownika']['error'] > 0)
  3. {
  4.  echo 'Problem: ';
  5.  switch ($_FILES['plikuzytkownika']['error'])
  6. {
  7.  case 1: echo 'Rozmiar pliku przekroczył wartość upload_max_filesize'; break;
  8.  case 2: echo 'Rozmiar pliku przekroczył wartość max_file_size'; break;
  9.  case 3: echo 'Plik wysłany tylko częściowo'; break;
  10.  case 4: echo 'Nie wysłano żadnego pliku'; break;
  11. }
  12.  exit;
  13. }
  14.  // czy plik ma prawidłowy typ MIME?
  15.  if ($_FILES['plikuzytkownika']['type'] != 'text/plain')
  16. {
  17.  echo 'Problem: plik nie zawiera zwykłego tekstu';
  18.  exit;
  19. }
  20.  // umieszczenie pliku w pożądanej lokalizacji
  21.  $lokalizacja = 'C:/wyslane/'.$_FILES['plikuzytkownika']['name'];
  22.  if (is_uploaded_file($_FILES['plikuzytkownika']['tmp_name']))
  23. {
  24.  if (!move_uploaded_file($_FILES['plikuzytkownika']['tmp_name'], $lokalizacja))
  25. {
  26.  echo 'Problem: Plik nie może być skopiowany do katalogu';
  27.  exit;
  28. }
  29. }
  30.  else
  31. {
  32.  echo 'Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: ';
  33.  echo $_FILES['plikuzytkownika']['name'];
  34.  exit;
  35. }
  36.  echo 'Plik wysłany<br><br>';
  37.  // ponowne sformatowanie zawartości pliku
  38.  $wp = fopen($lokalizacja, 'r');
  39.  $zawartosc = fread ($wp, filesize ($lokalizacja));
  40.  fclose ($wp);
  41.  $zawartosc = strip_tags($zawartosc);
  42.  $wp = fopen($lokalizacja, 'w');
  43.  fwrite($wp, $zawartosc);
  44.  fclose($wp);
  45.  // pokazanie, co zostało wysłane
  46.  echo 'Podgląd zawartości wysłanego pliku:<br><hr>';
  47.  echo $zawartosc;
  48.  echo '<br><hr>';
  49. ?>


błędy:

Warning: move_uploaded_file(/wyslane/plik.txt) [function.move-uploaded-file]: failed to open stream: No such file or directory in *\wyslij.php on line 43

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\php384.tmp' to '/wyslane/plik.txt' in *\wyslij.php on line 43
Problem: Plik nie może być skopiowany do katalogu

w googlach jak zwykle nic bobym nie pisał
-Haczyk-
ad 1. ---

ad.2. dodam że plik może byc tylko txt
kefirek
Pewnie katalogu nie utworzyłes miałem ten sam błąd C:/wyslane/ oraz usuń z tego kodu
  1. <?php
  2. if ($_FILES['plikuzytkownika']['type'] != 'text/plain')
  3. {
  4.  echo 'Problem: plik nie zawiera zwykłego tekstu';
  5.  exit;
  6. }
  7. ?>
-Haczyk-
dzieki kefirek dziala!

a ma ktos pomysl na to:

po wpisaniu

<?php
printf("Błąd MySqli: %s\n", $db->error);
?>

wyskakuje

<?php
printf("Błąd MySqli: %s\n", $db->error);
?>

w kodzie

  1. <?php
  2. $tytul=$_POST['tytul'];
  3. $autor=$_POST['autor'];
  4.  
  5. if (!$tytul || !$autor)
  6. {
  7.  echo 'Nie podano wszystkich potrzebnych danych.<br />'
  8. .'Wróć do poprzedniej strony i spróbuj ponownie.';
  9.  exit;
  10. }
  11.  
  12. else {echo 'ok';}
  13. {
  14. $tytul = addslashes($tytul);
  15. $autor = addslashes($autor);
  16. }
  17.  
  18.  $db = new mysqli('localhost', 'htyuytuytuyuytumyuyul', 'yuyujyuuytuuuuuytuyil', 'bazabaza');
  19.  
  20. if (mysqli_connect_errno())
  21. {
  22.  echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.';
  23.  exit;
  24. }
  25.  else {echo 'ok';}
  26. $zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
  27. $wynik = $db->query($zapytanie);
  28. if ($wynik)
  29. echo $db->affected_rows.' książka zapisana do bazy.';
  30. else { echo 'fgdfbgf';}
  31. ?>
-Haczyk-
sorki pomylilem wyskakuje: Błąd MySqli: Unknown column 'e' in 'field list'
kallosz
brak kolumny 3 exclamation.gif
-Haczyk-
jak to?

kolumna 3 to $autor

insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)

tyle ze jest typ liczbowy
maziak
Yh,yh tyle czasu już się z tym bawisz. A pomyśleć, że wystarczy do działania przepsiać choćby znak w znak z książki.
Działa na pewno.

A z reszta - tu masz kody zrodlowe przykladow z tej ksiazki.
http://www.speedyshare.com/896363871.html
-Haczyk-
ok rozwiazałem

jakby ktos mial kiedys problem to rozwiazanie jest proste:

wystarczy wszystkie zmienne jakie dodajesz do zapytania oznaczyc w taKIE cos: ' i '

czyli
  1. <?php
  2. '"$artysta"'
  3. ?>
-Haczyk-
źle

tak dobrze:

  1. <?php
  2. '".$ARTYSTA."'
  3. ?>
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.