[PHP] mysql set-type geselecteerd in select

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Sabi
  • Registratie: Mei 2002
  • Laatst online: 08-01-2022
De bedoeling is om de waarde uit de database in een select te krijgen. De select waarde komen erin met een implode():

PHP:
1
$CATEGORIE = implode ( ',', $_POST [ 'CATEGORIE' ] );


in de tabel staat nu keurig 100,500,600,800

nu wil ik ze eruit halen voor een wijzig formulier. Tot nu toe heb ik dit:
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
print ("
</TR>
    <TR> 
    <TD>Categorie:</TD>
    <TD>
    <SELECT name='CATEGORIE[]' size='8' multiple>   ");
    $catquery = mysql_query("SELECT Cat_Naam_vol, Cat_Naam, Cat_ID FROM categorie ") 
                or die ("Query gaat fout: " . mysql_error());   
    while($catrow = mysql_fetch_object($catquery))
    {
      $catdb = explode (",", $row->Merch_Cat);
      for ($a = 100; $a <= 4200; $a = $a + 100) {
        for ($b = 0; $b <= 42; $b++){
          if ($catdb[$b] == $a ) {
            echo "<option value='$catrow->Cat_ID' selected>$catrow->Cat_Naam_vol</option>";
          }
        }
        echo "<option value='$catrow->Cat_ID'>$catrow->Cat_Naam_vol</option>";
      }
    // echo $catdb[0];
    }
print("</select> 
    </TD>
  </TR>");


Wat hij nu doet is Hij geeft alle categoriën 42 keer weer en selecteerd de 4de (de waarde in de tabel gebruikers is 400)
Even voor de duidelijkheid, het gaat om 2 tabellen, in 1 staan alle categorien ($catrow) en in de 2de staan gebruikers met categorie($row).

Om te testen heb ik even gekeken wat er in $catdb[0] staat en daarin staat:
400400400400400400 etc. 31 keer 400

Ik doe meerdere dingen fout, maar wat?

edit:

Door echo "<option value='$catrow->Cat_ID'>$catrow->Cat_Naam_vol</option>";
een } lager te zetten wordt het al iets beter, hij geeft nu om en om aan alle categorieen geselecteerd en niet geselecteerd

[ Voor 17% gewijzigd door Sabi op 05-11-2003 13:08 ]


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik vind je code op een paar punten omslachtig en je databasemodel niet erg goed:

PHP:
1
2
3
4
    $catdb = explode (",", $row->Merch_Cat);
      for ($a = 100; $a <= 4200; $a = $a + 100) {
        for ($b = 0; $b <= 42; $b++){
          if ($catdb[$b] == $a ) {


Mijns inziens ga je bij de eerste regel al de fout in. en dat vooral op het gebied van je databasemodel. Als dit gescheiden waardes zijn, dan moet je ze ook gescheiden opslaan en niet toch in 1 veld proppen met komma's. Je werkt niet voor niet met een relationele database. Gewoon aparte records voor aanmaken dus. En op dat moment zul je ook geen problemen meer hebben omdat je gewoon door de resultaten kunt loopen zonder verder nog ingewikkeld te hoeven doen.

Maar even for the record:

- die twee forloopjes, dat gaat fout en kan ook veel simpeler:
PHP:
1
2
3
4
5
6
foreach ($catdb AS $category)
{
     // als ie tenminste gelijk moet zijn aan ID en niet aan Naam_vol
    $selected = ($category == $catrow->Cat_ID) ? " selected" : "";
    echo "<option value=\"".$catrow->Cat_ID."\"".$selected.">".$catrow->Cat_Naam_vol."</option>\n";
}


[miereneukmodus]
PHP:
1
$catquery = mysql_query("SELECT Cat_Naam_vol, Cat_Naam, Cat_ID FROM categorie ")

je stopt het resultaat van mysql_query in een variabele die je $catquery noemt. maar het bevat vervolgens helemaal geen query, maar een pointer naar het resultaat van een query. $result oid zou ik dus een veel betere naam vinden.
[/miereneukmodus]

Acties:
  • 0 Henk 'm!

  • Sabi
  • Registratie: Mei 2002
  • Laatst online: 08-01-2022
marty schreef op 05 november 2003 @ 18:51:
ik vind je code op een paar punten omslachtig en je databasemodel niet erg goed:

Mijns inziens ga je bij de eerste regel al de fout in. en dat vooral op het gebied van je databasemodel. Als dit gescheiden waardes zijn, dan moet je ze ook gescheiden opslaan en niet toch in 1 veld proppen met komma's. Je werkt niet voor niet met een relationele database. Gewoon aparte records voor aanmaken dus. En op dat moment zul je ook geen problemen meer hebben omdat je gewoon door de resultaten kunt loopen zonder verder nog ingewikkeld te hoeven doen.
Ik ben het niet helemaal met je eens, want een gebruiker kan in een ofmeerdere categorien vallen. Categorieen kunnen ook appart worden aangemaakt, dus vandaar dat ik de categorieen uit een andere tabel haal, hierin staan slechts 3 velden. categorie ID (het nummer waarmee hij gekoppelde wordt aan meerdere tabbellen oa gebruikers) categorie naam kort en categorie naam lang, kort is maar een paar tekens en lang is de voledige naam. Stel dat ik de categorie in de tabel gebruiker zet als apparte kolom zou ik ik als ik een categorie moet toevoegen niet alleen een kolom bij de tabel gebruiker moeten toevoegen, maar ook bij andere tabellen die gebruik maken van dezelfde categorieen. Vandaar deze keuze.
marty schreef op 05 november 2003 @ 18:51:
Maar even for the record:

- die twee forloopjes, dat gaat fout en kan ook veel simpeler:
PHP:
1
2
3
4
5
6
foreach ($catdb AS $category)
{
     // als ie tenminste gelijk moet zijn aan ID en niet aan Naam_vol
    $selected = ($category == $catrow->Cat_ID) ? " selected" : "";
    echo "<option value=\"".$catrow->Cat_ID."\"".$selected.">".$catrow->Cat_Naam_vol."</option>\n";
}
Dit loopt idd beter (tnx), nu staan tenminste de juiste categorieen geselecteerd, maar als een gebruiker 2 categorien heeft staan alle categorieen 2 keer in het lijstje, zit een gebruiker in 3 categorieen staan alle categorieen 3 keer in de select, etc. etc.

Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 22:39

_Sunnyboy_

Mooooooooooooooooo!

Ook van Jointabellen gehoord voor Many to Many relaties?

Je hebt een tabel Users
Je hebt een tabel Category

Nu maakt je een jointabel met daarin UserId en CatId
Daar kan je makkelijk meerdere categorien per user in opslaan.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life