[PHP] Form processing m.b.v. Checkbox/Array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mensen,


Ik heb een producten database. Een product toevoegen (er wordt ge-insert naar een tabel products, een tabel colors, een tabel sizes, een tabel rel_productscolors en een tabel rel_productssizes) gaat zonder problemen.

Echter, met het wijzigen van een product kom ik ergens niet uit. Ik kan alle velden uitlezen en de values weer laten geven in het form, echter een lijst met (variabele) checkboxen afkomstig uit de colors tabel en een lijst met (variabele) checkboxen afkomstig uit de sizes tabel dienen, met behulp van wat er in de relatietabel is ingevoerd te worden gechecked of niet.

Kijkend naar de colors tabel (sizes tabel is een identiek probleem, dus het heeft geen zin om beide problemen volledig weer te geven) dan is mijn idee hierbij dat ik alle ColorID's uit de color tabel moet selecten. Dit voor de gehele lijst. Als tweede dien ik alle ColorID's uit de rel_productscolors tabel te trekken. Beide moeten in een array geduwd worden lijkt me en vergeleken worden met elkaar.

Nu heb ik hier even mee zitten spelen, en kwam ik tot de volgende code tot zover:

code:
1
2
3
4
5
6
7
8
9
10
$colorquery = "SELECT ColorID FROM rel_ProductsColors WHERE ProductID = $ProductID;";
$colorresult=mysql_query($colorquery);
while ($colorrow = mysql_fetch_row($colorresult))
               {
    $ColorID = $colorrow['0'];
    for ($i=0; $i <= sizeof($ColorID); $i++)
        {
        $ColorArray[$i] = $ColorID;
        }
               }


Bovenstaande om dus een array op te zetten met alle ColorID's welke uiteindelijk gechecked moeten worden. Hieronder de code om alle ColorID's aanwezig in totaal uit te lezen:

code:
1
2
3
4
5
6
7
8
9
10
$colorquery2 = "SELECT ColorID FROM Colors WHERE SupplierID = $SupplierID ORDER BY Priority ASC;";
$colorresult2=mysql_query($colorquery2);
while ($colorrow2 = mysql_fetch_row($colorresult2))
    {
    $ColorID = $colorrow2['0'];
    for ($i=0; $i <= sizeof($ColorID); $i++)
        {
        $ColorArrayDummy[$i] = $ColorID;
        }
    }


Nu heb ik volgens mij dus 2 arrays, welke ik moet gaan vergelijken. Ofwel. If array1 is array2 then checked, else unchecked. Echter, ik ben het spoor even bijster hoe dit te doen. Wellicht heeft iemand zin en tijd om me even wat beter wegwijs te maken? Of wellicht pak ik het volledig verkeerd aan?

[ Voor 3% gewijzigd door Verwijderd op 25-10-2004 19:12 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hier staat vast wel wat voor je tussen:
http://nl2.php.net/array

Arrays vergelijken is simpelweg het werken met verzamelingen, doorsnedes etc. (wiskunde is altijd leuk)

Acties:
  • 0 Henk 'm!

Verwijderd

Als array1==array2?

Array_diff

Misschien dat je daar wat aan hebt :)

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Nu online
Om te beginnen zou ik jouw code iets anders formuleren.
PHP:
1
2
3
4
5
6
7
8
9
10
//query
$colorquery = "SELECT ColorID FROM rel_ProductsColors WHERE ProductID = $ProductID;";
$colorresult=mysql_query($colorquery);

//results
if (mysql_num_rows($colorresult)) // gebeurt niet indien 0 (=false) rows
while ($colorrow = mysql_fetch_assoc($colorresult))
     {
       $colorArray[] = $colrow['ColorID'];
     }

Dit geeft een array met alle kleuren dir gedefinieerd zijn voor product $ProductID, jouw code geeft bij mijn weten een array terug met $colorArray[0] = *laatste kleur in db* en $colorArray[1] = *laatste kleur in db*. Ditzelfde probleem heb je met $colorArrayDummy in je tweede codevoorbeeld...

Ik denk dat er een aantal dingen handiger kunnen in je aplicatie, afhankelijk van wat precies de bedoeling is. Wat ik uit je verhaal kan afleiden iets als 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
25
26
//creëer array met alle kleuren voor product....
$query = mysql_query("SELECT colorID, product FROM rel_ProductsColors WHERE ProductID = $ProductID");
if (mysql_num_rows($query))
{
  while ($result = mysql_fetch_assoc($query))
    {
    $colors[] = $result['colorID'];
    }
}

//ceëer array met TRUE of FALSE voor aan- of afwezigheid voor kleur...
$query = mysql_query("SELECT colorID FROM Colors WHERE SupplierID = $SupplierID ORDER BY Priority ASC");
if (mysql_num_rows($query))
{
  while ($result = mysql_fetch_assoc($query))
    {
    $supplierColor[$result['colorID']] = (in_array($result['colorID'], $colors));
    }
}
 
//output checkboxes voor elke kleur
foreach ($color as $kleur)
{
 $checked = ($supplierColor[$kleur]) ? ' checked="checked"' : '';
 echo '<checkbox name="' .$kleur .'" value=1'  .$checked . '/>' ."\n";
}


Hieraan wil ik toevoegen dat het nogal lastig was om deze code te bedenken... Waarom? omdat je blijkbaar leveranciers in je kleurentabel hebt staan (heb je voor elke kleur een andere leverancier ofzo?). Kortom in mijn ogen heb je je database een beetje vreemd ingericht.
Daarnaast kan ik uit je verhaal niet helemaal krijgen wat precies de bedoeling is. Wat wil je eigenlijk op het scherm krijgen en wat heb je in je database? Ik ben uitgegaan van je queries en heb daar wat werkends omheen bedacht (typo's daargelaten), maar wellicht kan het geheel wat anders door een JOIN te gebruiken...

[ Voor 5% gewijzigd door T-MOB op 26-10-2004 04:18 ]

Regeren is vooruitschuiven