Avatar billede steenolsen1 Nybegynder
20. juni 2005 - 13:05 Der er 12 kommentarer

opdatere flere records på en gang

Hej,

jeg er igang med at udvikle en shop, hvor man til en vare skal kunne tilkoble x antal forskellige konfigurationsmuligheder. Så vidt er jeg med, og det spiller.

Varen registreres i tabellen varekurv, mens de produktvarianter (fra 0 -> ? antal forskellige varianter) der EVENTUELT vælges registreres i en separat tabel.

Mit problem er nu at få registreret disse konfigurationer i min db. Varen smides jo bare ind i EN record i databasen, men det kan være at der er 3 varianter, som skal registreres i et hug. Hvordan gør jeg det?

Kort "struktur" over varianterne (dropdown):
- første variant
- - indhold
- - indhold
- - indhold

- anden variant
- - indhold
- - indhold

Kan I følge mig?
Avatar billede jakobdo Ekspert
20. juni 2005 - 13:08 #1
At lave flere inserts samtidig kan gøres sådan her:
INSERT INTO table (col1, col2, col3)
VALUES
('val1','val2','val3'),
('val1','val2','val3'),
('val1','val2','val3');

Men Update tror jeg du skal lave en update for hver linie.
Avatar billede steenolsen1 Nybegynder
20. juni 2005 - 13:12 #2
Egentlig mener jeg nok også insert istedet for update, for jeg har jo ikke registreret kundens valg på forhånd :-)

Problemet består ikke syntaxen i et insert statement, men mere, hvordan jeg får indsat flere rækker. Det kan være at der er tre dropdown menuer, som kunden kan vælge fra. Han vælger noget i to af dem, og ikke den sidste. På den side, hvor jeg så registrerer disse valg, skal jeg på en eller anden måde tjekke disse valg, så de kan indsættes.

Antallet af valgmuligheder på første side er i øvrigt også dynamiske, så der er noget med den dynamiske navngivning af variablerne.... Tror jeg ?
Avatar billede steenolsen1 Nybegynder
22. juni 2005 - 10:23 #3
Jakobdo (eller andre) er I med på hvad jeg mener?

Jeg skal finde ud af:
- hvor mange variantgrupper er der, når den enkelte vare skal registreres
- ved hvilke variantgrupper er der foretaget et valg (tilkøb)

Derefter kan jeg indsætte mine records.
Avatar billede jakobdo Ekspert
23. juni 2005 - 10:10 #4
Jeg er desværre lidt tabt.
Det giver sgu ikke rigtigt mening i mit hoved! (men det er der mange ting som ikke gør) :o)

Det kode som laver det du ønsker gemme i DB, kan du ikke vise mig den side?
Avatar billede steenolsen1 Nybegynder
23. juni 2005 - 11:35 #5
haha - så er vi vist to :-)

Håber koden er til at gennemskue - taget ud af en større sammenhæng...

---

// Viser konfiguratorgrupper, hvis de findes og der abonneres på modulet
        if($_SESSION[konfigurator] == '1') {
            include("admin/connect.php");
            $q_konfigs = mysql_query("SELECT * FROM konf_vis_siden INNER JOIN konfiguratorgrupper ON konfiguratorgrupper.konf_id = konf_vis_siden.id_kge WHERE konf_vis_siden.vareid = '$_GET[vareid]'");
            $raekker_konfigs = mysql_num_rows($q_konfigs);
            if($raekker_konfigs > '0') {
                // Udskriver konfigurationsgrupper
                while($konfigs = mysql_fetch_array($q_konfigs)) {
                    echo '<tr>';
                    echo '<td colspan="2" align="center">';
                    echo '<input type="hidden" name="konfgruppeid'.$konfigs[id_kge].'" value="konfgruppeid'.$konfigs[id_kge].'">';
                    echo '<select name="emneid">';
                    echo '<option value="">'.$konfigs[konfgruppenavn].'</option>';
                    // Henter emner
                    $q_emner = mysql_query("SELECT * FROM konf_grupper_emner INNER JOIN konfiguratoremner ON konf_grupper_emner.id_emner = konfiguratoremner.konfemne_id WHERE konf_grupper_emner.id_grupper = '$konfigs[id_kge]'");
                    while($emner = mysql_fetch_assoc($q_emner)) {
                        echo '<option value="'.$emner[konfemne_id].'">- '.$emner[emnenavn];
                        if($emner[pris] > '') {
                            if(($_SESSION[priser_login] == '1') AND ($_SESSION[vis_priser] == '1')) {
                                echo ' (DKK '.$emner[pris].')';
                            } elseif($_SESSION[priser_login] <> '1') {
                                echo ' (DKK '.$emner[pris].')';
                            }
                        }
                        echo '</option>';
                    }
                    echo '</p>';
                    echo '</td>';
                    echo '</tr>';
                }
            }
        }       
       

