Avatar billede nikksen Nybegynder
24. september 2006 - 21:57 Der er 9 kommentarer og
1 løsning

Update af dynamiske rækker!

Hejsa, jeg vil gerne køre en UPDATE til db med flere rækker på éen gang, men det er ikke det samme antal rækker hver gang. Jeg havde forsøgt mig med en for-funktion, men fik den aldrig til at lykkedes og nu har jeg lige fundet ud af at jeg skal bruge 'foreach' istedet.

Er der derfor nogen som kan omskrive følgende script til 'foreach' for mig, da jeg ikke har kendskab til denne script og heller ikke er nogen haj til PHP i forvejen:


if(!isset($_POST['edituger'])) {
            $query  = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='".rawurldecode($ugested)."'");
            while ($uge = mysql_fetch_array($query)){
             
                // Val d'Isere 06/07 ugeliste
                if($uge['bsted'] == "valdisere0607") {
                    eval("\$ugerne .= \"".template("nikk_admin_galleri_edituger_ugerne")."\";");
                // Alpe d'Huez 04/05 ugeliste
                }elseif($uge['bsted'] == "alpedhuez0405") {
                    eval("\$ugerne .= \"".template("nikk_admin_galleri_edituger_ugerne")."\";");
                }

            }
            for ( $i = 0; $i < 5; $i++ ) { 
                eval("\$site_body = \"".template("nikk_admin_galleri_edituger")."\";"); // '$ugerne' indsættes i denne template som selve rækkerne
            }
        }else{     
            $query  = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'");
            $uge = $db->fetch_array($query);

            $uge = mysql_query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'");
            $n = mysql_num_rows($uge);
            for ( $i = 0; $i < $n; $i++ ) {
         
                $xbuge            = isset($newbuge[$i]) ? checkInput($newbuge[$i], 'no', 'no', 'javascript', false) : '';
                $xbsorter            = isset($newbsorter[$i]) ? checkInput($newbsorter[$i], 'no', 'no', 'javascript', false) : '';
                $xbsted            = isset($newbsted[$i]) ? checkInput($newbsted[$i], 'no', 'no', 'javascript', false) : '';

                // Indsættes i database til retning af indlæg
                $db->query("UPDATE nikksite_billedeuger SET buge='$xbuge', bsorter='$xbsorter', bsted='$xbsted' WHERE bsted='$ugested'");

                $site_body = "<font class=txt><p align=center>Ugerne er opdateret!</p></font>";
            }
         
            //redirect('index.php?action=admin&sub=galleri', 9, X_REDIRECT_JS);
        }


Html-rækker i uploadformlen ser således ud:


<tr>
<td bgcolor="$altbg2" class="tablerow" align="center"><input type="text" name="newbsorter[]" value="$uge[bsorter]" size="3" /></td>
<td bgcolor="$altbg2" class="tablerow" align="center"><input type="text" name="newbuge[]" value="$uge[buge]" size="2" /></td>
<td bgcolor="$altbg2" class="tablerow" align="center"><select size="1" name="newbsted[]">
  <option value="$uge[bsted]">$uge[bsted]</option>
  <option value=""></option>
  <option value="valdisere0607">Val d'Isere 06/07</option>
  <option value="alpedhuez0405">Alpe d'Huez 04/05</option>
</select></td>
</tr>
Avatar billede nikksen Nybegynder
25. september 2006 - 17:56 #1
Er der virkelig ingen der vil hjælpe?
Avatar billede ellebaek Nybegynder
25. september 2006 - 23:48 #2
går ud fra at html-formen er denne template: template("nikk_admin_galleri_edituger")

så mangler du lige en tæller i din form...

<tr>
<td bgcolor="$altbg2" class="tablerow" align="center"><input type="text" name="newbsorter[$i]" value="$uge[bsorter]" size="3" /></td>
<td bgcolor="$altbg2" class="tablerow" align="center"><input type="text" name="newbuge[$i]" value="$uge[buge]" size="2" /></td>
<td bgcolor="$altbg2" class="tablerow" align="center"><select size="1" name="newbsted[$i]">
  <option value="$uge[bsted]">$uge[bsted]</option>
  <option value=""></option>
  <option value="valdisere0607">Val d'Isere 06/07</option>
  <option value="alpedhuez0405">Alpe d'Huez 04/05</option>
