huomenta,
Olen etsiskellyt yksinkertaista mallia miten saisin otettua mysql-kannan taulusta tietueiden tiedot comboboxiin valittavaksi edelleen. Eipä ole oikein ollut onnea etsinnässä. Voisiko joku ystävällisesti avittaa? Alla form, johonka tiedot pitäisi tuoda ja siellä kohtaan "Status". Kannassa on siis taulu, jossa kentät number ja name ja niiden sisältö pitäisi saada boxiin näkyviin ja edelleen siitä etsi.php scriptin käyttöön tietokantahakua varten.
<form method="post" action="etsi.php"> <table border="1"> <tr> <td>Hakusanat</td> <td><input type="text" size="40" name="hakusanat" maxlength="40" /></td> </tr> <tr> <td>Vuosi</td> <td><select name="aika"> <option value="Valitse">Valitse</option> <option value="1920">1920</option> <option value="1930">1930</option> <option value="1940">1940</option> <option value="1950">1950</option> <option value="1960">1960</option> <option value="1970">1970</option> <option value="1980">1980</option> </select><br /></td> </tr> <tr> <td>Tyyppi</td> <td><select name="tyyppi"> <option value="Valitse">Valitse</option> <option value="10">Valokuva</option> <option value="20">Esine</option> </select><br /></td> </tr> <tr> <td>Status</td> <td><select name="status"> <option value="Valitse">Valitse</option> <option value="10">Sisäkuvat</option> <option value="20">Ulkokuvat</option> <option value="30">Muotokuvat</option> <option value="40">Mustavalko</option> </select><br /></td> </tr> <tr> <td><input type="submit" name="submit" value="Hae" /></td> <td><input type="reset" name="reset" value="Tyhjennä" /></td> </tr> </table> </form>
Miten olet yrittänyt? Hae tietokannasta tarvittavat tiedot ja tulosta ne silmukassa samaan tyyliin, kuin tuohonkin olet käsin kirjoittanut.
trilog kirjoitti:
Miten olet yrittänyt? Hae tietokannasta tarvittavat tiedot ja tulosta ne silmukassa samaan tyyliin, kuin tuohonkin olet käsin kirjoittanut.
this way...
<tr> require "/xxxx/yyyy/zzzz/funktiot.php"; $yhteys = AvaaTietokanta(); $sql="Select NUMBER, NAME, ID from STATUS"; $query=mysql_query($sql, $yhteys); $result=mysql_fetch_array($query); <td>Status</td> <td><SELECT Name="Status"> <?php do { printf("<option value=\"%s\">%s %s</option>", $result[id], $result[NUMBER], $result[NAME]); } while ($result = mysql_fetch_array($query)); ?> </SELECT><br /> </td> </tr>
Funktio mysql_fetch_array palauttaa tulokset (assosiatiivisessa) taulukossa. Taulukon alkioihin pääsee käsiksi tietokannan taulun kenttien nimillä tai indekseillä, tässä tapauksessa molemmilla. Taulukkoja käsitellään PHP-oppaan toisessa osassa.
Taulukon indeksit kuuluvat lainausmerkkeihin ("NUMBER" ym.), ja ID kuuluisi kyselyn mukaan olla isolla. Funktio mysql_fetch_array palauttaa arvot sekä numeerisilla että teksti-indekseillä, ellet anna toiseksi parametriksi arvoa MYSQL_ASSOC. Minusta selkeämpää olisi käyttää funktiota mysql_fetch_assoc, kun kerran sellainenkin on. Voisit myös kääntää while-silmukan toisin päin, jolloin sitä edeltävää fetch-riviä ei tarvita. Lisäksi kannattaisi käyttää printf:n kanssa 'hipsuja', jottei tarvitse kikkailla kenoviivoja lainausmerkkien eteen.
kiitos vinkeistä metabolix! en löydä koodista virhettä. validaattorista menee läpi, mutta data ei nouse kannasta boxiin??
<tr> <?php require "...../funktiot.php"; $yhteys = AvaaTietokanta(); $sql = "Select NUMBER, NAME, ID from STATUS"; $query = mysql_query($sql, $yhteys); $result = mysql_fetch_array($query); ?> <td>Statuskoodi</td> <td><select name="Status"> <?php do { printf("<option value=\"%s\">%s %s</option>", $result["ID"], $result["NUMBER"], $result["NAME"]); } while ($result = mysql_fetch_array($query)); ?> </select><br /></td> </tr>
Onko kannassa tarpeellinen data ja onnistuuko kantaan kytkeytyminen? Ja et kääntänyt while-silmukkaa toisin päin.
kanta on ok ja kytkeytyy siihen myös..antaa seuraavan herjan:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in.........
Tuo tarkoittaa, että annoit mysql_fetch_array()-funktiolle argumentin, joka ei ollut kyselyn tulos. Toisin sanoen, kyselysi (mysql_query) ei palauttanut tulosta vaan FALSEn jonkin virheen takia.
Kokeile:
<?php require "...../funktiot.php"; $yhteys = AvaaTietokanta(); $sql = "Select NUMBER, NAME, ID from STATUS"; $result = mysql_query($sql, $yhteys); if (!$result) { die('Virheellinen kysely: ' . mysql_error()); } $row = mysql_fetch_array($result); ?>
Edit: Vaihdoin muuttujien nimiä paremmiksi.
kertoo: Virheellinen kysely: Table '.......STATUS' doesn't exist.
taulu on kannassa ja siellä on dataa ja saan toisella ohjelmalla datan selaimen taulukkoon?
Tuo tarkoittaisi, että tuon nimistä taulua ei ole. Miksi olet lisännyt sinne pisteitä?
pisteet nåppihäiriö tässä ja eivät ole taulun nimessä ja taulu on olemassa :-)
Voisiko se johtua siitä, että AvaaTietokanta() -funktio ei valitse käytettävää tietokantaa? Eli tuo koittaisi hakea tuon nimisestä tietokannasta tavaraa, eikä sen alla olevasta taulusta.
vielä kerran pojat...tässä uusi toimiva yritys. voisiko sen tehdä fiksummin?
<tr> <td>statuskoodi</td> <td><select name="status"> <option value="Valitse">Valitse</option> <?php // Avataan tietokantayhteydet require "/xxxx/yyyy/zzzz/funktiot.php"; $yhteys = AvaaTietokanta(); $kaikki = "SELECT ID, NUMBER, NAME FROM status"; $result = mysql_query($kaikki); while ($row = mysql_fetch_array($result)) { print "<option value = $row[1] > $row[1] $row[2]"; } ?> </select><br /></td> </tr>
validaattori herjaa vielä:
Line 64, Column 17: an attribute value specification must be an attribute value literal unless SHORTTAG YES is specified
<option value = 10 > 10 Koulu<option value = 20 > 20 Kirkko<option value = 30…
Optionissa on pari vikaa: =-merkin ympärillä ei pitäisi käyttää välilyöntejä, ja ainakin XHTML:ssä tämä on yksiselitteisesti virhe. Option-tagi olisi syytä myös sulkea. NAME kannattaisi ajaa htmlspecialchars-funktion läpi, jos on pienikin mahdollisuus, että se saattaisi sisältää merkkejä <, > tai &. Lisäksi aiemmassa koodissasi value oli ID eikä NUMBER, muutitko tämän tarkoituksella?
Itse tulostaisin optionin siis näin:
printf('<option value="%d">%d: %s</option>', $row["ID"], $row["NUMBER"], htmlspecialchars($row["NAME"]));
Ylimmän optionin arvoksi olisi viisainta laittaa esimerkiksi 0 tai tyhjä teksti; muiden tekstien tarpeeton käyttö koodin puolella on tyylitöntä.
vielä pitää tyhmän kysyä seuraavaa: miten saan alla olevan lähettämääm kentän 'number' eikä kentää 'id' valittaessa?
<?php // Avataan tietokantayhteydet require "/..../..../..../funktiot.php"; $yhteys = AvaaTietokanta(); $kaikki = "SELECT ID, NUMBER, NAME FROM status"; $result = mysql_query($kaikki); while ($row = mysql_fetch_array($result)) { printf('<option value="%d">%d: %s</option>', $row["ID"], $row["NUMBER"], htmlspecialchars($row["NAME"])); } ?>
volume kirjoitti:
huomenta,
Olen etsiskellyt yksinkertaista mallia miten saisin otettua mysql-kannan taulusta tietueiden tiedot comboboxiin valittavaksi edelleen.
Tuolta löytyy yksi esimerkki:
volume kirjoitti:
vielä pitää tyhmän kysyä seuraavaa: miten saan alla olevan lähettämääm kentän 'number' eikä kentää 'id' valittaessa?
Haluat siis optionin valueksi 'number' etkä 'id'? Vaihdat vain printf-riviltä $row["id"] > $row["number"] .
juu vaihtamalla id:n ja number:n keskenään saan toki lähtemään numberin:n mutta silloin comboboxissa näkyy id-arvo. haluaisin myös täällä näyttää nimenomaan number:ia.
tavoite olisi siis se, että combo näyttää number ja name sekä lähettää eteenpäin number.
Miksi sitten vaihdoit ne keskenään etkä vain laittanut molempiin NUMBERia?
helkutin hyvä vastaus....nyt selvis tää funkkarin logiikka :-)
Aihe on jo aika vanha, joten et voi enää vastata siihen.