---

Steen
Avatar billede jakobdo Ekspert
23. juni 2005 - 12:01 #6
Jeg antager du har en form du poster, altså via en submit knap!
Prøv at post dem til at en temp side, f.eks.:

temp.php

på den side laver du så:

<?php

echo "<pre>";
print_r($_POST):
echo "</pre>";

?>

Så kan du se hvilke data der er i hvilke felter!

Har du ikke en online side hvor jeg kan se output?

Er det options du vil have gemt i databasen?
De vises jo i en dropdown, så du kan kun sende en for hver... Eller tager jeg helt fejl?
Avatar billede steenolsen1 Nybegynder
23. juni 2005 - 12:45 #7
Fiks lille kodestump du har der.... Den viser følgende:

Array
(
    [fragt] => 9.00
    [vareid] => 2
    [pris] => 1999.00
    [konfgruppeid4] => konfgruppeid4
    [emneid] => 9
    [konfgruppeid8] => konfgruppeid8
    [antal] => 1
    [bestil_vare] => Tilføj
)


Det der angives her, og som jeg skal bruge er, konfgruppeid'erne (der kan svinge i antal) og emneid'erne - her er der kun valgt et.

Jeg navngiver konfgrupperne som konfgruppeid[$vis[id]] og samme princip med emnerne (indholdet af grupperne), og skal derefter have pillet konfgruppe og emneid væk, så der kun er id'erne tilbage. Det er altså både konfgruppen OG indholdet af den der skal gemmes i db'en, og ja der kan kun vælges et emne i hver dropdown.

Forestil dig
RAM (dropdown 1)
- 256 MB
- 512 MB

GRAFIKKORT (dropdown 2)
- producent 1
- producent 2

Osv....

Kan du følge mig?

Har desværre ikke
Avatar billede steenolsen1 Nybegynder
23. juni 2005 - 12:57 #8
Ups - har desværre ikke en online "version"
Avatar billede jakobdo Ekspert
23. juni 2005 - 19:56 #9
Ud fra det output du har vist ovenover!
Kan du ikke vise mig hvad du ønsker der skal gemmes i din database?
Og evt hvordan din tabel struktur ser ud i den tabel det skal indsættes i?
Avatar billede steenolsen1 Nybegynder
24. juni 2005 - 10:48 #10
Her er et dump af tabellen

CREATE TABLE `konf_kurv` (
  `id_konfkurv` int(11) NOT NULL auto_increment,
  `id_varekurv` int(11) NOT NULL default '0',
  `konfgruppeid` int(11) NOT NULL default '0',
  `emneid` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id_konfkurv`)
) TYPE=MyISAM;

Konfgruppeid'et der her skal registreres er 4, emneid'et er 9, konfgruppeid 8 skal ikke registreres, da der ikke er valgt noget emne i dropdown menuen (intet emneid).

id_varekurv er id'et (autoincrement) fra den normale varekurv, der hvor varen registreres.

Kan du følge mig?
Avatar billede jakobdo Ekspert
24. juni 2005 - 11:15 #11
Hvordan skal man finde ud af at emneid 9 høre sammen med konfig4?
Avatar billede steenolsen1 Nybegynder
24. juni 2005 - 11:20 #12
Øhh............ godt spørgsmål....

Og dog - jeg kan vel egentlig bare kalde variablen for <option value="$konfgruppeid-$emneid">bla bla</option>

Og så på siden der postes til skille variablen ad ved -'en. Det burde være muligt... Men det skal ændres så i min dropdown.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester