hoe verwerk ik de waarde van 2 kolommen uit listbox naar mysql?
Ik heb een PHP pagina, die de inhoud van 2 velden ("id" en "name") uit de tabel "persons" naast elkaar weergeeft in een listbox. Verder heeft de pagina een select commando, die de keuze doorgeeft aan mijn PHP verwerkingspagina, die mijn keuze in een MySQL tabel plaatst.
Dit is mijn code voor het maken van de listbox:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
...
<form method="post" action="insert_from_listbox.php">
<select name="ccrseid">
<option value="">Select</option>
[code]<?php
while($getuserrow = mysql_fetch_array($result))
{
?>
<option value="<?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?>"><?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?></option>
<?php } ?>
</select>
<input type="submit" value="Opslaan"]>
</form>
...
?>
...
<form method="post" action="insert_from_listbox.php">
<select name="ccrseid">
<option value="">Select</option>
[code]<?php
while($getuserrow = mysql_fetch_array($result))
{
?>
<option value="<?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?>"><?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?></option>
<?php } ?>
</select>
<input type="submit" value="Opslaan"]>
</form>
...
?>
In insert_from_listbox.php wil ik na de connectie zowel het gekozen "id" als de "name" wegschrijven in een andere tabel. Met de volgende code schrijf ik in één keer "id" "name" weg als veldinhoud:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
...
$sql="INSERT INTO Persons (Name, ID)
VALUES
('$_POST[ccrseid]','44')"; // in plaats van 44 moet hier het id komen
?>
...
$sql="INSERT INTO Persons (Name, ID)
VALUES
('$_POST[ccrseid]','44')"; // in plaats van 44 moet hier het id komen
?>
Ik heb al van alles geprobeerd, maar ik kan niet vinden hoe ik het "id" in het veld "ID" kan opslaan en "name" in het veld "Name". Ik voel er weinig voor om de string "ccrseid" op te splitsen, er moet een betere manier zijn.
Hoe kan ik de afzonderlijke veldnamen verwerken in mijn verwerkingsscript?
Groeten, Gerrit
Gewijzigd op 25/01/2012 19:42:56 door Gerrit broekhuis
Let wel op dat je script op dit moment vatbaar is voor sql-injectie. Je kunt dit oplossen door $_POST['ccrseid'] buiten quotes te halen en er mysql_real_escape_string() omheen te zetten.
Iemand een idee hoe?
Groeten, Gerrit
Gerrit broekhuis op 25/01/2012 19:42:15:
Het veld ID is geen autoincremental veld en moet ik dus zelf met een geldige waarde vullen.
Iemand een idee hoe?
Groeten, Gerrit
Iemand een idee hoe?
Groeten, Gerrit
misschien een idee om hem even wel op auto increment te zetten?.. dan is de waarde ook meteen uniek.
Groeten, Gerrit
Ik denk dat je iets anders moet doen. In je code staat:
Code (php)
Je zet hierbij de (user-)id en de (user-)name als waarde van de select-list.
Alleen de (user-)id zou voldoende zijn.
Code (php)
Je kan dan in je tabel alleen de (user-)id opslaan.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$sql="
INSERT INTO
Persons
(
`ID`
) VALUES (
".intval($_POST[ccrseid])."
)";
?>
$sql="
INSERT INTO
Persons
(
`ID`
) VALUES (
".intval($_POST[ccrseid])."
)";
?>
Als je deze later wilt ophalen met de username kan je dat eenvoudig moet een join doen.
Gewijzigd op 25/01/2012 21:47:22 door - Jim -
Zo heb ik het nu ook werkend gemaakt (opvragen in het verwerkingsscript, via nieuwe query op "id" m.b.v. substr van $_POST[ccrseid], maar in de listbox moet ik de velden "id" en "name" in dit voorbeeld beide kunnen zien om in de listbox de juiste keuze te maken. Aan alleen "id" of "name" heeft de gebruiker van de pagina niets.
Het werkt dus wel zo, maar het lijkt me dat het eenvoudiger moet kunnen.
Dank voor het meedenken, Gerrit
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
Gewijzigd op 25/01/2012 22:03:24 door - Jim -
Gerrit broekhuis op 25/01/2012 15:05:29:
Ik voel er weinig voor om de string "ccrseid" op te splitsen,
Waarom niet?
Super!
Gerrit