Hallo iedereen,

Ik heb een vraag omtrent een form waarden. Wanneer ik een waarde wil doorsturen naar het verwerkingsscript dan lijkt het er op als of ik dit maar met een tegelijk kan doen. Wat ik graag wil bereiken is om meerdere waarden tegelijk te versturen zodat deze correct in de database terecht komen. Het gaat hier bij om de "name" waarden die het formulier mee stuurt. Ik zal een voorbeeld geven.

<select name="value">
<option value="waarden-van-database1">waarden-van-database2</option>
</select>

Ik probeer beide waarden van option in de database te krijgen maar het ziet er naar uit dat alleen de "name" waarde word opgeslagen terwijl ik beide waarden zou willen opslaan. Is dit uberhaupt wel mogelijk?

Enige input om het leerproces te vergemakkelijken is zeer welkom en wil ik graag voor bedanken.
De select heeft een name en de option heeft een value.
Hetgeen jij selecteert wordt meegestuurd met het formulier en is op te vragen met de name.

Waar haal jij die tweede waarde dan vandaan?
Dank je wel voor het reageren :-)

Ik haal beide waarde uit de database. De tweede waarde is een naam (als in leesbaar) en de eerste is een getal (id) die bij die naam hoort. Op deze manier kan ik een naam selecteren (met overeenkomstige id) om die weer in de database te stoppen. Als ik dan de pagina oproept om de gegevens te herzien dan zie ik de gegevens die bij die ID horen.
En wat is nou het probleem want ik volg het volgens mij niet helemaal meer.
Klaas Vaag op 31/08/2015 13:58:14
Ik haal beide waarde uit de database.

<knip>

Als ik dan de pagina oproept om de gegevens te herzien dan zie ik de gegevens die bij die ID horen.


Je draagt zelf al de oplossing aan: druk de waarde bij dat ID af?

Of het moet echt de bedoeling zijn dat je meerdere waarden (IDs) opslaat - in dat geval moet je een soort van multiselect maken.

Nota bene: Je hebt als het ware een "interne waarde" voor opslag en een "externe waarde" (label) voor weergave. Het voordeel van het opslaan van zo'n interne waarde in plaats van een explicitiete externe waarde is dat je dan nog steeds het label kunt veranderen zonder dat je verder iets in je database hoeft aan te passen. Dat zou anders zijn als je alles aan labels zou ophangen.
Thomas van den Heuvel op 31/08/2015 14:16:48

[quote="Klaas Vaag op 31/08/2015 13:58:14"]Ik haal beide waarde uit de database.

<knip>

Als ik dan de pagina oproept om de gegevens te herzien dan zie ik de gegevens die bij die ID horen.


Je draagt zelf al de oplossing aan: druk de waarde bij dat ID af?

[/quote]

Nee, totaal niet. Als ik een print_r($_POST); doe dan komt de ID niet mee, wel de naam zoals weergegeven in de <select name=""> maar niet de ID die bij de naam hoort.

Ik lees ook dingen als een array, werkt dit ook bij een select veld?
hmm hmm data-integriteit

Waar komt het lijstje met options vandaan? (uit de database?)
Wat ga je doen met de gekozen option? (wegschrijven naar de database?)

1. zorg dat de database tabel een kolom met een unique id heeft.
2. geef de aan de value tag het unique id mee
3. na submit kun je aan de hand van het unique id weer alle relavante informatie uit de database halen met

SELECT * FROM tabelnaam WHERE id=??
Dit is het select veld. Wat het doet is de namen laten zien (db_column2) terwijl de waarde de ID is waar die naam bij hoort (db_column1).

Als je bijvoorbeeld een database met bedrijven hebt dan heb je als naam bedrijf A met daaraan een ID voor de database. Indien er een document binnen komt en je registreert deze dan wil je het bedrijf met ID bij dat doucment hebben.

<select name="value">
<option value="1">Niet opgegeven</option>
<option value="#">&nbsp;</option>
<?php
$sql = <<<SQL
SELECT *
FROM table
SQL;

if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}

while($row = $result->fetch_assoc()){

?>
//Added Id for Options Element
<option value="<?php echo $row['db_column1']; ?>"><?php echo $row['db_column2']; ?></option><!--Echo out options-->
<?php
}
?>
</select>

In dit geval word alleen de value (db_column1) meegegeven maar niet de andere waarde. En zoals ik al eerder vroeg, zou dit ook met een array kunnen? Ik weet dat het kan met input type checkbox maar geldt dit ook voor select?

@frank: de ID is uniek en autoincrement.
Nee dat gaat dus niet, en dat is ook de reden dat ik hamer op een unique id die je na het POSTEN van het formulier kunt gebruiken om de overige waarden uit de database te trekken
Dat is heel erg jammer...

Maar als ik jou goed begrijp dan zou ik die ID kunnen gebruiken om gegevens uit de database te krijgen? Want er uit krijg ik ze wel maar er in dus niet blijkbaar...
zoiets dus:

<?php
$result = mysqli_query($conn, "SELECT id, name FROM table");
$dropdown = '<select name="test">';
while($row = mysqli_fetch_assoc($result))
{
    $dropdown .='<option value="'.$row['id'].'">'.$row['name'].'</option>';
}
$dropdown .= '</select>';

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset($_POST['test']))
    {
        $id = intval($_POST['test']);
        $result = mysqli_query($conn, "SELECT * FROM table WHERE id=" . $id);
        if($row = mysqli_fetch_assoc($result))
        {
            echo 'gegevens: ';
            
            echo '<pre>';
            print_r($row);
            echo '</pre>';
        }
    }
}
?>
<html>
    <body>
        <form action="" method="post">
            <?php echo $dropdown; ?>
            <button type="submit">Verstuur</button>
        </form>
    </body>
</html>

Reageren