Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Wyszukiwanie rekordów z bazy MySQL
Forum PHP.pl > Forum > Przedszkole
filippopipetto
Witam Państwa! Jestem tu noobem i nie wiem czy już gdzieś nie dupklikuje tematu. Mam problem z wyszukiwaniem rekordów z bazy MySql. Oto kod:

  1. <html>
  2. <head>
  3.  <title>Inwentaryzacja sprzętu w salach</title>
  4. </head>
  5. <body>
  6. <h2>Inwentaryzacja sprzętu - rezultaty wyszukiwania </h2>
  7.  
  8. <?php
  9. $connection = mysql_connect('moje polaczenie', 'moj login', 'moje haslo')
  10. or die('Brak polaczenia z serwerem.<br />Błąd: '.mysql_error());
  11. echo "Udalo sie polaczyc z serwerem.<br />";
  12. $db = mysql_select_db('moja baza', $connection)
  13. or die('Brak połączenia z bazą danych.<br />Błąd: '.mysql_error());
  14. echo "Udało się połączyć z bazą danych.";
  15.  // utworzenie krótkich nazw zmiennych
  16.  $metoda_szukania=$_POST['metoda_szukania'];
  17.  $wyrazenie=$_POST['wyrazenie'];
  18.  
  19.  $wyrazenie= trim($wyrazenie);
  20.  
  21.  // wykonanie zapytania
  22.  $zapytanie = "select * from tabela where ".$metoda_szukania." like '%".$wyrazenie."%'";
  23.  
  24.  {
  25.    $metoda_szukania = addslashes($metoda_szukania);
  26.    $wyrazenie = addslashes($wyrazenie);
  27.  }
  28.  
  29.  
  30.  if (!$metoda_szukania || !$wyrazenie)
  31.  {
  32.     echo '<br>Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.';
  33.     exit;
  34.  }
  35.  
  36.  
  37.  $wynik = $db->query($zapytanie);
  38.  // sprawdzenie, czy wynik jest OK
  39.  if (DB::isError($wynik))
  40.  {
  41.    echo $db->getMessage();
  42.    exit;
  43.  }
  44.  
  45.  // pobranie liczby zwróconych wierszy
  46.  $ile_znalezionych = $wynik->numRows();
  47.  
  48.  // wyświetlenie każdego zwróconego wiersza
  49.  for ($i=0; $i <$ile_znalezionych; $i++)
  50.  {
  51.     $wiersz = $wynik->fetchRow(DB_FETCHMODE_ASSOC);
  52.     echo '<p><strong>'.($i+1).'. Numer_sali: ';
  53.     echo stripslashes($wiersz['Numer_sali']);
  54.     echo '</strong><br />Meble: ';
  55.     echo stripslashes($wiersz['Meble']);
  56.     echo '<br />Sprzet: ';
  57.     echo stripslashes($wiersz['Sprzet']);
  58.     echo '<br />Oprogramowanie: ';
  59.     echo stripslashes($wiersz['Oprogramowanie']);
  60.     echo '</p>';
  61.  }
  62.  $wynik->free();
  63.  $db->close();
  64.  
  65.  // rozłączenie się z bazą danych
  66.  $db->disconnect();
  67.  ?>
  68.  
  69. </body>
  70. </html>
nospor
Cytat
Jestem tu noobem
A jak idziesz do lekarza pierwszy raz to wpadasz do gabinetu z tekstem:
Jestem noobem, boli mnie. doktor ratuj!!!!

Czy moze
Panie doktorze, boli mnie tu i tu gdy robie to i to. Oco chodzi?


Tak samo tutaj. Nie obchodzi nas kim ty jestes. Nas interesuje problem jaki masz, a ty nie raczyles go opisac. Co sie dzieje? Komputer sie pali? Kod pluje bledem? Inne?

ps: uzywaj wlasciwego bbcode. do kodu php ma to byc php
filippopipetto
już zmieniłem jak tak Cię to bolało to po primo.
Problem jest taki iż nie wiem w którym miejscu kodu został popełniony błąd (łaczy sie z baza, nie wyszukuje danych z bazy i wyświetla:)

Kod
Udalo sie polaczyc z serwerem.
Udało się połączyć z bazą danych.
Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.


A teraz to pragne wyjasnic że napisałem że jestem noobem abyście mnie od razu nie wysmiali i skrytykowali co właśnie uczyniłeś. Nie wiem z jakiej racji masz moderatora ale takimi tekstami nikomu nie pomagasz więc łaskawie proszę zanim się zdenerwuje aby ktoś udzielił mi odpowiedzi na temat albo w ogóle nie pisał głupot bo zgłosze to jako spam do admina Ty modku.
Czuje że dostane bana ale się nie boje, no cóż nie wszędzie zachowanie administracji jest przyjazne w stosunku do użytkownika!

