funkcje w PHP

0

Witam, chce napisac prosty formularz wyszukiwania (PHP+HTML) ktory laczac sie z baza danych mysql na localhoscie da odpowiednie wyniki.Oto moje pliki:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>formularz</title>
</head>

<body>
<form  action="rezultaty.php" method="post">
<select  name="metoda_szukania">
 	<option  value="imie">Imie</option>
 	<option  value="nazwisko">Nazwisko</option>
</select>
<br  />
Wprowadz poszukiwane wyrazenie:
<input  name="wyrazenie" type="text" size="40">
<br  />
<input type="submit" name="submit" value="szukaj">
</form>

</body>
</html>

a tu plik z rezultatami:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>wynik wyszukiwania</title>
</head>

<body>
<?php 
$metoda_szukania=$_POST['metoda_szukania'];
$wyrazenie = trim($_POST['wyrazenie']);

$wyrazenie = trim($wyrazenie);

if(!get_magic_quotes_gpc())
{
  $metoda_szukania = addslashes($metoda_szukania);
  $wyrazenie = addslashes($wyrazenie);
  
}
@ $db = new mysqli('localhost','root','qwerty','wiezienie');
if(mysqli_connect_errno())
{
  echo "Blad polaczenia";
  exit;
}

$zapytanie = "select * from wiezienie where".$metoda_szukania."like '%".$wyrazenie."%'";
$wynik = mysqli_query($db,$zapytanie);
$ile_znalezionych = mysqli_num_rows($wynik);

for($i=0;$i<$ile_znalezionych;$i++)
{
  $wiersz = mysqli_fetch_assoc($wynik);
  echo "<p><strong>".($i+1);
  echo stripslashes($wiersz['imie']);
  echo "</strong><br />";
  echo stripslashes($wiersz['nazwisko']);
  echo "</strong><br />";
  echo stripslashes($wiersz['nr_celi']);
  echo "</p>";
}

mysqli_free_result($wynik);
mysqli_close($db);

?>



</body>
</html> 

Pojawiaja mi sie błędy w linijkach z funkcjami:
mysqli_free_result($wynik);
Oraz
$ile_znalezionych = mysqli_num_rows($wynik);
Dokladna tresc jest taka:

 Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\rezultaty.php on line 30

Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\rezultaty.php on line 44

Co jest nie tak? Korzystam z xamppa w wersji 1.7.4
Z gory dziekuje za pomoc.

2

Dlaczego nie poczytasz dokumentacji.

W przypadku zapytania select mysqli_query powinno zwrócić obiekt z wynikami, chyba, że masz błąd w zapytaniu. Jak widzisz masz, bo dostałeś bool, można się domyślać, że false.

W zapytaniu jest oczywiście błąd, bo nie masz spacji tam gdzie powinny się one znaleźć.

0

Pobawiłem się troche. Wiele poszło do przodu i teraz moim jedynym problemem jest zapytanie. Oto kod:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
      <title>test bd</title>
</head>

<body>
<?php 
$metoda_szukania=$_POST['metoda_szukania'];
$wyrazenie = trim($_POST['wyrazenie']);

$link = mysql_connect('localhost','root','qwerty');
if(!$link)
{
  die('Nie mozna sie polaczyc: '.mysql_error());
}
echo 'Połączenie nawiazane';
$db_selected = mysql_select_db('wiezienie', $link);
if (!$db_selected) {
    die ('Nie można ustawić wiezienie : ' . mysql_error());
}
//$result = mysql_query('SELECT * FROM wiezniowie WHERE '.$metoda_szukania.' LIKE '%".$wyrazenie."%'',$link) 
$result = mysql_query('SELECT * FROM wiezniowie WHERE nazwisko="Jelonek"',$link)
or die("Zapytanie niepoprawne");
$num_rows = mysql_num_rows($result);
echo "\n $num_rows wierszy\n";

for($i=0;$i < $num_rows;$i++)
{
  $wiersz = mysql_fetch_assoc($result);
  echo $wiersz['imie'];
  echo $wiersz['nazwisko'];
  echo '<br />';
}
/*while ($row = mysql_fetch_assoc($result)) {
    echo $row["imie"];
    echo $row["nazwisko"];
}*/
mysql_free_result($result);


?>



</body>
</html> 

Nie dzial mi zapytanie ktore jest w '//'. Nie wiem jak te dwie zmienne z formularza tam umiescic..

1
$result = mysql_query('SELECT * FROM wiezniowie WHERE '.$metoda_szukania.' LIKE "%'.$wyrazenie.'%"', $link);

Trochę pomieszałeś z apostrofami. Szukanie LIKE %sth% jest bez sensu bo nie ma za bardzo jak tego zoptymalizować. Użyj składni fulltexta. Dodatkowo zabezpiecz wartość zmiennych $metoda_szukania i $wyrazenie - możliwy jest atak SQL Injection.

0

Dziękuję za pomoc i uwagi ;-)

0

Te zapytania mnie wykoncza, teraz mam problem z insert. Tu sa dwie wersje kodu, ktore wydaja mi sie ok, a jednak tak nie jest.

$zapytanie = "INSERT INTO `wiezienie`.`cela` (`nr_celi`, `ilosc_miejsc`, `nr_strefy`) VALUES ('"$nr_celi"', '"$ilosc_miejsc"', '"$nr_strefy"')"
$wynik = mysql_query($zapytanie,$link); 
$zapytanie = mysql_query('INSERT INTO cela VALUES('$nr_celi', '$ilosc_miejsc', '$nr_strefy')') 

caly czas mam blad kodu w linijkach z zapytaniem wlasnie.. Probowalem roznych wersji ze spacjami itd i poki co nie trafilem na działającą. Proszę o pomoc..

1

Nie cuduj tylko poczytaj o kontentacji stringów.
http://pl.php.net/manual/en/language.types.string.php

Streszczenie:

$x = 1;
$y = 2;

$something = 'Masz ' . $x . ' szt. jabłek i ' . $y . ' szt. ogórków';

Klei się za pomocą kropki.

1
$zapytanie = "INSERT INTO `wiezienie`.`cela` (`nr_celi`, `ilosc_miejsc`, `nr_strefy`) VALUES ('"$nr_celi"', '"$ilosc_miejsc"', '"$nr_strefy"')"

Tak nie łączy się stringów.

$zapytanie = "INSERT INTO `wiezienie`.`cela` (`nr_celi`, `ilosc_miejsc`, `nr_strefy`) VALUES ('".$nr_celi."', '".$ilosc_miejsc."', '".$nr_strefy."')"
0

dzięki ;) potem to sprawdzę czy lata ;) Wiem jak łączy się stringi, ale nie wiedziałem,ze tu trzeba to zrobić. Myślałem,że wypisuje po prostu osobne obiekty itd A mam jescze takie pytanie - Mam tabele w bazie z danymi osób. I chciałbym zrobic to w ten sposób,że jezeli usuwam jakąś osobe to nie usunę całego rekordu - tylko w ostatnim polu o nazwie czy_usuniety typu bool bedzie true albo false. Oczywiscie to nie problem zmienic to w formularzu, jednak czy jest potem mozliwosc wyswietlania takiej bazy, gdzie rekordy z true beda wyswietlane, a te z false ukryte? Wystarczy do tego zwykły IF ?

0

do zapytania dodaj WHERE czy_usuniety = true
(ale to wywali wszystkie usunięte rekordy; zgodnie z Twoim postem).

0

Właśnie chodzilo o to żeby nie usunąc, tylko ukryc. Zeby potem przy wyswietlaniu rekordow z bazy danych ten był pominięty i nie wyświetlony ;)

0

Źle się wyraziłem, mówiąc 'wywali' miałem na myśli 'wyświetli', czy co tam będziesz z nimi robił ;)

0

Mam do Was, moi eksperci kolejne pytanie ;) mam dwie tabele - 'cele' oraz 'wiezniowie' . I tabele te polaczone sa relacja nr_celi -> nr_celi. Tworze interfejs do obslugi takiej bazy danych i mam taki problem - w tabeli wiezniowie moge dodac wieznia i wstawic nr_celi = 500. Mimo,że takiego numeru w tabeli 'cele' nie ma to i tak zapytanie jest poprawne. Jak to zmienic ?

I jeszcze cos odnosnie html. Mam plik style.css gdzie mam zapisany styl menu wraz z jego polozenie. Wchodzac na strone glowna wszystko jest ok(na gorze obrazek, nizej menu) - przechodzac do jakiejs podstrony wszystko mi sie rozlatuje - menu jest na miejscu obrazka, a obrazek ucieka na prawa czesc monitora - wystarczy ze odswieze okno przegladarki i juz jest dobrze. Jak to zrobic zeby nie trzeba bylo odswiezac ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1