</select></td>
</tr>

prøv lige dette... men fatter lige hat af din kode... er nok ret træt...
Avatar billede nikksen Nybegynder
25. september 2006 - 23:53 #3
nej, det var template("nikk_admin_galleri_edituger_ugerne") hehe

men slettede sådan set bare infoen i felterne, så det virkede ikke.
Avatar billede coderdk Praktikant
28. september 2006 - 02:28 #4
Jeg kan ikke helt gennemskue hvad du vil :)
Avatar billede nikksen Nybegynder
28. september 2006 - 02:43 #5
Ok, jeg forklarer lige hele konceptet...

1) Det hele er til mit galleri.
2) I dette galleri kan jeg uploade billeder som jeg gerne vil have sorteret efter hvilken uge de er fra.
3) Denne uge skal man vælge fra en dropdownliste i galleriet.
4) Jeg vil derfor køre en seperat tabel med uger, som har et sorteringsid så dropdownlisten med uger f.eks. kan starte fra uge 42 og løbe henover nyt osv..
5) Hvert billede har samtidigt fået tilføjet et felt med den uge billedet er fra så disse to ting kan kædes sammen.

Det jeg så gerne ville have er:

6) En admin-sektion hvor man kan rette i sorteringsid'et for alle ugerne på éen gang, så jeg ikke er nødt til at åbne hver enkelt uge ad gangen.
7) Da der løbende vil blive tilføjet flere uger til listen (og derfor ikke er et fast antal) som så skal kunne rettes i et og samme tag, har jeg læst mig frem til at man skal bruge "foreach"-funktionen og ikke den "for"-funktion som jeg har forsøgt at indbygge i mit script ovenover.

Jeg håber at det gjorde det lidt mere klart. coderdk, du kan sikkert genkende noget det multiple upload script du tidligere hjalp mig med. Altså dele af scriptet som:


for ( $i = 0; $i < 5; $i++ ) {


og


for ( $i = 0; $i < $n; $i++ ) {
       
                $xbuge            = isset($newbuge[$i]) ? checkInput($newbuge[$i], 'no', 'no', 'javascript', false) : '';
                $xbsorter            = isset($newbsorter[$i]) ? checkInput($newbsorter[$i], 'no', 'no', 'javascript', false) : '';
                $xbsted            = isset($newbsted[$i]) ? checkInput($newbsted[$i], 'no', 'no', 'javascript', false) : '';


Anyways, håber du kan hjælpe mig her! Jeg er klar over at det sikkert er noget af et arbejde, men jeg ved ikke hvordan jeg ellers skal få det fixet. :)
Avatar billede coderdk Praktikant
28. september 2006 - 09:20 #6
Lige en anden ting - Jeg håber at du har mere end blot ugenummer, da det vil skabe forvirring når der er flere år i galleriet, Derfor ville det være smart med yyyyww (yyyy=år, ww=uge, i.e. 200642) - så kan du også sortere på det...

Så lige dette:

            $query  = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'");
            $uge = $db->fetch_array($query);

            $uge = mysql_query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'");
            $n = mysql_num_rows($uge);


Kan skrives som:

            $query  = $db->query("SELECT * FROM nikksite_billedeuger WHERE bsted='$ugested'");
            $n = mysql_num_rows($query);
            $uge = $db->fetch_array($query);

Jeg forstår ikke rigtig koden, det du gør er at loope over alle records i nikksite_billedeuger hvor bsted = $ugested
Så kører du en UPDATE på disse records, og sætter buge, bsorter og bsted for alle disse - Den vil dog kun ændres første gang, hvis brugeren har valgt et andet bsted...
I.e. hvis brugeren har indtastet "BC" for bsted, for dette resultatsæt:

buge | bsorter | bsted
x1  |  y1    |  AB
x2  |  y2    |  AB
x3  |  y3    |  AB

Vil dit loop køre 3 gange, men kun den FØRSTE iteration vil opdatere tabellen, og så vil disse records se sådan ud:

buge | bsorter | bsted
nyx1 |  nyy1  |  BC
nyx1 |  nyy1  |  BC
nyx1 |  nyy1  |  BC

Jeg er bange for jeg stadig ikke er helt med på hvad du vil ;)
Avatar billede nikksen Nybegynder
28. september 2006 - 17:44 #7
Jeg behøver ikke et år for 'bsted' har f.eks. værdierne 'valdisere0607' eller 'alpedhuez0405'. Altså sæsoner.

