[PHP] Bewerken meerdere identieke records

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Het zit zo:

Ik ben op het moment bezig met het maken van een poll script in PHP voor een website van mij. Het beheer-gedeelte om precies te zijn, het Editen van een poll om nog preciezer te zijn.

Het grootste gedeelte is al klaar, echter ik heb geen idee hoe ik de gegeven daadwerkelijk bewerken moet.

Ik heb 2 tabellen: Poll_vragen en poll_antwoorden. Poll vragen bevat de volgende velden:

id ( spreekt voor zich)
vraag (de vraag zelf)
votes (totaal aantal stemmen)
timestamp (startdatum / tijd)

Poll antwoorden bevat de volgende:

answer_id ( spreekt voor zich)
vraagID (de vraag waar deze keuze bij hoort)
antwoord ( de tekst)
votes (aantal stemmen voor deze keuze)

Nu heb ik dus een formulier die de vraag en antwoordgegevens ingevuld heeft, waar je ze bewerken kan. Het vraag-gedeelte is verder goed, het antwoord gedeelte is als volgt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$id = $_POST['id'];

$sql = "SELECT *
       FROM poll_antwoorden 
           LEFT JOIN poll_vragen
       ON poll_antwoorden.vraagID = poll_vragen.id
           WHERE poll_vragen.id = '$id'
       ORDER BY poll_vragen.id DESC";
                
       $query = $site->query($sql);
        
       while ($stuff = $site->fetch_array($query))
       {            
            echo "Answer : <input type=\"text\" name=\"answer[]\" width=\"80%\" value=\"".$stuff['antwoord']."\">
                       <br>\n";
            
       }
        echo '<br>
                        <input type="hidden" name="id" value="'.$id.'">
                        <input type="submit" value="Submit" name="submit">
                        <input type="reset" value="Reset">';


Juist, die genereert dus een lijstje met simpele form fields met de vragen al ingevuld. Het probleem ligt nu bij het invoegen van de bewerkte gegevens: Hoe kan ik middels een foreach(); funcie of iets dergelijks ervoor zorgen dat het ID van het antwoord ook ingevuld word?

Op het moment heb ik een foreach(); die de bewerkte vragen in vult, maar die werkt gewoon niet omdat er geen antwoord_id in de query gespecificeerd word. Ik heb al geprobeerd om mbv enkele <input type="hidden"> tags het ID in te vullen, maar dan krijg ik dubbele foreach();-en en probeert het script 100 queries ipv 10 uit te voeren.

Google levert niks op (of ik weet niet hoe ik moet zoeken), dus ga ik naar GoT voor hulp :). Indien er nog vragen zijn aangaande mijn vraag, stel ze gerust.

(Note: PHP code layout is een beetje funky, ik geef de schuld aan de forum software :P)

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Ik snap niet helemaal wat je bedoelt, maar volgens mij wil je gewoon als name voor je inputfield name="answer[$anwer_id]".

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Dat kan helpen ja *voelt zich een idioot*. Echter nog een vraagje, en dit zal waarschijnlijk wel n00big klinken, maar hoe kun je het ID van de array die daarmee gemaakt word achterhalen / aanroepen? MAW, hier komt het stukje code die de arrays in de DB smijt:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        foreach ($_POST['answer'] AS $thing)
        {
        
            if (isset($thing)){
                //If an answer has been filled in, inserts the answer into the database along with the question ID number.
                
                $sql = "UPDATE poll_antwoorden SET antwoord = '$thing' WHERE answer_id = $id";
                $site->query($sql);
                
            }else{
                //when there are no more answers, forwards the user to the control menu with an OK message.
                header("location: control_polls.php?action=done");
                exit();
            }
        }


MAW, hoe kun je de array ID aanroepen zodat je die toekennen kunt aan $id in de SQL?

[ Voor 5% gewijzigd door YopY op 01-07-2005 14:02 ]


