[PHP/MySQL] Krijg slechts 1 waarde in een SET veld :(

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
Ik heb dus een tabel gemaakt waarin ik een veld heb genaamd functiegebied:

set('Finance and Control', 'Human Resources', 'Process Management', 'Marketing and Sales', 'ICT', 'NULL')
Null: Ja
Standaardwaarde: NULL

In de HTML heb ik een list:
HTML:
1
2
3
4
5
6
7
<select name="functiegebied" size="5" multiple id="functiegebied">
          <option value="Finance and Control">Finance and Control</option>
          <option value="Human Resources">Human Resources</option>
          <option value="Process Management">Process Management</option>
          <option value="Marketing and Sales">Marketing and Sales</option>
          <option value="ICT">ICT</option>
        </select>


en de PHP(MySQL) query is als volgt (beetje ingekort natuurlijk ;) ):

$sql = "INSERT INTO `test_contacts` (`functiegebied`)
VALUES ( '" . $_POST['functiegebied'] . "');";

Als ik nu de pagina open, dan werkt het goed.

Het enige probleem is dus,
dat als ik meerdere waarden van de lijst selecteer, slechts de onderste geselecteerde waarde van de lijst (in de HTML) in de database wordt gezet.

Weet iemand hier de oplossing voor?

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 10-09 03:41

CyeZ

Vroem vroem!!!

hint: []

goed, ik kan zo snel niet de uitleg vinden waar in naar opzoek was, dus ik zal het kort proberen uit te leggen.

Je 'select' heb je nu de naam 'functiegebied' gegeven. Hier moet je 'functiegebied[]' van maken zodat php snapt dat het om een array gaat en alle gekozen waardes dus netjes in 1 array stopt.

Vervolgens ligt het er een beetje aan wat je wilt, maar je zult dus die array in een loopje door moeten lopen. Een van de mogelijkheden is om dan per item in die array een insert te doen.
Je zou ook alle strings achter elkaar kunnen plakken en allemaal in 1x inserten met 1 insert query. Maar dat is dus afhankelijk van je bedoeling. Ik denk dat je in dit geval meerdere insert queries wilt gebruiken.

[ Voor 98% gewijzigd door CyeZ op 21-01-2003 15:34 ]

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


Acties:
  • 0 Henk 'm!

Verwijderd

Een goeie loop om je insert heen bouwen?

Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
Verwijderd schreef op 21 januari 2003 @ 15:27:
Een goeie loop om je insert heen bouwen?
Oke,
dus als ik een while of een for loopje ofzo maak,
dan zet ie dus wel netjes alle waarden die geselecteerd zijn in datzelfde veld?
Het is niet zo dat ik een fout heb gemaakt in de tabel.

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat Cyez bedoelt is dat je bij je select de name even functiegebied[] moet maken. Dan krijg je bij PHP een array binnen onder de naam functiegebied ( $_REQUEST [ 'functiegebied' ] of $_POST so you wish, dus) en aan de hand van die array kun je dan heel eenvoudig een query genereren die de juiste waarden in de SET zet.

Overigens is met een dergelijk type gegevens niet echt de meest handige zet om SET te gebruiken. Wellicht is het beter om gewoon een tabel aan te maken voor functiegebieden. Dan is zo'n select-boxje ook heel eenvoudig te genereren adhv je database bijvoorbeeld.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
CyeZ schreef op 21 January 2003 @ 15:25:
hint: []

goed, ik kan zo snel niet de uitleg vinden waar in naar opzoek was, dus ik zal het kort proberen uit te leggen.

Je 'select' heb je nu de naam 'functiegebied' gegeven. Hier moet je 'functiegebied[]' van maken zodat php snapt dat het om een array gaat en alle gekozen waardes dus netjes in 1 array stopt.

Vervolgens ligt het er een beetje aan wat je wilt, maar je zult dus die array in een loopje door moeten lopen. Een van de mogelijkheden is om dan per item in die array een insert te doen.
Je zou ook alle strings achter elkaar kunnen plakken en allemaal in 1x inserten met 1 insert query. Maar dat is dus afhankelijk van je bedoeling. Ik denk dat je in dit geval meerdere insert queries wilt gebruiken.
Het is in mijn geval handiger om alle strings achter elkaar te plakken,
omdat ik tegelijkertijd in andere velden van de tabel waarden van andere textvelden e.d. wil inserten. Dus dan kan ik het gewoon bij één query laten en hoef ik niet voor het set-veld een aparte query te schrijven (toch?).

Dus wat ik nu zowieso moet doen is in de HTML functiegebied veranderen in functiegebied[]
En dan ... ff kijken hoor...

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Je hoeft ook niet een query vaker uit te voeren dan 1 keer. Je moet gewoon een query genereren die alles in 1 keer in de database stouwt. Hoe dat dan verder in je form en in PHP geregeld wordt heeft in principe weinig te maken met hoe je 't goede nieuws aan de database brengt ;)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
drm schreef op 21 January 2003 @ 15:43:
Je hoeft ook niet een query vaker uit te voeren dan 1 keer. Je moet gewoon een query genereren die alles in 1 keer in de database stouwt. Hoe dat dan verder in je form en in PHP geregeld wordt heeft in principe weinig te maken met hoe je 't goede nieuws aan de database brengt ;)
Ja, zover was ik ook al hoor... :/ Maar toch bedankt.

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

FlowDesign:
Ja, zover was ik ook al hoor... :/ Maar toch bedankt.

Dat blijkt anders niet uit je post
Dus dan kan ik het gewoon bij één query laten en hoef ik niet voor het set-veld een aparte query te schrijven (toch?).

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
drm schreef op 21 January 2003 @ 15:47:

[...]

Dat blijkt anders niet uit je post

[...]
Ja oke, maar jij hebt het over een query binnen een query zeg maar.
En ik bedoelde 1 grote query die alles doet. :)

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

FlowDesign:
Ja oke, maar jij hebt het over een query binnen een query zeg maar.
En ik bedoelde 1 grote query die alles doet. :)
Nee, ik bedoelde hetzelfde als jij :) Om maar even alle verwarring uit de wereld te helpen:
PHP:
1
2
3
4
5
6
7
8
9
10
$query = "
   INSERT INTO
      `tabelnaam`(
          `varchar_veld`
          `set_veld`
      ) VALUES (
          '" . $_POST [ 'varchar_veld' ] . "',
          '" . implode ( ',', $_POST [ 'set_veld' ] ) . "'
     )
";

Dat is ongeveer waar je heen moet, volgens mij (afgezien van het feit dat je natuurlijk de input moet controleren, etc.

edit:
Daarbij is $_POST [ 'set_veld' ] dus een array, die uit 't form komt zetten:
code:
1
2
<form (...)>
   <select name="set_veld[]" multiple="multiple" (...)>
let op de []

[ Voor 14% gewijzigd door drm op 21-01-2003 16:03 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 10:02
Ik ga dit even proberen drm, want die strings aan elkaar plakken lukte me niet.
Ik laat zometeen weten of het lukt. :)

EDIT 5 minuten later ;) :

Yeah! Het werkt! Thanks drm _/-\o_

[ Voor 23% gewijzigd door FlowDesign op 21-01-2003 16:16 ]

Mustang Mach-E SR RWD | MINI Countryman Cooper S

Pagina: 1