[PHP][MYSQL] Opslaan meerdere waardes uit list

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben met een klein projectje in PHP / MySQL bezig, helaas loop ik al meerdere uren tegen een probleem aan dat ik niet opgelost krijg.

In een formulier gebruik ik 4 lists waarin de bezoeker meerdere waardes kan kiezen.

Nu dacht ik dat ik door in de DB een varchar (255) aan te maken en de waardes gewoon door te spelen deze wel opgeslagen zou worden maar helaas. Er komt maar één waarde in de database te staan.

Weet iemand hoe je dat wel moet doen? Normaal gesproken worden de waardes toch komma gescheiden door gestuurd en kunnen toch gewoon als text opgeslagen worden?

Acties:
  • 0 Henk 'm!

  • Tom-my
  • Registratie: November 2000
  • Laatst online: 21-05 16:08

Tom-my

w03iz0rz

doe is een

print_r($_GET);

of

print_r($_POST);


in de file waar je je form heen stuurt

"Then there was the man who drowned crossing a stream with an average depth of six inches."


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hey das in ieder geval deel één van het probleem... ik mag er wel meerdere selecteren maar hij geeft maar 1 waarde door...

Thanks FanToom, ik ga eerst ff in het hele lists verhaal duiken ik moet meerdere waardes opslaan en het aantal is wisselend.

Acties:
  • 0 Henk 'm!

Verwijderd

Array is je vriend. Daar waar ik laatst nog een foutief antwoord gaf, is dat wel het topic waar je een beetje kunt zien wat arrays doen.

Als je werkt met checkboxes, geef dan iedere checkbox een naam als waarde[]. Je krijgt dan een array als resultaat.

[ Voor 24% gewijzigd door Verwijderd op 18-04-2004 12:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Eens kijken, ziet er inderdaad uit als de oplossing die ik zocht :)

Ik werk met een multiple select... komt dus volgens mij goed overeen, ik ga er weer even mee stoeien.

[ Voor 44% gewijzigd door Verwijderd op 18-04-2004 12:01 . Reden: Werk met select ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik vrees een beetje dat je database niet helemaal lekker in elkaar zit, als ik kijk naar wat je schrijft.
Je gaat toch niet meerdere waarden in één database veld opslaan toch?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas heb ik geen andere optie, ik zal dat even toelichten:

Persoon X wordt beschreven door 2 multiple selects/lists:

Veld transport komt uit list 1:
List 1:
Lopen
Rijden
Vliegen
Zwemmen

Veld communicatie komt uit list 2:
List 2:
Praten
Schrijven
Typen
Morse

Ik moet een manier vinden om aan te geven dat persoon X kan lopen en zwemmen, praten, typen en morse.

Het probleem is dat er in de toekomst bijvoorbeeld bij communicatie ook andere opties worden toegevoegd dus het moet zo flexibel mogelijk zijn.

Zijn er ook andere manieren zonder de database te moeten aanpassen als er nieuwe waardes bijkomen?

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
tabel persoon
tabel persoon_transport
tabel transport
tabel persoon_communicatie
tabel communicatie

oftwel: koppeltabellen!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Weet je.... jullie hebben helemaal gelijk!

*met schaamte geef ik toe dat helemaal niet bedacht te hebben en alleen aan de vuile oplossing te hebben gedacht*

;) Bedankt allemaal!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okay, dan een vraag over het joinen van tables in een SQL query... pfff alweer 2 uur....

Ik heb de volgende tabellen:

tblbedrijven
id
naambedrijf
** hoop andere velden **

tbleigenschap1
id
bedrijf
eigenschapnaam

tbleigenschap2
id
bedrijf
eigenschapnaam

Het veld bedrijf in de tabellen tbleigenschap1 en tbleigenschap2 linken naar het veld id in tblbedrijven.

Nu moet ik een selectie maken waarbij tbleigenschap1.eigenschapnaam en tbleigenschap2.eigenschapnaam een waarde uit een formulier krijgen en op basis hiervan moet ik een lijst maken met de bedrijven, namen en id's die aan deze voorwaarden voldoen.

Mijn idee:
code:
1
2
3
4
5
SELECT DISTINCT tblbedrijven.id, tblbedrijven.naambedrijf 
FROM tblbedrijven, tbleigenschap1, tbleigenschap2
WHERE tbleigenschap1.bedrijf = tblbedrijven.id AND tbleigenschap2.bedrijf = 
tblbedrijven.id AND tbleigenschap1.eigenschapnaam = formulierwaarde AND 
tbleigenschap2.eigenschapnaam = formulierwaarde


