Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP: tiedon hakeminen SQL-kannasta

siiri [14.11.2008 11:17:51]

#

Ongelmana on hakea SQL-kannasta ip-osoitetaulukosta määrätyn välin osoitteet. Kun annan välin hakee se myös esim. 13 merkkiset osoitteet vaikka haku on 14 merkkisille. Ohessa koodin pätkä mitä olen tähän käyttänyt.

$query="SELECT Name, IpAddress FROM DeviceConfig WHERE Name LIKE ('$pc%') OR IpAddress BETWEEN '$pc1' AND '$pc2*'AND Status='1'";

'pc1' on osoitteen ensimmäinen merkkijono ja 'pc2' osoitteen toinen merkkijono. Syötetään laatikoihin.'pc%' on taas en jos laatikkoon on laitettu vain koneiden nimen alku. Eli hakee joko nimell tai ip-osoitteella.

Toinen ongelma liittyy tulostamiseen. Eli kun olen tulostanut osoitteet ja nimet

while (odbc_fetch_row($result))

toiminnon kautta taulukkoon rivi kerrallaan, niin haluaisin tulostaa sen jälkeen samaan tauluun esim. pingaukset. Nämä tulisivat omalla toiminnolla eli omaa nappia klikkaamalla. Tässä olen käyttänyt apuna tekstitiedostoa eli ensin kerää tiedot tekstitiedostoon ja sitten nappia painamalla pingaa ja tulostaa tuloksen. Mutta tämä homma pyyhkii edellisen taulukon tyhjäksi. Mikä neuvoksi?

Lebe80 [14.11.2008 12:19:57]

#

miten toi between toimii ip-osoitteissa, tai lähinnä merkkijonoissa?

siiri [14.11.2008 13:05:27]

#

Kun toi alku on ilman *, niin antaa sen ja siitä eteenpäin pc2 ollessa viimeinen merkkijono.
Esim. jos osoitteet haetaan väliltä xxx.xxx.xxx.110 ja xxx.xxx.xxx.122 antaa tulokseksi xxx.xxx.xxx.110, xxx.xxx.xxx.111...xxx.xxx.xxx.122 ja xxx.xxx.xxx.12 Vaikka tuossa yhdessä jonossa on yksi merkki vähemmän, kun halutaan, niin jostain syystä antaa myös sen. En ole onnistunut rajaamaan sitä haussa, että antaisi vain yhtä monta merkkiä olevat jonot kun pyydetään.

Tuota LENGHT määrettä olen yrittänyt, mutta herjaa vain 'Lenght' is not a recognized built-in function name. Yhteytenä kantaan on odbc.

Metabolix [14.11.2008 13:16:34]

#

Kyllä se BETWEEN näyttäisi aivan aakkosellisesti vertailevan. Olettaisin, että "x BETWEEN y AND z" on täsmälleen sama asia kuin "y <= x AND x <= z". Ratkaisuna voisi varmaankin lisätä sitten ehdon LENGTH(IpAddress) = LENGTH('$pc1').

Jälkimmäiseen kysymykseen ei voi vastata kuin että teet jotain perusteellisesti väärin. Tietenkään taulua ei näy seuraavalla sivunlatauksella, jos et silloin sitä tulosta, ja jos taas tulostat, niin se varmasti myös näkyy.

Blaze [14.11.2008 13:39:04]

#

siiri kirjoitti:

Tuota LENGHT määrettä olen yrittänyt, mutta herjaa vain 'Lenght' is not a recognized built-in function name. Yhteytenä kantaan on odbc.

LENGHT != LENGTH

Jälkimmäinen siis oikein.

siiri [14.11.2008 13:43:54]

#

Valitan, mutta herjaa vaikka mitenpäin kirjoitan. Olin jo helpottunut, kun kuvittelin, että se olisi ollut väärin vain kirjoitettu ;(

Niin arvelinkin, että teen jotain väärin. Eli oikea ratkaisu taitaa olla 'ping'napista uuden ping.phpn avaaminen jossa on sitten toiminnot. Mutta miten sen saan avautumaan vanhan taulukon lisukkeeksi? Siis ilman, että ajan alkuperäisen taulukon uudelleen?

siiri [21.11.2008 08:29:56]

#

Vihdoin tuo merkkien määrä ongelmaan löytyi ratkaisu. Eli periaatteessahan on kyse ihan normaalista sql-kyselystä. Ja siellä taasen tuon pitudden määrittely tapahtuu LEN()avulla.

Mutta tuo toinen eli se taulukko on vielä vailla ratkaisua, vaikka kuinka ahkerasti googletan. Tietty ratkaisu on lian yksinkertainen ja siksi ei tule mieleen ;)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta