Toon posts:

[php/mysql] Tabel updaten in meerdere velden

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit met het volgende probleem:

in de database zitten bepaalde velden waaraan een waarde hangt. Op deze waarde worden ze later geselecteerd dus deze moet ik kunnen veranderen. Het makkelijke deel van het script heb ik al af, het uit de database halen van de velden en met die waarde laten zien. Dat gebeurd op de volgende manier:
PHP:
1
<?$query_cat = "select * from forum_cat order by volgorde ";$resultaat_cat = mysql_query($query_cat) or die(mysql_error());while ($cat = mysql_fetch_object($resultaat_cat)) {    echo "                <tr>                    <td>$cat->naam</td>                    <td><input type = 'text' name = '$cat->id' value = '$cat->volgorde' size = '5'></td>                </tr>?>

Ik wilde de waarde van volgorde dus aan het id van de categorie hangen omdat ik anders niet kon doorgeven aan de database waar hij die waarde moet veranderen. Nu is het probleem hoe ik dat ga doorgeven? Wat ik geprobeerd heb is dit:
PHP:
1
<?while ($catnaam = $naam) {        $query = "update forum_cat set volgorde = $volgorde where id = $id";        mysql_query($query) or die(mysql_error());    }?>

Maar dit werkt dus niet, heb het geprobeerd met verschillende waarden in het 'set' en 'where' stuk van de query maar niks lijkt te werken. Nou zal dit wel niet kunnen met de whilefunctie maar ik weet zo niet hoe ik het anders moet doen. Zou iemand mij een stukje in de goede richting kunnen helpen.

Alvast bedankt.

Edit: Ik ben de titel vergeten, sorry.

Verwijderd

Ik heb je scriptje even bekeken en het eerste stukje was allemaal duidelijk en in orde. In het tweede stukje heb ik alleen wat vraagtekens staan. De conditie van de tweede while loop bijvoorbeeld vind ik een beetje vreemd.
code:
1
while($catnaam = $naam)

Ik denk dat je deze moet veranderen in één van deze twee condities:
code:
1
2
3
4
5
6
7
// dubbele = teken om de twee variabelen te vergelijken
while($catnaam == $naam)

// of

// je hebt de namen van de variabelen fout
while($catnaam == $cat->naam)

Als dat het probleem niet oplost dan zou ik eens iets meer van je script posten zodat het voor ons wat duidelijker is wat er allemaal gebeurd. Die 'UPDATE' sql query is overigens ook niet echt netjes. Ik zou deze voortaan zo doen:
code:
1
2
3
4
5
6
7
8
9
10
11
$query = "UPDATE forum_cat SET volgorde = '".$volgorde."' where id = '".$id."'";

// of als je het helemaal netjes wilt doen zo

$query = "
UPDATE
  forum_cat
SET
  volgorde = '".$volgorde."'"
WHERE
  id = '".$id."';

Ik hoop dat hier je probleem mee verholpen is anders moet je ff iets meer van script laten zien.

  • Exirion
  • Registratie: Februari 2000
  • Nu online

Exirion

Gadgetfetisjist

Titel op verzoek aangepast.

"Logica brengt je van A naar B, verbeelding brengt je overal." - Albert Einstein


Verwijderd

Topicstarter
Exirion, bedankt.

Ik ben niet veel verder gekomen. Zal even hieronder mijn script in stukjes plaatsen met commentaar zodat alles duidelijk is.

De categoriën zijn voor een forum en er kan een categorie worden toegevoegd die niet onderaan hoort. Daarom is het niet mogelijk ze te selecteren op id dus heb ik een kolom volgorde gemaakt. Deze bestaat gewoon uit een tinyint want zo veel categoriën heb je niet nodig. Ik bouw mijn scripts zo op dat ik eerst de code krijg die de veranderingen in de database doorvoert en dan het formulier. Om mijn verhaal wat overzichtelijker te houden begin ik dus bij het tweede deel.
code:
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
else {

//Laat anders het formulier zien

echo "
    <html>
        <head>
            <title>Forum Admin</title>
        </head>

        <body>
            <form method = 'post' action = 'forum_volcat.php'>
            <input type = 'hidden' name = 'submit' value = '1'>
            <table>
    ";

$query_cat = "
            select 
                * 
            from 
                forum_cat 
            order by 
                volgorde
            ";
$resultaat_cat = mysql_query($query_cat) or die(mysql_error());
while ($cat = mysql_fetch_object($resultaat_cat)) {

    echo "
                <tr>
                    <td>$cat->naam</td>
                    <td><input type = 'text' name = '$cat->id' value = '$cat->volgorde' size = '5'></td>
                </tr>
        ";
}

echo "
                <tr>
                    <td colspan = '2'><center><input type = 'submit' value = 'Pas de volgorde aan'></center></td>
                </tr>
            </table>
            </form>
        </body>
    </html>
    ";
}
?>

Hier haal ik de namen van de verschillende categoriën uit de database met het getal wat staat voor hun volgorde. De bovenste heet één, daarna twee enz. Dit klopt nog allemaal volgens mij (de verbinding met de database wordt boven het if/else statement gemaakt). Als het formulier dan gesubmit wordt komt het bij de volgende code:
code:
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
<?

//Verbinding met de database

include ('forum_verbinding.php');

//Als het formulier gesubmit is

if ($submit == '1') {

$query_aantal = "
        select
            *
        from
            forum_cat
        ";
$resultaat_aantal = mysql_query($query_aantal) or die(mysql_error());
$aantal = mysql_fetch_object($resultaat_aantal);
            
    while ($catnaam == $aantal->naam) {
        $query = "
            update 
                forum_cat 
            set 
                volgorde = '".$id."'
            where 
                id = '".$name."'";
        mysql_query($query) or die(mysql_error());
    }
}

Ik heb nu dus geprobeerd om wat met je antwoord te doen maar ik kom er niet uit. De waarden die uit het forumlier komen zijn gekoppeld aan het id van de categorie dus de lus moet net zo lang doorgaan tot elke categorie is bijgewerkt. Het gaat fout bij de while en de update query maar ik zou echt niet weten hoe dat moet.

Nog even een extra vraagje, waarom zet je de variabelen in de query tussen "'.$var.'"?

  • DRvDijk
  • Registratie: Juni 2001
  • Laatst online: 12-02 15:52
Wat ik altijd doe bij het maken van een updatequery, is alle velden die geupdated moeten worden in een array zettten:
PHP:
1
<?$UpdateField[0] = "name = 'elviver'";$UpdateField[1] = "something = 'blaat'";$UpdateField[2] = "age = 20";?>

Zo'n array maak je natuurlijk niet op de manier zoals ik hier net liet zien, maar in een of ander loopje.

Daarna is het redelijk simpel:
PHP:
1
<?$query = "UPDATE tabel SET " . implode(", ", $UpdateField) . " WHERE id = ...";?>

En dat vuur je af.. Klaar :)

