hoe verwerk ik de waarde van 2 kolommen uit listbox naar mysql?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gerrit broekhuis

gerrit broekhuis

25/01/2012 15:05:29
Quote Anchor link
Hallo,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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>
...
?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>


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
 
PHP hulp

PHP hulp

21/12/2024 17:50:23
 
Jacco Brandt

Jacco Brandt

25/01/2012 15:19:54
Quote Anchor link
Als het veld ID auto_increment is(instelbaar dmv phpmyadmin of een alternatief) dan kun je die waarde weglaten, en word hij automatisch aangemaakt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
INSERT INTO Persons (Name) VALUES ('naam')


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

gerrit broekhuis

25/01/2012 19:42:15
Quote Anchor link
Het veld ID is geen autoincremental veld en moet ik dus zelf met een geldige waarde vullen.

Iemand een idee hoe?

Groeten, Gerrit
 
Jaron T

Jaron T

25/01/2012 20:29:12
Quote Anchor link
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


misschien een idee om hem even wel op auto increment te zetten?.. dan is de waarde ook meteen uniek.
 
Gerrit broekhuis

gerrit broekhuis

25/01/2012 21:29:52
Quote Anchor link
Er is al een ander autoincrement veld. Ik moet het veld "id" en eventuele andere velden echt zelf kunnen vullen met de waardes van de velden uit een ander record.

Groeten, Gerrit
 
- Jim  -

- Jim -

25/01/2012 21:43:29
Quote Anchor link
Gerrit,

Ik denk dat je iets anders moet doen. In je code staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<option value="<?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?>"><?php echo $getuserrow['id'] . " " . $getuserrow['name']; ?></option>


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)
PHP script in nieuw venster Selecteer het PHP script
1
<option value="<?php echo $getuserrow['id']; ?>"><?php echo $getuserrow['name']; ?></option>

Je kan dan in je tabel alleen de (user-)id opslaan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$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 -
 
Gerrit broekhuis

gerrit broekhuis

25/01/2012 21:54:10
Quote Anchor link
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
 
- Jim  -

- Jim -

25/01/2012 21:59:58
Quote Anchor link
Wat je zou kunnen helpen:
http://dev.mysql.com/doc/refman/5.0/en/insert-select.html
Gewijzigd op 25/01/2012 22:03:24 door - Jim -
 
- SanThe -

- SanThe -

25/01/2012 22:17:31
Quote Anchor link
Gerrit broekhuis op 25/01/2012 15:05:29:
Ik voel er weinig voor om de string "ccrseid" op te splitsen,


Waarom niet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<option value="<?php echo $getuserrow['id'] . '||' . $getuserrow['name']; ?>">


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
list($id, $name) = explode('||', $_POST['ccrseid']);
echo $id . '<br />' . $name;
?>
 
Gerrit broekhuis

gerrit broekhuis

26/01/2012 14:00:47
Quote Anchor link
SanThe, dit werkt inderdaad goed. Via de variabelen kan ik in mijn php verwerkingspagina altijd nog weer een query uitvoeren en zo eventuele andere velden erbij pakken.

Super!

Gerrit
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.