Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mysql ja combobox

Sivun loppuun

volume [10.12.2010 09:05:07]

#

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&auml;" /></td>
    </tr>
  </table>
</form>

trilog [10.12.2010 10:16:05]

#

Miten olet yrittänyt? Hae tietokannasta tarvittavat tiedot ja tulosta ne silmukassa samaan tyyliin, kuin tuohonkin olet käsin kirjoittanut.

volume [10.12.2010 12:46:41]

#

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>

trilog [10.12.2010 13:02:38]

#

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.

Metabolix [10.12.2010 13:09:17]

#

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.

volume [10.12.2010 23:05:45]

#

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>

Jaska [11.12.2010 00:16:03]

#

Onko kannassa tarpeellinen data ja onnistuuko kantaan kytkeytyminen? Ja et kääntänyt while-silmukkaa toisin päin.

volume [11.12.2010 10:44:28]

#

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.........

Chiman [11.12.2010 10:56:33]

#

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.

volume [11.12.2010 11:05:36]

#

kertoo: Virheellinen kysely: Table '.......STATUS' doesn't exist.

taulu on kannassa ja siellä on dataa ja saan toisella ohjelmalla datan selaimen taulukkoon?

Macro [11.12.2010 11:21:08]

#

Tuo tarkoittaisi, että tuon nimistä taulua ei ole. Miksi olet lisännyt sinne pisteitä?

volume [11.12.2010 11:22:59]

#

pisteet nåppihäiriö tässä ja eivät ole taulun nimessä ja taulu on olemassa :-)

Macro [11.12.2010 11:27:59]

#

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.

volume [11.12.2010 19:05:56]

#

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…

Metabolix [11.12.2010 19:13:26]

#

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ä.

volume [14.12.2010 14:50:15]

#

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"]));

                        }

?>

kasetti [14.12.2010 15:06:25]

#

volume kirjoitti:

huomenta,

Olen etsiskellyt yksinkertaista mallia miten saisin otettua mysql-kannan taulusta tietueiden tiedot comboboxiin valittavaksi edelleen.

Tuolta löytyy yksi esimerkki:

http://kasetti.info/code/valintalista2.php

-tossu- [14.12.2010 15:09:56]

#

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"] .

volume [14.12.2010 15:22:41]

#

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.

Metabolix [14.12.2010 15:29:48]

#

Miksi sitten vaihdoit ne keskenään etkä vain laittanut molempiin NUMBERia?

volume [14.12.2010 15:38:29]

#

helkutin hyvä vastaus....nyt selvis tää funkkarin logiikka :-)


Sivun alkuun

Vastaus

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

Tietoa sivustosta