moi mulla olisi sellainen asia että kun mulla on tämän näköinen tietokanta taulukko:
|-------------|-------------|-------------| |etunimi |sukunimi |puhelin | |-------------|-------------|-------------| |esko |esimerkki |442631108 | |essi |esimerkki |442631108 | |-------------|-------------|-------------|
ja tällainen html- haku sivu:
<html> <head> <title>Haku</title> <body> <form action="haku.php" method="post"> Hakusana: <input type="text" name="hakusana" /> <input type="submit" value="hae" /> </form> </body> </html>
niin minkähänlainen pitäisi sitten olla tuon haku.php tiedoston jos haluan että haku hakee etunimen, sukunimen tai puhelinnumeron perusteella kaikki tiedot tietokannasta ja näyttää ne html- sivulla.
Eli jos hakusanaksi laitetaan esko niin se hakee ja näyttää:
esko esimerkki 442631108
Tai jos laitetaan esimerkki niin haun tulos olisi
esko esimerkki 442631108 essi esimerkki 442631108
Kiitoksia kovasti jo etukäteen..
ps. mistähän muuten johtuu että tuohon puhelin numero kohtaan ei tule nollia eteen..
while (list($key, $val) = each($filu))
{
...
}
on nopeampi kuin foreach koska foreach tekee itselleen taulukosta kopion ensin ja käy sen läpi. Näin pienillä taulukoilla ei kyllä ole vitunkaan väliä, mutta jos hakujen tulokset alkaa kasvaa siihen 10 000 riviin niin voi olla eroja jo sekunteja :)
joo emmä taida oikein tajuta mistään mitään mutta ei mun mielestä tossa näy mitään kohtaa missä otetaan esim yhteys mySQL tietokantaan ja siis ton databasen ja tablen nimet on molemmat haku niin pystyisiköhän kukaan kertomaan minkälainen ton php:n pitää olla kun ainakaan noi ylemmät ei toimi jostain syystä..=)
mysql_query("SELECT * FROM taulu WHERE etunimi like '%hakusana%' OR sukunimi like '%hakusana%' OR puhelin like '%hakusana%';");
% toimii lauseessa wildcardina eli sen kohdalla saa olla mitä vain.
lainaus:
joo emmä taida oikein tajuta mistään mitään mutta ei mun mielestä tossa näy mitään kohtaa missä otetaan esim yhteys mySQL tietokantaan ja siis ton databasen ja tablen nimet on molemmat haku niin pystyisiköhän kukaan kertomaan minkälainen ton php:n pitää olla kun ainakaan noi ylemmät ei toimi jostain syystä..=)
Missä helvetin kohdassa puhuit että tietokantasi olisi MySQL pohjainen??
lainaus:
while (list($key, $val) = each($filu))
{
...
}on nopeampi kuin foreach koska foreach tekee itselleen taulukosta kopion ensin ja käy sen läpi. Näin pienillä taulukoilla ei kyllä ole vitunkaan väliä, mutta jos hakujen tulokset alkaa kasvaa siihen 10 000 riviin niin voi olla eroja jo sekunteja :)
eiks tossa ollu eroa jotain 2 millisekuntia per 10000 kierrosta? :)
Mun mielestä foreach on siistimpi ja yksinkertaisempi kuin tuo ihme läjä funktiota :D
no sori etten tajunnut kertoa, mutta voisitkohan auttaa viellä vähän ja kertoa että miten tää nyt sitten toimisi niin että haku menee tietokantaan ja hakee sieltä tiedot ja näyttää ne html sivulla..?
T.M. Kyllä se on enemmän kuin millisekunteja.. joskus heittää sekunnilla kahdella.. se on paljon sivunlatauksessa (Riippuu tietysti palvelimen nopeudestakin)
odyksen antama SQL-kysely pitäisi toimia. Jos PHP:n ja MySQL:n yhdistäminen on uutta, niin lue https://www.ohjelmointiputka.net/oppaat/opas.
No jostain syystä en saa toimimaan.. eli viellä selvennykseksi ettei tule vääriä tietoja niin mulla on mySQL tietokanta johon oon tehhnyt tollasen taulukon joka on mun ekassa viestissä(vähän mutkalla=)) sitten mulla on tuollainen html sivu johon on tarkoitus syöttää hakusana ja sen jälkeen se siirtyy haku.php sivuun jonka tarkoitus olisi hakea kaikki taulukossa olevien tiedot joihin hakusana täsmää eli esimerkiksi: hakusana on esko niin se hakee html sivulle esko esimerkki 442631108 ja jättää näyttämättä tuota essiä, jos taas kirjoitetaan hakusanaksi esimerkki niin sitten sen pitäisi hakea tuolta tietokannasta kaikki joihin esimerkki täsmää eli siis eskon ja essin tiedot..=) Toivottavasti kukaan osaisi auttaa mua tässä vaikka tää selitys puoli ei olekkaan mun parhaita puolia..=)
joo siis mä en huomannutkaan heti tota odyssin vastausta, mä en kuitenkaan oikein osaa laittaa tätä toimimaan, mulla on nyt tämännäköinen pätkä ja se tulostaa taulukon jossa on etunimi | sukunimi | puhelin , mutta se ei osaa tulostaa nimiä sivulle, mitähän tähän pitäisi muuttaa..
<?php //muodostetaan yhteys tietokantapalvelimeen $yhteys = mysql_connect() or die("Yhdistäminen ei onnistunut!"); //valitaan tietokanta "haku" mysql_select_db("haku", $yhteys) or die("Tietokantaa ei löytynyt!"); //tähän tulevat tietokantakyselyt! echo "<html><body>"; //haetaan kaikki tavarat $kysely = "SELECT * FROM haku"; //suoritetaan kysely $haku = mysql_query("SELECT * FROM haku WHERE etunimi like '%hakusana%' OR sukunimi like '%hakusana%' OR puhelin like '%hakusana%';"); echo "<table border>"; echo "<tr><td><b>etunimi</b></td><td><b>sukunimi</b></td><td><b>puhelin</b></td></tr>"; //käydään tavarat läpi for ($i = 0; $i < mysql_num_rows($haku); $i++) { //haetaan nimi, hinta ja määrä muuttujiin $etunimi = mysql_result($haku, $i, "etunimi"); $sukunimi = mysql_result($haku, $i, "sukunimi"); $puhelin = mysql_result($haku, $i, "puhelin"); //tulostetaan taulukon rivi echo "<tr><td>$etunimi</td><td>$sukunimi</td><td>$puhelin</td></tr>"; } echo "</table>"; echo "</body></html>"; //suljetaan yhteys mysql_close($yhteys); ?>
lainaus:
ps. mistähän muuten johtuu että tuohon puhelin numero kohtaan ei tule nollia eteen..
Vaikka aihe on jo vanha, niin vastaan tuohon kohtaan (nähdäkseni kukaan ei ole vielä vastannut tuohon?) eli:
Jos tallennat tietokantaan puhelinnumeroita, niin ne ovat kyllä lukuja ja kaiken järjen mukaan kentän muoto on luku. MUTTA: jos luvuissa esiintyy nollia ennen muita numeroita, niin tietokantojen ominaisuus luku -kentissä on se, että ne ottavat etunollat pois. Ainoa mahdollisuus on siis muuttaa kentän muodoksi esim. teksti (char / varchar) jolloin myös etunollat pysyvät paikallaan.
Tietokantojen perusoppia, mutta erittäin yleinen virhe/tapa kun tehdään tietokantoja joissa on puhelinnumeroita.
Eikö ton saman ongelman korjata lisäämällä eteen vaikka ykkösen ja sitten lukuprosessissa ottaa sen pois?
lainaus:
Eikö ton saman ongelman korjata lisäämällä eteen vaikka ykkösen ja sitten lukuprosessissa ottaa sen pois?
Ei hyvä tapa, koska:
a) tekstimuotoisessa kentässä voit myös käyttää sulkuja suuntanumeron ympärillä (09) 123 4567
b) sekä ryhmitellä numerot kuten edellisessä esimerkissä
c) tai käyttää väliviivaa (joka muuten on "kielletty" virallisissa standardeissa Suomenmaassa)
Yleensäkin tietokantojen peruste on se, että mahdollisimman vähän dataa ja linkitetään. Esim. ei ole järkeä kirjoittaa 100.000 asiakkaan tietokantaan jokaisella kaupunkia erikseen vaan tehdä yksi taulu kaupungeilla ja käyttää asiakastaulussa numeroa joka kuvaa kaupunkia esim. Helsinki = 1 jne. Ja kun nuo kaikki vielä indeksoidaan, niin tietokannoista saavutetaan jotain hyötyäkin.
Mutta tämä meni jo hieman aiheen ulkopuolelle joten tämä tästä...
Aihe on jo aika vanha, joten et voi enää vastata siihen.