[PHP/MySQL] Probleem met waarden uit een set-veld

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
Hoi,
Zoals in de titel staat heb ik een probleem met een set-veld in een MySQL tabel.
De waarden in dat veld worden gescheiden door een komma ( , ).

Wat wil ik doen?
In die tabel staan natuurlijk veel meer records, iedere record heeft een uniek ID en staat voor een persoon, ik wil alle velden/waarden ophalen en deze ingevuld hebben op een pagina om deze te kunnen aanpassen en vervolgens aangepast weer in dezelfde record te plaatsen. Bij alle soorten velden lukt me dat behalve bij een set-veld.
Ik heb al wat geprobeerd met de explode functie, maar dat lukt me niet.

In dit veld moeten de juiste waarden geselecteerd worden:
HTML:
1
2
3
4
5
6
7
8
<select name="functiegebied[]" size="6" multiple id="functiegebied[]">
          <option value="Finance and Control" <? if($fgebieden == "Finance and Control"){echo "selected";}else{echo "";} ?> >Finance and Control</option>
          <option value="Human Resources" <? if($fgebieden == "Human Resources"){echo "selected";}else{echo "";} ?> >Human Resources</option>
          <option value="Process Management" <? if($fgebieden == "Process Management"){echo "selected";}else{echo "";} ?> >Process Management</option>
          <option value="Marketing and Sales" <? if($fgebieden == "Marketing and Sales"){echo "selected";}else{echo "";} ?> >Marketing and Sales</option>
          <option value="ICT" <? if($fgebieden == "ICT"){echo "selected";}else{echo "";} ?> >ICT</option>
          <option value="anders" <? if($fgebieden == "anders"){echo "selected";}else{echo "";} ?> >anders, namelijk:</option>
        </select>

sorry voor de breede code

En dit had ik al gemaakt met PHP:
PHP:
1
2
3
4
$res = mysql_query("SELECT `functiegebied` FROM `test_contacts` WHERE `id` = '$id'");
 $tmp = mysql_fetch_object($res);
  $functiegebied = $tmp->functiegebied;
   $fgebieden = explode(",", $functiegebied);


Kan iemand mij hiermee helpen, please? _/-\o_

[ Voor 16% gewijzigd door FlowDesign op 10-03-2003 14:13 ]

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Algemene vraag hoor, maar waarom gebruik je een , in je database als scheidingsteken?
Waarom normaliseer je de boel niet normaal en ga je dit soort abstracte dingen gebruiken, welke imho redelijk ingaan tegen normale praktijken van databasedesign?

* gorgi_19 heeft dus z'n twijfels over je dataontwerp.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Ik begrijp niet helemaal wat je bedoeld, maar volgens mij wil je met dat stukje php code alle functiegebieden ophalen voor een bepaald id en daarna de html code die je geeft op de juiste plek 'selected' laten weergeven... toch?