Pozdrawiam
nospor
Cytat
już zmieniłem jak tak Cię to bolało to po primo.
po to jest wlasciwe bbcode, by go uzywac i by inni uzytkownicy mieli ulatwioną analize kodu. bbcode nie jest dla zachciewajki moderatora. Czas to zrozumiec.

Cytat
A teraz to pragne wyjasnic że napisałem że jestem noobem abyście mnie od razu nie wysmiali i skrytykowali co właśnie uczyniłeś
ja rozumiem byc noobem w php czy innym jezyku programowania, ale nie rozumiem jak mozna byc noobem w mysleniu (pomijam tu roznego rodzaju choroby psychiczne). Moim postem nie chcialem cie obrazic, a jedynie dac delikatnie zrozumienia, bys pomyslal troche zanim przedstawisz nam "niesamowity" opis problemu smile.gif

Cytat
ale takimi tekstami nikomu nie pomagasz
Mistrzu, jakbym ja ci tego nie napisal, napisalby ci to kazdy inny na kazdym innym forum. Wrozek nie ma i nikt nie wie jaki masz problem dopoki go nie opiszesz. Poraz kolejny powtarzam - mysl troche....

Co do problemu:
no to ewidentnie nie wypelniles pola o nazwie metoda_szukania oraz wyrazenie. Albo masz cos z formem: wysylasz go getem a nie postem
Lonas
Sprawdz co Ci zwraca tablica $_POST i czy są tam dane odnosnie metody szukania i wyraznia..

  1. <?php
  2. echo'<pre>';
  3. print_r($_POST);
  4. echo'</pre>';
  5. ?>
wookieb
A ja "zwrócę uwagę" na:
  1. <?php
  2. // wykonanie zapytania
  3.  $zapytanie = "select * from tabela where ".$metoda_szukania." like '%".$wyrazenie."%'";
  4.  
  5.  {
  6.    $metoda_szukania = addslashes($metoda_szukania);
  7.    $wyrazenie = addslashes($wyrazenie);
  8.  }
  9. ?>

Najpierw tworzysz zapytanie z parametrami a dopiero potem parametry "zabezpieczasz" przed sql injection.

2 sprawa.
  1. <?php
  2. $wynik = $db->query($zapytanie);
  3. ?>

$db uzywasz jako obiektu. A sprawdz skad masz to db i w manualu do tej funkcji sprawdz czy rzeczywiscie zwraca ci obiekt.
Podejrzewam, ze
a) nie utworzyles egzemplarza obiektu twoej klasy do obslugi bazy danych
cool.gif nadpisales $db
filippopipetto
Dobrze, a może macie inne prostsze rozwiązanie tego tematu, byle żeby wyszukiwało dane z bazy. Jakiś prostszy kod bez tych rzeczy które mogą nie działać w powyższym przykładzie.
wookieb
Kod?
Kod to ja np mam Leonarda Da Vinca.
Mam tez KOTA leonarda da vinci.
Mam tez wiele pomysłów na zycie.
A dla ciebie mam propozycje abys po prostu poprawił swój kod smile.gif
Dostałeś stosowne uwagi i wystarczy się do nich zastosowac i tutaj nie trzeba być PRO smile.gif

// DOWN Jakaś druga część?? exclamation.gif Wyślesz? biggrin.gif
filippopipetto
Dobra panowie jestem kolegą autora topicku i opiszę dokładniej problem, jako że robie z nim ten projekt. Może dacie radę pomoć rolleyes.gif

Baza stoi na serwerze uczelnianym (phpMyAdmin baza MySQL) ma następująca budowę <strukture tabel>:
ID int(11) auto_increment (primary Key)
Numer_sali varchar(5)
Meble varchar(50)
Sprzet varchar(50)
Oprogramowanie varchar(50)


Naszym problemem jest to iż nie do końca działa poniższy KOD, nie wiem czy mamy zdefiniowane wszystkie zawarte tu wyrażnia oraz czy nie można by go jakoś uprościć i zrobić innym sposobem, niekoniecznie takim jak nasz (po czesci skopiowany z ksiazki).