buge | bsorter | bsted
nyx1 |  nyy1  |  BC
nyx1 |  nyy1  |  BC
nyx1 |  nyy1  |  BC

Det der er præcist det jeg får nu, men det er ikke sådan jeg vil have det. Jeg har gjort det muligt for dig at kigge i admin-systemet hvor det er:

http://nikk.offpisteguide.dk/index.php?action=admin&sub=galleri

Dette er galleriet. Nedeunder upload-felterne er der en formular til at oprette nye uger og til venstre for den formula kan du klikke dig ind under ugerne for "Val d'Isere 06/07" for at rette ugerne. Måske det giver et bedre overblik over hvad jeg vil.

Min ovenstående kode er forkert - spørgsmålet er: Hvordan skal den rigtige kode se ud?
Avatar billede coderdk Praktikant
28. september 2006 - 18:17 #8
Hvis jeg forstår dig korrekt, så kan det gøres ved også at sende de gamle værdier med, og lave din update sådan:

            $n = count( $_POST['newbuge'] );
            for ( $i = 0; $i < $n; $i++ ) {
       
                $xbuge            = isset($newbuge[$i]) ? checkInput($newbuge[$i], 'no', 'no', 'javascript', false) : '';
                $xbsorter            = isset($newbsorter[$i]) ? checkInput($newbsorter[$i], 'no', 'no', 'javascript', false) : '';
                $xbsted            = isset($newbsted[$i]) ? checkInput($newbsted[$i], 'no', 'no', 'javascript', false) : '';

                $xoldbuge            = isset($oldbuge[$i]) ? checkInput($oldbuge[$i], 'no', 'no', 'javascript', false) : '';
                $xoldbsorter            = isset($oldbsorter[$i]) ? checkInput($oldbsorter[$i], 'no', 'no', 'javascript', false) : '';
                $xoldbsted            = isset($oldbsted[$i]) ? checkInput($oldbsted[$i], 'no', 'no', 'javascript', false) : '';

                // Indsættes i database til retning af indlæg
                $sql = "
                    UPDATE
                        nikksite_billedeuger
                    SET
                        buge='$xbuge'
                        ,bsorter='$xbsorter'
                        ,bsted='$xbsted'
                    WHERE
                        bsted='$xoldbsted'
                        AND bsorter = '$xoldbsorter'
                        AND buge = '$xoldbuge'
                    ";
               
                $db->query( $sql );

                $site_body = "<font class=txt><p align=center>Ugerne er opdateret!</p></font>";
            }


og din form så noget i stil med:

<tr>
<td bgcolor="<?= $altbg2 ?>" class="tablerow" align="center">
    <input type="text" name="newbsorter[]" value="<?= $uge[bsorter] =>" size="3" />
    <input type="hidden" name="oldbsorter[]" value="<?= $uge[bsorter] ?>" />
</td>
<td bgcolor="<?= $altbg2 ?>" class="tablerow" align="center">
    <input type="text" name="newbuge[]" value="<?= $uge[buge] ?>" size="2" />
    <input type="hidden" name="oldbuge[]" value="<?= $uge[buge] ?>" size="2" />
</td>
<td bgcolor="<?= $altbg2 ?>" class="tablerow" align="center">
    <input type="hidden" name="oldbsted[]" value="<?= $uge[bsted] ?>" size="2" />
    <select size="1" name="newbsted[]">
      <option value="<?= $uge[bsted] ?>"><?= $uge[bsted] ?></option>
      <option value=""></option>
      <option value="valdisere0607">Val d'Isere 06/07</option>
      <option value="alpedhuez0405">Alpe d'Huez 04/05</option>
    </select>
</td>
</tr>
Avatar billede nikksen Nybegynder
28. september 2006 - 18:59 #9
Yes! Det fungerer! :-D

Smid et svar igen igen igen igen...... :)
Avatar billede coderdk Praktikant
28. september 2006 - 19:02 #10
Sågerne :)
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



IT-JOB

Unik System Design A/S

Strategic Customer Success Manager

Danoffice IT

Senior AI Specialist

ENVO IT A/S

Hardware Specialist

Københavns Professionshøjskole

Cloudarkitekt