Verwijderd

Topicstarter
Maar zoals jij het doet update je maar 1 record en ik moet alle records updaten en ook nog naar verschillende waardes. Het id veranderd dus de hele tijd maar ik weet niet hoe ik dit in een lus kan zetten.

Verwijderd

Vervang die eerste text field voor dit:
code:
1
<input type = 'text' name[] = '$cat->id' value = '$cat->volgorde' size = '5'>

En de while loop op deze manier:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
while(pos($name) != "")
  {
    $query = "
    update 
    forum_cat 
    set 
    volgorde = '".$id."'
    where 
    id = '".pos($name)."'";

    mysql_query($query) or die(mysql_error());
    next($name);
  }

Ik heb geen zin om het allemaal uit te leggen. Ik hoop dat het duidelijk is en dat je zelf kan verzinnen waarom dit werkt :).

Verwijderd

Topicstarter
Ik denk dat ik wel snap wat je wilt maar het werkt niet. Je stopt alles in array met als key het id en als waarde het nummer van de volgorde en wil dan via een loop alles in de database zetten. Als ik jou code gebruik krijg ik deze foutmelding:
code:
1
Warning: Variable passed to current() is not an array or object in c:\apache\htdocs\forum\forum_volcat.php on line 11

Regel 11 is die met de while erin. Nu had ik even op php.net gezocht omdat ik de functies pos() en next() niet kende en toen kwam ik uit bij foreach(). Misschien dat daar iets mee te doen is. Verder ben ik toen bij devshed gaan kijken naar een artikel over arrys en ik kwam de functie is_array() tegen dus probeerde ik boven de while loop even deze code:
code:
1
echo is_array($name);

Dat zou de array moeten zijn dacht ik maar ik krijg een leeg scherm terug dus ik weet niet of het opslaan in een array is gelukt?

Heb[url="http://www.devshed.com/Server_Side/PHP/ArrayManip/page1.html"]dit[/url] artikel helemaal doorgewerkt maar ik kan niet echt iets bruikbaars vinden. Hoe kan ik de waarden uit het formulier nu in een array krijgen in een vorm waarin de key het id van de categorie is en de waarde het nummer van de volgorde?

Verwijderd

Topicstarter
Ik heb het gevonden. [url="http://gathering.tweakers.net/forum/list_message/2540564#2540564"]Deze[/url] post bracht uiteindelijk de oplossing. Dit is de code die ik gebruikt heb:

Input field van het formulier:
code:
1
<input type = 'text' name = '$cat->id' value = '$cat->volgorde' size = '5'>

De loop waarmee de wijzigingen worden aangebracht in de database:
code:
1
2
3
4
5
6
7
8
9
10
11
12
foreach($HTTP_POST_VARS as $name => $value) {
    
    $query = "
        update 
          forum_cat 
        set 
          volgorde = '".$value."'
        where 
          id = '".$name."'
        ";
    mysql_query($query) or die(mysql_error());
  }

Bedankt voor de hulp.
Pagina: 1