Acties:
  • 0 Henk 'm!

Verwijderd

En wat dacht je er van om de totaal aantal votes bij de vraag ipv in de database te updaten gewoon op te tellen van de antwoorden.

Vraag (total votes (vraag 1 + vraag 2 +vraag 3)
  • Vraag 1 10 vote
  • Vraag 2 13 vote
  • Vraag 3 28 vote
Scheelt je weer wat inserts etc.

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Verwijderd schreef op vrijdag 01 juli 2005 @ 14:02:
En wat dacht je er van om de totaal aantal votes bij de vraag ipv in de database te updaten gewoon op te tellen van de antwoorden.

Vraag (total votes (vraag 1 + vraag 2 +vraag 3)
  • Vraag 1 10 vote
  • Vraag 2 13 vote
  • Vraag 3 28 vote
Scheelt je weer wat inerts etc.
True, ik ben niet de originele auteur van de basis van het poll script anders had ik het zo ook wel aangepakt. Ik verander het nog wel, het is nog een betijde versie van het eindproduct.

Acties:
  • 0 Henk 'm!

Verwijderd

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
27
28
<?
$id = $_POST['id'];

$sql = "SELECT *
       FROM poll_antwoorden 
           LEFT JOIN poll_vragen
       ON poll_antwoorden.vraagID = poll_vragen.id
           WHERE poll_vragen.id = '$id'
       ORDER BY poll_vragen.id DESC";
                
       $query = $site->query($sql);
        
       while ($stuff = $site->fetch_array($query))
       {            
            echo "Answer : <input type=\"text\" name=\"answer[]\" width=\"80%\" value=\"".$stuff['antwoord']."\">
            echo '<input type="hidden" name="id[]" value="'.$id.'">';
                       <br>\n";
            
       }
        echo '<br>
                        
                        <input type="submit" value="Submit" name="submit">
                        <input type="reset" value="Reset">';

foreach ($_POST['answer']  as $key=>$value){
   // zo  iets
   echo $_POST[id][$key];
}

?>
weet niet of dit zo wekt maar iets in die geest ;)

[ Voor 177% gewijzigd door Verwijderd op 01-07-2005 14:10 ]


Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Dat is 'em, hartelijk dank voor jullie hulp :).

EDIT: de foreach ($_POST['answer'] as $key=>$value) dus, dit is de werkende code:

Update PHP code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        foreach ($_POST['answer'] as $key=>$value)
        {
        
            if (isset($value)){
                //If an answer has been filled in, inserts the answer into the database along with the question ID number.
                
                $sql = "UPDATE poll_antwoorden SET antwoord = '$value' WHERE answer_id = $key";
                $site->query($sql);
                
            }else{
                //when there are no more answers, forwards the user to the control menu with an OK message.
                header("location: control_polls.php?action=done");
                exit();
            }
        }


Formulier code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        $sql = "SELECT *
                FROM poll_antwoorden 
                LEFT JOIN poll_vragen
                ON poll_antwoorden.vraagID = poll_vragen.id
                WHERE poll_vragen.id = '$id'
                ORDER BY poll_vragen.id DESC";
                
        $query = $site->query($sql);
        
        while ($stuff = $site->fetch_array($query))
        {       
                    
            //generates a list of form fields. 
            $answer_id = $stuff['answer_id'];
            
            echo "Answer : <input type=\"text\" name=\"answer[$answer_id]\" width=\"80%\" value=\"".$stuff['antwoord']."\"><br>\n";
            
        }
        echo '<br><input type="hidden" name="answer[]"><input type="hidden" name="id" value="'.$id.'"><input type="submit" value="Submit" name="submit">  <input type="reset" value="Reset">';


(Note to self: Werk er nog ff aan zodat je niet nog een hidden answer[] moet hebben voor het geval alle 10 velden ingevuld worden)

[ Voor 113% gewijzigd door YopY op 01-07-2005 14:13 ]

Pagina: 1