Het explode idee is goed, maar daarmee wordt $fgebieden een array, en als je later wilt controleren of bv. "Finance and Control" daarin voorkomt moet je natuurlijk niet doen:
if $fgebieden=="Finance and Control"
maar
if (in_array("Finance and Control,$fgebieden)){ echo "selected"....enz

Is dit wat je bedoelt?
* gorgi_19 heeft dus z'n twijfels over je dataontwerp
Ben het wel met gorgi_19 eens. Volgens mij heeft je dataontwerp zoiets nodig als een relatietabel.

tabel 1:
---------
usrid naam
1 pietje
2 jantje
3 frits

tabel 2:
------------
funcid omsch
1 Finance &Control
2 Management
3 Directie

tabel 3:
---------------
id usrid funcid
1 1 2
2 1 3
3 2 1
4 3 1
5 3 2

Probeer eens te begrijpen wat hier staat.

[ Voor 40% gewijzigd door beetle71 op 10-03-2003 14:31 ]


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
gorgi_19 schreef op 10 March 2003 @ 14:18:
Algemene vraag hoor, maar waarom gebruik je een , in je database als scheidingsteken?
Waarom normaliseer je de boel niet normaal en ga je dit soort abstracte dingen gebruiken, welke imho redelijk ingaan tegen normale praktijken van databasedesign?

* gorgi_19 heeft dus z'n twijfels over je dataontwerp.
Hoe zou het dan wel moeten?
Dit is toch redelijk algemeen?
Of is er een makkelijkere methode? :?

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Relaties leggen tussen tabellen? Ooit gehoord van normaliseren?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
beetle71 schreef op 10 maart 2003 @ 14:26:
Ik begrijp niet helemaal wat je bedoeld, maar volgens mij wil je met dat stukje php code alle functiegebieden ophalen voor een bepaald id en daarna de html code die je geeft op de juiste plek 'selected' laten weergeven... toch?

Het explode idee is goed, maar daarmee wordt $fgebieden een array, en als je later wilt controleren of bv. "Finance and Control" daarin voorkomt moet je natuurlijk niet doen:
if $fgebieden=="Finance and Control"
maar
if (in_array("Finance and Control,$fgebieden)){ echo "selected"....enz

Is dit wat je bedoelt?
Juist! Naar zo'n functie was ik op zoek! :) _/-\o_ _/-\o_
Ik denk dat deze wel gaat werken, bedankt alvast :)

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
gorgi_19 schreef op 10 maart 2003 @ 14:28:
Relaties leggen tussen tabellen? Ooit gehoord van normaliseren?
Heb ik bij Java gehad. :{
Maar ik heb nu geen zin meer om dat allemaal om te gaan gooien, kost me te veel tijd.

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

FlowDesign schreef op 10 maart 2003 @ 14:29:
[...]

Heb ik bij Java gehad. :{
Maar ik heb nu geen zin meer om dat allemaal om te gaan gooien, kost me te veel tijd.
Mja.. Ach, in dat geval kan je net zo goed van een database afstappen en weer gebruik gaan maken van tekstbestanden. :) Alle voordelen van een database doe je nu namelijk weer redelijk teniet. :)

[ Voor 10% gewijzigd door gorgi_19 op 10-03-2003 14:31 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
gorgi_19 schreef op 10 maart 2003 @ 14:31:
[...]

Mja.. Ach, in dat geval kan je net zo goed van een database afstappen en weer gebruik gaan maken van tekstbestanden. :) Alle voordelen van een database doe je nu namelijk weer redelijk teniet. :)
Ik geloof dat ik nog niet had vermeld dat ik alleen Java en SQL "ken" en nu voor het eerst een PHP/MySQL site heb gemaakt ;)

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Maar dat vermoeden hadden we al.. ;) ;)

Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
beetle71 schreef op 10 March 2003 @ 14:26:
Ben het wel met gorgi_19 eens. Volgens mij heeft je dataontwerp zoiets nodig als een relatietabel.

tabel 1:
---------
usrid naam
1 pietje
2 jantje
3 frits

tabel 2:
------------
funcid omsch
1 Finance &Control
2 Management
3 Directie

tabel 3:
---------------
id usrid funcid
1 1 2
2 1 3
3 2 1
4 3 1
5 3 2

Probeer eens te begrijpen wat hier staat.
Vind je dit nu echt handig?
Iedere record bevat nml. 18 velden, moet ik dus meer dan 18 tabellen gaan maken :/

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • Crayne
  • Registratie: Januari 2002
  • Laatst online: 17-03 13:41

Crayne

Have face, will travel

Open een SQL query, waarin je het ene record uitleest dat je wilt bewerken.
Laadt de gewenste kolom in je recordset in een variabele. Op de plek waar je vervolgens je select nodig hebt doe je een tweede (genestte) SQL query waarin je alle records uit een tweede tabel trekt. Per record vergelijk je vervolgens of de waarde die in tabel 1 is opgegeven gelijk is aan de waarde in het huidige record. Zo ja, dan print je 'selected', zo niet, dan is het een gewone optie.

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<%

SQL = "SELECT * FROM Persoon WHERE Persoon.[Persoon-id] = " & paspoort

