Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL + PHP hakutulosongelma

jannek [15.12.2007 13:42:04]

#

Eli ongelma on seuraavanlainen:

Minulla on tietokannassa nimiä, joita minun pitäisi hakea PHP:n avulla ja muuttaa "näkyvää" arvoa vaikka niin, että nimestä pekka tulee vaikka pekkahihi jne.

Tällähetkellä koodi menee tähän tyyliin:
.....
while ($rivi = mysql_fetch_object($haku)) {
//haetaan nimi, hinta ja määrä muuttujiin
$nimi = $rivi->nimi;
$hinta = $rivi->hinta;
$maara = $rivi->maara;
//tulostetaan taulukon rivi
echo "<tr><td>$nimi</td><td>$hinta €</td><td>$maara kpl</td></tr>";
....

Kuvittelin, että ennen taulun tulostamista listätään tyyliin:

if ($nimi=pekka)
$nimi=pekkahihi;
elseif ($nimi=matti)
$nimi=mattihaha;
jne jne jne...

... Mutta jos näin tekee, niin kaikkien samassa rivissä olevien arvoksi tulee pekkahihi.

Mikä ratkaisuksi ?

jlaire [15.12.2007 13:45:17]

#

Vertailussa käytetään kahta (tai kolmea) =-merkkiä.

if ($nimi == "pekka")
    $nimi = "pekkahihi";

// jne.

tsuriga [15.12.2007 14:04:09]

#

Ja kun tiedetään sieltä tulevan stringiä niin sama vertailla tarkasti, ===. On hyvä myös dokumentoinnin kannalta.

ajv [15.12.2007 14:36:51]

#

Itse en kyllä tuosta "vahvasta" vertailusta pidä ja käytän vain kun on pakko (eli kun funktio voi palauttaa nollan ja falsen). PHP:ssä kun ei muuttujia muutenkaan tyypitetä, niin tuo vain sekoittaa koodia. Periaatteessa pitäisi aina ennen vertailua tarkastaa onko muuttuja sen tyyppinen kun halutaan. Ja se on kääntäjän/tulkin hommia imo.

tsuriga [15.12.2007 15:00:40]

#

Kyllä miusta vaan on selkeämpi lukea vertailuja, joissa vertaillaan tarkasti. Esim.

<?php
if ( $stats )
?>

Tuon toimintaa olisi paljon helpompi seurata, jos tuossakin käytettäisiin tarkkaa vertailua - seuraava kehittäjä näkisi heti, että mitä $stats mahdollisesti sisältää. Ärsyttävä lähteä muokkaamaan noita kun saat etsiä $stats-muuttujan määrittelyä sen tuhannesta tiedostosta. Dokumentointi tietysti auttaa, mutta self-documenting code on pop. Toisekseen, tarkalla vertailulla ei pääse tapahtumaan sellaisia kämmejä, että joku ehto vääntyykin vahingossa halutusta päinvastaiseksi, esim.

<?php
$username = "0";
// tutkitaan, onko username asetettu
if ( $username ) # Eipä päästäkään tänne
?>

Joidenkin funktioiden kanssahan pitääkin juuri tämän takia muistaa käyttää vahvaa vertailua (array_search yms.) (tämä toki mainittiinkin yllä). Ja sitten, kun tiedetään, mitä tyyppiä muuttuja on, käytetään heikosti vertaillessa turhaa aikaa sellaisten vaihtoehtojen, joiden tiedetään olevan epätosia, tutkimiseen. Enkä toki unohda mainita, että tarkka vertailu on myös nopeampi :).

ajv [15.12.2007 15:12:05]

#

Myönnettäköön todeksi nuo argumenttisi. Nopeudesta täytyy kyllä sanoa sen verran, että kuinkakohan monta miljoonaa vartailua täytyy koodissa tehdä, että tuolla vahvalla vertailulla saavutetaan ero, joka voidaan saada aikaan jättämättä yksi tietokantahaku väliin :)

Valitettavaa myöntää, että kun itse väännän php-koodia, en tee sitä tuntityönä, vaan urakkana. Tällöin en kuluta aikaa "turhuuksiin" vaan teen asiat suoraviivaisesti. Jos taas koodaan tuntiliksalla PHP:tä, se on useimmiten jo valmiin softan puukottamista, ja kaikki tähän asti vastaan tulleet softat on kyllä kaikkea muuta kuin "täydellistä" koodia.

jannek [17.12.2007 15:31:01]

#

Nyt toimii kun lisäsin == :). Tällä tulee toimeen aluksi. Kiitos.

Vastaus

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

Tietoa sivustosta