Sql zapytanie pobierające dane z kilku pól tej samej tabeli


(Imysz01) #1

Witam. Mam taką tabelę w bazie:

id (primary key)

imie

nazwisko

numer

mam zrobiony formularzyk tego typu:

jak teraz ułożyć zapytanie do bazy aby np. po wpisaniu numeru pokazało się imię i nazwisko, lub po wpisaniu nazwiska pokazał się numer. Chodzi mi o to żeby sprawdzić tą zmienną $dane dla wszystkich pól w jednym zapytaniu. Da radę tak?


(kostek135) #2

mysql_query('SELECT * FROM tabela WHERE id = ' . $dane . ' OR imie = "' . $dane . '" OR nazwisko = "' . $dane . '" OR numer = '. $dane)

Oczywiście najlepiej to zabezpieczyć podejrzewam, że id i numer są typu integer tak więc intval() powinno "styknąć", a dla string mysql_real_escape_string

[EDIT] Doszedłem do wniosku ze rzut na integer może mieć jedno wąskie gardło przykładowo intval('12sa') da 12, co z kolei poza hasłem zwróci osobę o id = 12 i tych co mają numer 12, więc aby je wyeliminować można dać coś takiego

if(is_numeric($dane))

{

   mysql_query('SELECT * FROM tabela WHERE id = ' . $dane . ' OR imie = "' . $dane . '" OR nazwisko = "' . $dane . '" OR numer = '. $dane)

}

else

{

   mysql_query('SELECT * FROM tabela WHERE imie = "' . $dane . '" OR nazwisko = "' . $dane . '"')

}

Oczywiście też trzeba zabezpieczyć.


(Imysz01) #3

no okej, ale pojawia się teraz błąd przy próbie wyświetlenia danych robię to w ten sposób:

$a=mysql_query('SELECT imie FROM indeksy WHERE imie = "' . $dane . '" OR nazwisko = "' . $dane . '" OR numer = '. $dane);




       while($array=mysql_fetch_assoc($a))

       {

       echo $array['imie'];

       echo ' ';

       echo $array['nazwisko'];

       }

i jest błąd:


(kostek135) #4

Pokaż cały kod, z jakiegoś powodu zapytanie zwróciło ci false, a mysql_fetch_assoc() nie może przyjmować boolean jako parametru.

[EDIT]

Poza tym robisz jedną rzecz źle w swoim kodzie (ale i tak daj kod do analizy, bo to raczej nie jest wina tego - tylko potem będą wyskakiwać błędy)

$a=mysql_query('SELECT imie FROM indeksy WHERE imie = "' . $dane . '" OR nazwisko = "' . $dane . '" OR numer = '. $dane);

while($array=mysql_fetch_assoc($a))

{

echo $array['imie'];

echo ' ';

echo $array['nazwisko'];

}

Podkreśliłem błąd, wybierasz tylko kolumnę imię, a chcesz wyświetlić nazwisko?


(Imysz01) #5

to wiem, że źle bo próbowałem kombinować i wkleiłem przez przypadek ten kod po modyfikacjach.

php:

<?php


$db = mysql_connect('localhost', 'user', 'haslo');

       mysql_query("SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");                        

       mysql_select_db('indeksy');


       $dane =$_POST['dane'];


       $zapytanie="SELECT * FROM tabela WHERE imie = $dane OR nazwisko = $dane OR numer = $dane ";


       $rez=mysql_query($zapytanie);


        mysql_num_rows($rez);

        {

        $rez['numer'];

        }



?>

formularz wyszukiwania:

tabela w bazie:

CREATE TABLE IF NOT EXISTS `dane` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `imie` varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,

  `nazwisko` varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,

  `indeks` varchar(100) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=ucs2 COLLATE=ucs2_polish_ci AUTO_INCREMENT=73 ;

(kostek135) #6
mysql_num_rows($rez);

{

      $rez['numer'];

}

Nie bardzo ogarniam czemu to służy? Tu masz wyjaśnione jak korzystać http://php.net/manual/en/function.mysql-num-rows.phpI nawiązując do tabeli jaką stworzyłeś:

CREATE TABLE IF NOT EXISTS `dane`

$zapytanie="SELECT * FROM tabela WHERE imie = $dane OR nazwisko = $dane OR numer = $dane ";

wybierasz dane nie z tej tabeli co trzeba.