Tak jak mówiliście możliwe jest to iż poszczególne części zawarte w { } są zastosowane nie w tej kolejności co należy (np. jako piersze połączenie, definicja pol wyszukiwania, (...). Zastanawia mnie również czy potrzebne sa:
Kod
$wyrazenie= trim($wyrazenie);

Kod
if (!get_magic_quotes_gpc())
  {
    $metoda_szukania = addslashes($metoda_szukania);
    $wyrazenie = addslashes($wyrazenie);
  }

oraz stripsplashes-y np.
Kod
echo stripslashes($wiersz['Oprogramowanie']);



Obecnie połaczenie działa a następnie wyświetla brak parametrów wyszukiwania, jakby czegoś nie czytał.
Zrobilismy cos podobnego z dodawaniem wpisów do bazy, tamten formularz php nam działa, ten niestety nie!


Proszę o pomoc, rady a najlepiej poprawki w kodzie. Z góry dziekuje i przepraszam za przedmowce! tongue.gif


KOD: (rezultaty.php)
  1. <html>
  2. <head>
  3.  <title>Inwentaryzacja sprzętu w salach</title>
  4. </head>
  5. <body>
  6. <h2>Inwentaryzacja sprzętu - rezultaty wyszukiwania </h2>
  7. <p><h2><a href=" #nasz link# ">Powrót do strony głównej</a></h2></p>
  8. <p><h2><a href=" #nasz link# ">Powrót do wyszukiwania</a></h2></p>
  9.  
  10. <?php
  11.  
  12. $connection = mysql_connect(#nasze połączenie#)
  13. or die('Brak polaczenia z serwerem.<br />Błąd: '.mysql_error());
  14. echo "Udalo sie polaczyc z serwerem.<br />";
  15. $db = mysql_select_db(#nasza baza#', $connection)
  16. or die('Brak połączenia z bazą danych.<br />Błąd: '.mysql_error());
  17. echo "Udało się połączyć z bazą danych.";
  18.  
  19.  // utworzenie krótkich nazw zmiennych
  20.  $metoda_szukania=$_POST['metoda_szukania'];
  21.  $wyrazenie=$_POST['wyrazenie'];
  22.  
  23.  $wyrazenie= trim($wyrazenie);
  24.  $zapytanie = "select * from #nasza tabela# where ".$metoda_szukania." like '%".$wyrazenie."%'";
  25.  
  26.  {
  27.    $metoda_szukania = addslashes($metoda_szukania);
  28.    $wyrazenie = addslashes($wyrazenie);
  29.  }
  30.  
  31.  if (!$metoda_szukania || !$wyrazenie)
  32.  {
  33.     echo '<br>Brak parametrów wyszukiwania. Wróć do poprzedniej strony i spróbuj ponownie.';
  34.     exit;
  35.  }
  36.  
  37.  $wynik = $db->query($zapytanie);
  38.  if (DB::isError($wynik))
  39.  {
  40.    echo $db->getMessage();
  41.    exit;
  42.  }
  43.  
  44.  $ile_znalezionych = $wynik->numRows();
  45.  
  46.  for ($i=0; $i <$ile_znalezionych; $i++)
  47.  {
  48.     $wiersz = $wynik->fetchRow(DB_FETCHMODE_ASSOC);
  49.     echo '<p><strong>'.($i+1).'. Numer_sali: ';
  50.     echo stripslashes($wiersz['Numer_sali']);
  51.     echo '</strong><br />Meble: ';
  52.     echo stripslashes($wiersz['Meble']);
  53.     echo '<br />Sprzet: ';
  54.     echo stripslashes($wiersz['Sprzet']);
  55.     echo '<br />Oprogramowanie: ';
  56.     echo stripslashes($wiersz['Oprogramowanie']);
  57.     echo '</p>';
  58.  }
  59.  $wynik->free();
  60.  $db->close();
  61.  
  62.  $db->disconnect();
  63.  ?>
  64. </body>
  65. </html>
nospor
Cytat
a następnie wyświetla brak parametrów wyszukiwania
no przeciez juz napisalem wczesniej:
no to ewidentnie nie wypelniles pola o nazwie metoda_szukania oraz wyrazenie. Albo masz cos z formem: wysylasz go getem a nie postem

dane te pobierasz w tym kodzie:
  1. <?php
  2. $metoda_szukania=$_POST['metoda_szukania'];
  3. $wyrazenie=$_POST['wyrazenie'];
  4. ?>

i pewnie ich nie ma w $_POST
wookieb
A pokaz kod formularza ktory wysyla dane do "rezultaty.php"
filippopipetto
Dziekuje moderatorze pokombinuje cos z kodem i dodam te POST, napisze jak bedzie jakis postep.

Oto formularz HTML do powyzszego PHP:

Kod
<html>
<head>
<title>Inwentaryzacja sprzętu w salach</title>
</head>
<body>
<h2>Wyszukiwanie sprzętu</h2>
<form action="rezultaty.php" method="post"> Wybierz kryterium wyszukiwania:<br />
<select name="metoda_szukania">
<option value="Numer_sali">Numer sali
<option value="Meble">Meble
<option value="Sprzet">Sprzęt
<option value="Oprogramowanie">Oprogramowanie
</select> <br /><br>
Wprowadź poszukiwane wyrażenie:<br />
<input name="wyrażenie" type="text"> <br /><br> <input type="submit" value="Szukaj">
</form>
<p><h2><a href="#nasz link#">Powrót do strony głównej</a></h2></p>
</body>
</html>


Mam jeszcze jeden drobny problem z znakami polskimi (baza i tabele kodowane sa w UTF8 Polish i pewnie da się jakoś jedną komendą przywołać polskie znaki w HTML typu. charset czy coś, tez prosiłbym o wskazówkę tongue.gif
nospor
Cytat
Dziekuje moderatorze pokombinuje cos z kodem i dodam te POST,
podalem jak na dloni a ten bedzie jeszcze kombinowal.... winksmiley.jpg

nazwa pola w formularzu: wyrażenie
nazwa pola z jakiego pobierasz dane: wyrazenie

wyrażenie
wyrazenie

widzisz drobna roznice? winksmiley.jpg
filippopipetto
Odwołując się do poprzedniej wypowiedzi:

Cytat(nospor @ 2.06.2009, 13:09:38 ) *
dane te pobierasz w tym kodzie:
  1. <?php
  2. $metoda_szukania=$_POST['metoda_szukania'];
  3. $wyrazenie=$_POST['wyrazenie'];
  4. ?>

i pewnie ich nie ma w $_POST


Tak więc mam wszędzie przywoływać tutaj te pole z $_POST czy dopisać $_POST w formularzu HTML? ;>
Czy może mam dopisać jakiś kod w tutaj gdyż nie przywołuje tego co chce pobierać..

Prosiłbym o jakiś przykład, jeśli nie gotowy a mam użyć swej veny tworczej to chciałbym wiedzieć gdzie modyfikować swój kod bo nie rozumiem na 100% co poprawic biggrin.gif
wookieb
Cytat(filippopipetto @ 2.06.2009, 13:36:56 ) *
dopisać $_POST w formularzu HTML? ;>

A po cholere ci to?
0 myslenia...
zamien wyraŻenie na wyrazenie w formularzu
filippopipetto
zmieniłem myślałem że chodzi o coś innego..

Teraz mam coś takiego
Fatal error: Call to a member function query() on a non-object in #ścieżka#/rezultaty.php on line 42
wookieb
Nie czytasz co sie do ciebie pisze.
http://forum.php.pl/index.php?showtopic=12...st&p=614747
I z 10 razy przeczytaj sobie ostatnie zdania.
filippopipetto
czytam co piszesz ale nie jestem tak biegły w php i nie wiem jak temu zaradzić. Czy tak jak napisałeś będę musiał coś utworzyć by zdefiniować $db czy wyedytować je jakoś w tym formularzu i jak to bedzie wyglądać. W skocie znam problem ale nie znam rozwiązania.
wookieb
Wiec skoro wzieliscie ten kod po czesci z ksiazki to w niej tez bedzie o tym pisac.
filippopipetto
ktoś bedzie tak łaskawy i mi powie jak poradzić sobie z tym problemem?
wookieb
Najszybciej bedzie jak wlaczysz byle jaki kurs mysql i php i zobaczysz jak pobierac dane. Wykorzystasz to i bedzie po klopocie. Nie sadze zeby ksiazka podawala kod i 0 wyjasnienia do niego, wiec albo slabo czytanie albo bedziecie sie uczyc od poczatku.
filippopipetto
Tyle że przepisując cały kod z ksiązki Helion, analizując cały dział i czytając objasnienia uzyskuje ten sam błąd a co najlepsze obiekt ten rowniez w ksiazce nie zostal zdefiniowany i objasniony jak to zrobic. Dlatego prosze o pomoc a takim gadaniem o nauce i czytaniu od nowa mi ni pomagasz.. Gdybym wiedział jak to zrobić (z uprzednim zapoznaniem się z zagadnieniem) nie pisałbym tutaj o pomoc.
wookieb
Co to za ksiązka? Podaj tytuł.
Głupotą by było dawanie ksiązki której kod jest nigdzie nie wytłumaczony. Podaj tytuł to ci powiemy gdzie co pisze.
A jeżeli chodzi o porade to ci już napisałem. Pierwszy z brzegu kurs php i mysql załatwi sprawę.
filippopipetto
sądziłem że forum:
Przedszkole
Raczkujesz w tematyce WWW (PHP, SQL, (X)HTML, CSS, JS)? Tutaj możesz stanąć na nogi.
Forum prowadzone przez: Opiekunowie

służy do udzielania pomocy lub próby pomocy, jak jednak widać użytkownicy i moderatorzy wolą nabijać sobie posty zdaniami aby przeczytać sobie książkę niż udzielić sensownej odpowiedzi na podany problem. Do widzenia!
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.