Maar hiermee werkt hij niet...

Na vele uren lezen en dingen gezien te hebben over joins en group by en veeeeel meer zie ik het echt niet meer, wie weet wat ik moet doen om te zorgen dat dit gaat werken?

[ Voor 1% gewijzigd door Verwijderd op 19-04-2004 02:13 . Reden: Lay out ]


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

Wat is het verschil tussen tbleigenschap1 en tbleigenschap2??
Als dit een koppeltabel is tussen bedrijven en eigenschappen kan dit best in 1 tabel.
Dat lijkt me zelfs wel aan te raden.

Je kan mijns inziens beter op je (gegenereerde) form werken met input values die de id's zijn uit tbleigenschap.
(Uiteraard als beschrijving op je form gebruik je wel eigenschapnaam)


Dan wordt het zoiets:
code:
1
2
3
4
5
SELECT DISTINCT tblbedrijven.id, tblbedrijven.naambedrijf 
FROM tblbedrijven, tbleigenschap
WHERE tbleigenschap.bedrijf = tblbedrijven.id 
AND tbleigenschap.bedrijf = tblbedrijven.id 
AND tbleigenschap.id= formulierwaarde

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om het dan echt duidelijk te maken:
Ik werk met een hoofdtabel hierin krijg een geregistreerde bezoeker van de site dus zijn ID, daarnaast zijn er totaal 4 tabellen met eigenschappen en 4 koppeltabellen om de hoofdtabel met de eigenschappentabel te verbinden.

Nu heb ik een formulier met daarin 4 lists/selects waarmee gezocht kan worden naar de geregistreerde bezoekers.

Nu zoek ik dus een manier om via de lists in het formulier de waarde van een veld in de koppeltabel terug te geven en aan de hand van die waarde de bijbehorende hoofdrecords op te zoeken zonder duplicaten uiteraard.

PHP:
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
$myq = " tblbedrijven.actief != 0 ";
if (isset($_POST['branche'])) {
if ($_POST['branche'] != "") {
  $voorwaarde1_rsLaatmaarzien = (get_magic_quotes_gpc()) ? $_POST
['branche'] : addslashes($_POST['branche']);
  $myq = $myq." AND tblbedrijven.id = koppelbranche.bedrijf AND 
koppelbranche.branche = ".$voorwaarde1_rsLaatmaarzien;
//  echo $myq."<br>";
}}
if (isset($_POST['werkdenk'])) {
if ($_POST['werkdenk'] != "") {
  $voorwaarde2_rsLaatmaarzien = (get_magic_quotes_gpc()) ? $_POST
['werkdenk'] : addslashes($_POST['werkdenk']);
  $myq = $myq." AND tblbedrijven.id = koppelwerkdenk.bedrijf AND 
koppelwerkdenk.werkdenk = ".$voorwaarde2_rsLaatmaarzien;
//  echo $myq."<br>";
  }}
if (isset($_POST['functiecat'])) {
if ($_POST['functiecat'] != "") {
  $voorwaarde3_rsLaatmaarzien = (get_magic_quotes_gpc()) ? $_POST
['functiecat'] : addslashes($_POST['functiecat']);
  $myq = $myq." AND tblbedrijven.id = koppelfunctiecat.bedrijf AND 
koppelfunctiecat.functiecat = ".$voorwaarde3_rsLaatmaarzien;
//  echo $myq."<br>";
  }}
if (isset($_POST['vakgebied'])) {
if ($_POST['vakgebied'] != "") {
  $voorwaarde4_rsLaatmaarzien = (get_magic_quotes_gpc()) ? $_POST
['vakgebied'] : addslashes($_POST['vakgebied']);
  $myq = $myq." AND tblbedrijven.id = koppelvakgebied.bedrijf AND 
koppelvakgebied.vakgebied = ".$voorwaarde4_rsLaatmaarzien;
//  echo $myq."<br>";
  }}

if (isset($_POST['provbedrijf'])) {
if ($_POST['provbedrijf'] != "") {
  $colname5_rsResultaat = (get_magic_quotes_gpc()) ? $_POST['provbedrijf'] : 
addslashes($_POST['provbedrijf']);
  $myq = $myq." AND tblbedrijven.provbedrijf = ".$colname5_rsResultaat;
//  echo $myq."<br>";
  }}

