Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP Array ja SQL

faaraot [03.02.2016 19:32:23]

#

Ihan lukossa ja ei tunnu vastausta löytyvän :)

Miten saan haettua tiedot seuraavasti.

SQL:ssä on varivaihtoehto sarake. Tallennan sinne esim. arvot 1,3,5,6,7,8

Haluan hakea ne PHP-koodilla vaikka jotenki tähän tyyliin. Tämä ei nyt varmaan ole oikein mutta onnistuuko mitenkään pukata taulukosta noita tietoja helposti?

Sarake varikoodit: 1,2,3,5,7,9

$varihaku="SELECT * FROM tuotteet WHERE tuotenumero = '$tuotenumero'";
$varihakutulos = mysql_query($varihaku, $yhteys);

while($row = mysql_fetch_array($varihakutulos)) {
$varit = array($varikoodit);
echo $varit[0];
echo $varit[2];
}

Metabolix [03.02.2016 19:42:52]

#

Mitähän ihmettä tuolla silmukassasi tapahtuu? Käytät olematonta muuttujaa $varikoodit, laitat sen taulukkoon ja sitten yrität hakea taulukosta jotain ihan muuta.

Sinun pitäisi selvästikin hakea $row-taulukosta tuo yksi sarake ja purkaa se taulukoksi explode-funktiolla.

$varit = explode(",", $row["varivaihtoehto"]);

Monen arvon tallentaminen yhteen sarakkeeseen on riskialtista: Tietokanta ei käsittele tällaista dataa lukulistana vaan tekstinä. Tekstiin on vaikeampi tehdä hakuehtoja kuten vaikka kaikkien punaisten tuotteiden haku. Tietokannassa ole mitään takeita siitä, että arvot olisivat ylipäänsä kelvollisia, vaan värivaihtoehtoina saattaisi lukea vaikka ”mitä tämä on minä en edes” tai ”<script>alert(document.cookie)</script>”, jolloin koodisi saattaa tuottaa ihan outoja tuloksia.

faaraot [03.02.2016 19:50:08]

#

Niin ajatelinkin. Mikähän olisi paras vaihtoehto tälle systeemille. Ajatellaan että on kymmenen tuotetta ja kymmenen väriä ja luonnollisesti kaikkia saa sikinsokin eri väreillä?

Jotain vinkkiä :)

Grez [03.02.2016 19:52:31]

#

Yleensä relaatiotietokannoissa, kun tarvitaan monta-moneen liitosta, käytetään erillistä sidostaulua.

Eli tuotetaulu

1 Pöytä
2 Tuoli

Väritaulu

1 Punainen
2 Vihreä
3 Sininen

TuoteVärit taulu

(Id) Tuote Väri
1    1     1
2    1     2
3    2     1
4    2     3

Metabolix [03.02.2016 19:52:36]

#

Yleinen tapa monta moneen -relaatiossa on laittaa tuotteet (id, nimi, ym) yhteen tauluun, mahdolliset värit (id, nimi) yhteen tauluun ja näiden yhdistelmät (tuote_id, väri_id) kolmanteen tauluun. Hakuja voi sitten tehdä erilaisilla JOIN-kyselyillä.

Vastaus

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

Tietoa sivustosta