set conn = server.createobject("ADODB.Connection")
conn.open "TWMIntranet"
conn.execute "use Intranet"
set res = conn.execute(SQL)

if not res.eof then

bron_entiteit = res(6)

%>


En op de juiste plaats in je form:

ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<select name="bron_entiteit" size="1">

<%

SQL = "SELECT * FROM Bron_Entiteit"

set conn3 = server.createobject("ADODB.Connection")
conn3.open "TWMIntranet"
conn3.execute "use Intranet"
set res3 = conn3.execute(SQL)

do while not res3.eof

if res3(1) = bron_entiteit then 

%>

    <option value="<%= res3(0) %>" selected><%= res3(1) %></option>
            
<%

else

%>

    <option value="<%= res3(0) %>"><%= res3(1) %></option>
                
<% 

end if

res3.movenext
loop

res3.close
conn3.close

%>

</select>


En ja, als je niet normaliseert, kan je ook absoluut niet verwachten dat dit soort dingen goed, danwel makkelijk te doen zijn... >:)

[ Voor 23% gewijzigd door Crayne op 10-03-2003 17:09 ]

Mijn Library Thing catalogus


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
Ik vindt dit wel handig ja.....

Hoe vindt jij alle users die zowel 'Finance and Control' als 'Human Resources' zijn?
Waarschijnlijk met zoiets als:

'SELECT * FROM table WHERE functiegebied LIKE '%Human Resources' AND functiegebied LIKE '%Finance and Control%'

Dat los je nog wel op. Maar effectief is het niet. Het is ook niet echt effectief dat al die woorden *-tig keer in de database staan.

En stel je nu eens voor dat je 'Finance and Control' wilt veranderen in 'Control and Finance', dan moet je al die records door gaan lopen en er een speciaal scriptje voor gaan schrijven.

Een ander voordeel is dat je zo ook het bouwen van je html kan vergemakkelijken:
je zou je option values automatisch kunnen laten printen...
PHP:
1
2
3
4
$rs=mysql_query("select * from tabel2");
while ($row=mysql_fetch_array($rs,MYSQL_ASSOC)){
     echo '<option value="'.$row['funcid'].'">'.$row['omsch'].'</option>';
}

Met een beetje eigen creativiteit en SQL-slimmigheidjes kun je hier ook wel inbakken welke er 'selected' staan enz.

Relatietabellen is toch echt beter dan alles met komma'tjes ertussen in een veld kiepen.

Trust me, ooit ben je het met me eens ;)

Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
die in_array werkt iig :)

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

Verwijderd

Jah, fijn.
Maar ik hoop voor je dat dit je enige vieze oplossing is, want anders kon je je nog wel eens flink in de vingers snijden.
Het is natuurlijk wel leuk zo, maar het is natuurlijk alles behalve overzichtelijk, je slaat data enorm vaak dubbel op en zo zijn nog dozen vol redenen te bedenken om dit niet zo te doen.

(NOFI)

Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
Ik ben dan ook nog beginner qua PHP/MySQL like I said :/

Mustang Mach-E SR RWD | MINI Countryman Cooper S


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:32
FlowDesign schreef op 12 March 2003 @ 11:46:
Ik ben dan ook nog beginner qua PHP/MySQL like I said :/


Dat is geen excuus om met een slecht datamodel op de proppen te komen.

Veel applicaties staan of vallen door een goed datamodel. Jouw datamodel is geenzins goed te noemen.
Besef goed dat je -omdat je te lui bent om het van bij het begin goed te doen- meer tijd zult besteden aan het maken van ranzige work-arounds, dan als je gewoon van bij het begin een paar uur (nog niet toe) meer bezig had geweest bij het maken van een goed datamodel.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • FlowDesign
  • Registratie: Januari 2002
  • Laatst online: 15:51
Okeej, als ik weer iets moet maken dan zal ik bovenstaand model gebruiken.
Is idd toch wel handiger :)

Mustang Mach-E SR RWD | MINI Countryman Cooper S

Pagina: 1