if (isset($_POST['PostcodeGebied'])) {
if ($_POST['PostcodeGebied'] != "") {
  $colname6_rsResultaat = (get_magic_quotes_gpc()) ? $_POST
['PostcodeGebied'] : addslashes($_POST['PostcodeGebied']);
  $colname6a_rsResultaat = $colname6_rsResultaat + 50;
  $colname6b_rsResultaat = $colname6_rsResultaat - 50;
  $myq = $myq." AND tblbedrijven.postcodebedrijf > ".$colname6b_rsResultaat." 
AND tblbedrijven.postcodebedrijf <".$colname6a_rsResultaat;
//  echo $myq."<br>";
  }}
$colname7_rsResultaat = $_POST['dienstenbedrijf1'];
if (isset($_POST['dienstenbedrijf1'])) {
if ($colname7_rsResultaat != "") {
  $colname7_rsResultaat = (get_magic_quotes_gpc()) ? $_POST
['dienstenbedrijf1'] : addslashes($_POST['dienstenbedrijf1']);
  $myq = $myq." AND tblbedrijven.dienstenbedrijf1 LIKE '%".$colname7_rsResultaat."%'";
//  echo $myq."<br>";
  }}
mysql_select_db($database_testDBcn, $testDBcn);
$query_rsLaatmaarzien = sprintf("SELECT * FROM tblbedrijven, koppelbranche,
 koppelfunctiecat, koppelwerkdenk, koppelvakgebied WHERE".$myq." GROUP BY 
tblbedrijven.id LIMIT 10");
$rsLaatmaarzien = mysql_query($query_rsLaatmaarzien, $testDBcn) or die
(mysql_error());
$row_rsLaatmaarzien = mysql_fetch_assoc($rsLaatmaarzien);
$totalRows_rsLaatmaarzien = mysql_num_rows($rsLaatmaarzien);
?>


Met als resultaat de volgende querystring:
SELECT * FROM tblbedrijven, koppelbranche, koppelfunctiecat, koppelwerkdenk, koppelvakgebied WHERE tblbedrijven.actief != 0 AND tblbedrijven.id = koppelbranche.bedrijf AND koppelbranche.branche = 19 AND tblbedrijven.id = koppelwerkdenk.bedrijf AND koppelwerkdenk.werkdenk = 4 AND tblbedrijven.id = koppelfunctiecat.bedrijf AND koppelfunctiecat.functiecat = 1 AND tblbedrijven.id = koppelvakgebied.bedrijf AND koppelvakgebied.vakgebied = 31 AND tblbedrijven.provbedrijf = 12 AND tblbedrijven.postcodebedrijf > 4450 AND tblbedrijven.postcodebedrijf <4550 AND tblbedrijven.dienstenbedrijf1 LIKE '%ererer%' GROUP BY tblbedrijven.id LIMIT 10

Het lijkt me dat dit niet de bedoeling kan zijn.... het werkt wel maar ja...

Om de tabellen even kort nogmaals weer te geven:

De hoofdtabel:
ID NAAM NOG VEEL MEER VELDEN

De eigenschappentabellen 4x:
ID NAAM ACTIEF

De koppeltabellen 4x:
ID BEDRIJFID EIGENSCHAPID
koppelt aan hoofdtabel koppelt aan eigenschappentabel

[ Voor 13% gewijzigd door Verwijderd op 19-04-2004 14:35 . Reden: Aanvulling ]


Acties:
  • 0 Henk 'm!

  • bartware
  • Registratie: Juni 2001
  • Laatst online: 25-03-2023

bartware

@jabber.org

Ik zou die kenmerken allemaal in 1 tabel gooien in plaats van 4.
Dus ook maar 1 koppeltabel.
En dan een extra kolom 'soort' ofzo, waarin je met een id aangeeft of het kenmerk bij Transport, Communicatie of wat anders hoort.

Maakt het allemaal wat overzichtelijker. En je query een stuk kleiner.

Als je dat niet wilt, zou ik op zijn minst de tabellen een wat pakkender naam geven (TransportEigenschap, CommunicatieEigenschap etc, ) in plaats van eigenschap1, 2 etc.

Heb ik me begrepen?
Cycle Vision 2020: 17-20 juli Sportpark Sloten & Wheelerplanet Spaarnwoude


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Die pakkendere namen hebben ze ook maar ik wilde het niet ingewikkelder maken als nodig.

Als iemand me een hint kan geven hoe je een join samen kan stellen wil ik het liefst daarmee gaan stoeien. Op de mysql site zat ik vannacht ook te lezen maar daar kon ik echt geen wijs uit worden.

Het leek wel als of ze daar fictieve tabellen aanmaakten door middel van de bestaande tabellen, alleen werkte dat bij mij helaas niet.
Pagina: 1