-Haczyk-
18.06.2008, 11:55:23
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
<html>
<head>
<title>"Książkorama"-Rezultaty wyszukiwania</title>
</head>
<body>
<h1>"Książkorama"-Rezultaty wyszukiwania </h1>
<?php
// utworzenie krótkich nazw zmiennych
$metoda_szukania=$_POST['metoda_szukania'];
$wyrazenie=$_POST['wyrazenie'];
$wyrazenie = trim($wyrazenie);
if (!$metoda_szukania || !$wyrazenie)
{
echo 'Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.'; }
{
}
@ $db = new mysqli('localhost', 'ksiazkorama', 'ksiazkorama123', 'ksiazki');
if (mysqli_connect_errno())
{
echo 'Błąd: Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.'; }
$zapytanie = "select * from ksiazki where ".$metoda_szukania." like '%".$wyrazenie."%'";
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows;
echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>';
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
echo '<p><strong>'.($i+1).'. Tytuł: '; echo '</strong><br />Autor: '; }
$wynik->free();
$db->close();
?>
</body>
</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
18.06.2008, 12:10:11
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-
21.06.2008, 10:47:42
taki kod działa:
<?php
// nawiazujemy polaczenie
echo 'Udało się połączyć z serwerem!<br />'; // nawiązujemy połączenie z bazą danych
// w przypadku niepowodzenia wyświetlamy komunikat
or
die('Nie mogę połączyć się z bazą danych<br />Błąd: '.mysql_error());// połączenie nawiązane ;-)
echo "Udało się połączyć z bazą dancych!"; // zamykamy połączenie
// skrypt pochodzi ze strony www.kess.snug.pl
?>
ale kiedy wpisuje kod z pierwszego postu wyswietla sie
Fatal error: Class 'mysqli' not found in * on line *
maziak
21.06.2008, 10:59:11
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-
21.06.2008, 11:02:41
mam najnowsze wersje php mysql i apache, mysle ze dobrze skonf. po co instalowac nastepne?
maziak
21.06.2008, 11:12:48
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
-Haczyk-
21.06.2008, 11:15:39
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
21.06.2008, 11:21:04
-Haczyk-
21.06.2008, 11:25:01
kurcze duzo tego i jeszcze po ang.

