Door
Klaas Vaag
op 31-08-2015 12:57
gewijzigd op 31-08-2015 13:09
4.737 views
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.
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.
Nu krijg ik dus "name" doorgestuurd naar het verwerkingsproces. Nu is het de bedoeling dat ik zowel "name" als "id" naar datzelfde proces krijg. Ik wil beide waardes opslaan zodat ik ze ergens anders op kan vragen. De pagina waar ik deze gegevens opvraag heeft de "ID" nodig om gegevens uit de database te kunnen halen.
Het formulier is de eerste stap, waarin ik nieuwe informatie toevoeg. Het dropdown menu is een veld met bestaande data uit de database zoals namen, adresgegevens, enz.
Stel je hebt een tabel 'klanten' met kolommen als naam, email, adres, telefoon etc.
Je laat de gebruiker een klant selecteren met een dropdown. Dan WIL je alleen maar het id posten. Waarom? Als gebruikers het hele record gaan terug sturen dan kunnen ze van alles stiekem aanpassen. Je hoeft daar echt niet voor gestudeerd te hebben overigens. In mijn voorbeeld wordt er enkel en alleen maar een numerieke waarde geaccepteerd. De gebruiker KAN dus enkel maar een keus maken uit een van de adressen en deze dus niet modificeren.
Stel nu dat je voor deze klant tevens in het zelfde formulier een bestelling laat toevoegen. je wilt in je database in de tabel 'bestellingen' niet de hele bups aan adresgegevens toevoegen voor ieder artikel dat besteld wordt. Je slaat in deze tabel enkel het id van de klant op waarmee je naar de tabel 'klanten' verwijst.
Niet automatisch maar kan met javascript. Maar waarom? Misschien moet je toch trachten je vraag anders te stellen en gewoon laten zien wat je zo graag wilt bereiken.
[quote="Klaas Vaag op 31/08/2015 17:07:14"]
Dat is heel erg jammer...
Stel nu dat je voor deze klant tevens in het zelfde formulier een bestelling laat toevoegen. je wilt in je database in de tabel 'bestellingen' niet de hele bups aan adresgegevens toevoegen voor ieder artikel dat besteld wordt. Je slaat in deze tabel enkel het id van de klant op waarmee je naar de tabel 'klanten' verwijst.
[/quote]
Het eind resultaat moet inderdaad ongeveer zo zijn. Alleen het probleem waar ik mee zit is, hoe krijg ik dat er in. De ID bestaat overigens al omdat ik die uit een andere tabel haal. Maar dat terzijde, de link van gegevens naar een "klant" om even in jouw voorbeeld te spreken mis ik nog. In feite werkt het proces maar die eerste stap is mij nog onduidelijk. Als het een kwestie van een hidden input zoals Santhe zegt dan is het niet zo lastig maar is die gelijk aan de gegevens die ik selecteer.
Je kan natuurlijk altijd het "id" meesturen in een:
<input name="id" type="hidden"></input>
Dit is alleen erg gevoelig voor "SQL Injection" aangezien je alles vanaf de gebruiker moet behandelen als incorrecte data, plus je kan geen ID verifiƫren.
Eigenlijk zou geen enkele statische "id" of andere gegevens die te maken hebben met de structuur in jouw database staan zichtbaar maken voor de gebruiker, wat je wel zou kunnen doen is een ID opslaan in een session. Aangezien je zo cryptisch ben met je vraag, neem ik maar aan dat jouw database structuur gewoon -verkeerd- is.
Niet automatisch maar kan met javascript. Maar waarom? Misschien moet je toch trachten je vraag anders te stellen en gewoon laten zien wat je zo graag wilt bereiken.
Oke, ik neem als voorbeeld een bedrijf. Van dat bedrijf krijg ik een document binnen. Je verwerkt het document door het vast te leggen in het systeem. De eerste stap die je dan neemt is het invoeren van gegevens. Je vult alles in waaronder de bedrijfsnaam (gekoppeld aan een ID). De bedrijfsnaam haal je uit de database, die prop je in een dropdown menu zodat het overzichtelijk is. Als je alles hebt ingevuld dan sla je dat op in de database. De gegevens zijn nu opgeslagen.
Later heb je informatie nodig van dat document. Je wilt het bekijken dus je gaat naar dat document en open het. Alle gegevens zijn daar, inclusief de gegevens van het bedrijf.
Onder de motorkap is het iets complexer, voor mij dan. Ik heb een formulier gemaakt met de velden die nodig zijn en ook zo opgeslagen worden in de database. Een veld, een select veld bevat de bedrijfsnamen die ik uit de database haal. Zo weet ik welk bedrijf bij het document hoort. Maar omdat ik alleen een bedrijfsnaam kan selecteren (en dus niet het ID) word de bedrijfsnaam weergegeven maar kan ik later de gegevens die aan die ID gekoppeld zijn niet weergeven omdat de ID mist. Dus nu zou ik een keuze moeten maken of ik alleen de bedrijfsnaam weergeef of de ID.
Toevoeging op 31/08/2015 19:11:53:
Johan K op 31/08/2015 19:03:22
Je kan natuurlijk altijd het "id" meesturen in een:
<input name="id" type="hidden"></input>
Dit lijkt mij niet mogelijk omdat het veld niet weet welke naam ik selecteer dus ook geen ID kan meegeven.
Overigens gebruik in in het verwerkingsscript bind_param, welke volgens het internet bijna onmogelijk zou zijn om een sql-injection uit te voeren.
Toevoeging op 31/08/2015 19:16:36:
wellicht is dit beter...
<form name="inkomend" action="?inkomend=allin&groepen=inkomend&action=add_do" method="post">
Download<br>
<input type="text" name="download"><br>
Categorie<br>
<select name="categorie">
<option value="#">Maak een keuze</option>
</select>
<br>
Bedrijf<br>
<select name="bedrijf">
<option value="1">Niet opgegeven</option>
<option value="#"> </option>
<?php
$sql = <<<SQL
SELECT *
FROM contactenzakelijk
ORDER BY bedrijf
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['zakelijk_id']; ?>"><?php echo $row['bedrijf']; ?></option><!--Echo out options-->
<?php
}
?>
</select><br>
Onderwerp<br>
<input type="text" name="onderwerp"><br>
Ontvangen<br>
<input type="text" name="ontvangen" value="<?php echo date("Ymd"); ?>"><br>
Brief nr<br>
<?php
$sql = <<<SQL
SELECT * FROM inkomend ORDER BY briefnr DESC LIMIT 1
SQL;
if(!$result = $db->query($sql)){
die('There was an error running the query [' . $db->error . ']');
}
while($row = $result->fetch_assoc()){
?>
<input type="text" name="briefnr"> Laatste briefnr: <?php echo $row['briefnr']; ?><br>
<?php
}
$result->free();
?>
Opmerkingen/notities:<br>
<textarea cols="50" rows="10" name="editor1"></textarea><br>
Afgehandeld?<br>
<select name="afgehandeld">
<option value="#">Maak een keuze</option>
<option value="ja">Afgehandeld</option>
<option value="nee">Niet afgehandeld</option>
</select><br><br>
<input type="submit" name="submit" value="Opslaan"> <input type="reset" name="index" value="annuleren" onclick="document.location.href='?inkomend=index'">
</form>
</p></div>