nie mozna jakos krocej
maziak
21.06.2008, 11:54:18
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.
-Haczyk-
21.06.2008, 12:13:04
erix
21.06.2008, 14:00:17
Nie.
Nie kompilujesz php. Zrób tak, jak maziak napisał. No chyba, że pracujesz na Linuksie, to wtedy musisz rekompilować PHP.
-Haczyk-
22.06.2008, 11:39:20
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
22.06.2008, 12:08:00
A co w ogóle zrobiłeś, że "nie działa"?
-Haczyk-
22.06.2008, 16:14:36
no zrobiłem tak jak maziak napisał. usunalem srednik.
-Haczyk-
22.06.2008, 16:34:16
o kurcze. dziala. przepraszam zle wpisalem. juz dziala. dziekuje Wam chłopaki
-Haczyk-
30.06.2008, 08:12:57
mam nastepny problem. zmodyfikowalem troche ten skrypt..
<?php
$metoda_szukania=$_POST['metoda_szukania'];
$wyrazenie=$_POST['wyrazenie'];
$wyrazenie = trim($wyrazenie); if (!$metoda_szukania || !$wyrazenie)
{
echo 'Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.'; }
{
}
$db = new mysqli('localhost', 'iulili', 'iliill', 'bazabaza');
if (mysqli_connect_errno())
{
echo 'Błąd: Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.'; }
else
{
echo 'Udało się połączyć z bazą danych.<br />'; }
$zapytanie = "select * from bazabaza where ".$metoda_szukania." like '%".$wyrazenie."%'";
$wynik = $db->query($zapytanie);
$ile_znalezionych = $wynik->num_rows; //linia 42
echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>'; for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = $wynik->fetch_assoc();
echo '<p><strong>'.($i+1).'. nazwa: '; echo '</strong><br /> autor: '; }
$wynik->free(); //linia 53
$db->close();
?>
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
30.06.2008, 08:24:39
Witaj ponownie

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-
30.06.2008, 08:35:52
dzieki udalo sie.
pomylilem nazwy
-Haczyk-
30.06.2008, 08:49:02
kurcze mam kolej ny problem tym razem ze wstawianiem rekordu. co w tym jest zle?
<?php
// utworzenie krótkich anzw zmiennych
$tytul=$_POST['tytul'];
$artysta=$_POST['autor'];
if (!$tytul || !$autor)
{
echo 'Nie podano wszystkich potrzebnych danych.<br />' .'Wróć do poprzedniej strony i spróbuj ponownie.';
}
{
}
$db = new mysqli('localhost', 'fdgdf', 'grgrfggl', 'bazabaza');
if (mysqli_connect_errno())
{
echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.'; }
$zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
$wynik = $db->query($zapytanie);
if ($wynik)
echo $db->affected_rows.' książka zapisana do bazy.';
?>
zapytanie jest ok sprawdzalem. a autro jest typu liczbowego
krzycho
30.06.2008, 09:12:41
Mimo, że robisz tak: $artysta=$_POST['autor'], to w dalszej części skryptu używasz $autor której nie ma.
-Haczyk-
30.06.2008, 09:18:14
dzieki poprawilem ale dalej nie działa.
erix
30.06.2008, 09:27:08
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-
30.06.2008, 11:29:08
<?php
$tytul=$_POST['tytul'];
$autor=$_POST['autor'];
if (!$tytul || !$autor)
{
echo 'Nie podano wszystkich potrzebnych danych.<br />' .'Wróć do poprzedniej strony i spróbuj ponownie.';
}
{
}
$db = new mysqli('localhost', 'htyuytuytuyuytumyuyul', 'yuyujyuuytuuuuuytuyil', 'bazabaza');
if (mysqli_connect_errno())
{
echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.'; }
$zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
$wynik = $db->query($zapytanie);
if ($wynik)
echo $db->affected_rows.' książka zapisana do bazy.'; ?>
-Haczyk-
1.07.2008, 07:48:19
z tego kodu wynika takie coś:
ok ok fgdfbgf
czyli że coś źle
Qleer
1.07.2008, 08:15:26
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 <?php
?>
Kod który wyświetli Ci błąd Sqli:<?php
printf("Błąd MySqli: %s\n", $db->error); ?>
I zobaczymy w czym diabeł tkwi
-Haczyk-
3.07.2008, 09:52:21
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

otoz kiedy proboje wyslac plik wywala dwa bledy
kod php:
<?php
if ($_FILES['plikuzytkownika']['error'] > 0)
{
switch ($_FILES['plikuzytkownika']['error'])
{
case 1
: echo 'Rozmiar pliku przekroczył wartość upload_max_filesize'; break; case 2
: echo 'Rozmiar pliku przekroczył wartość max_file_size'; break; case 3
: echo 'Plik wysłany tylko częściowo'; break; case 4
: echo 'Nie wysłano żadnego pliku'; break; }
}
// czy plik ma prawidłowy typ MIME?
if ($_FILES['plikuzytkownika']['type'] != 'text/plain')
{
echo 'Problem: plik nie zawiera zwykłego tekstu'; }
// umieszczenie pliku w pożądanej lokalizacji
$lokalizacja = 'C:/wyslane/'.$_FILES['plikuzytkownika']['name'];
{
{
echo 'Problem: Plik nie może być skopiowany do katalogu'; }
}
else
{
echo 'Problem: możliwy atak podczas wysyłania pliku. Nazwa pliku: '; echo $_FILES['plikuzytkownika']['name']; }
echo 'Plik wysłany<br><br>'; // ponowne sformatowanie zawartości pliku
$wp = fopen($lokalizacja, 'r'); $wp = fopen($lokalizacja, 'w'); // pokazanie, co zostało wysłane
echo 'Podgląd zawartości wysłanego pliku:<br><hr>'; ?>
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-
4.07.2008, 13:43:57
ad 1. ---
ad.2. dodam że plik może byc tylko txt
kefirek
4.07.2008, 17:23:23
Pewnie katalogu nie utworzyłes miałem ten sam błąd C:/wyslane/ oraz usuń z tego kodu
<?php
if ($_FILES['plikuzytkownika']['type'] != 'text/plain')
{
echo 'Problem: plik nie zawiera zwykłego tekstu'; }
?>
-Haczyk-
6.07.2008, 09:30:16
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
<?php
$tytul=$_POST['tytul'];
$autor=$_POST['autor'];
if (!$tytul || !$autor)
{
echo 'Nie podano wszystkich potrzebnych danych.<br />' .'Wróć do poprzedniej strony i spróbuj ponownie.';
}
{
}
$db = new mysqli('localhost', 'htyuytuytuyuytumyuyul', 'yuyujyuuytuuuuuytuyil', 'bazabaza');
if (mysqli_connect_errno())
{
echo 'Błąd: : Połączenie z bazą danych nie powiodło się. Spróbuj jeszcze raz później.'; }
$zapytanie = "insert into tabela values (NULL, '".$tytul."', ".$autor.", 0, 0, 0, 0, NULL, 0)";
$wynik = $db->query($zapytanie);
if ($wynik)
echo $db->affected_rows.' książka zapisana do bazy.'; ?>
-Haczyk-
6.07.2008, 09:45:50
sorki pomylilem wyskakuje: Błąd MySqli: Unknown column 'e' in 'field list'
kallosz
6.07.2008, 10:02:11
brak kolumny 3
-Haczyk-
6.07.2008, 10:04:46
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
6.07.2008, 10:55:21
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-
7.07.2008, 19:49:02
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
<?php
'"$artysta"'
?>
-Haczyk-
7.07.2008, 19:50:03
źle
tak dobrze:
<?php
'".$ARTYSTA."'
?>
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.