2 rijen in de database worden toegevoegd, terwijl dit er 1 moet zijn.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Inge V

Inge V

03/04/2012 10:43:59
Quote Anchor link
Ik heb een index.php en een enquete.php

Bij de index.php wordt de klas en docent uitgekozen en wordt je doorgestuurd naar enquete.php.
Wanneer de enquête is ingevuld is het de bedoeling dat de gegevens van index.php en enquete.php allebei bij elkaar in 1 regel in de database worden weggeschreven.

De database wordt nu op deze manier gevuld:
resultaatID, datum, klas, docent, 1A, 1B, 1C, 1D, 2A, 2B, 2C, 2D
1, 2012-04-03, B1a, docent1, 0, 0, 0, 0, 0, 0, 0, 0
2, 2012-04-03, (leeg), (leeg), 1, 0, 0, 0, 0, 1, 0, 0

Maar zou zo moeten worden:
resultaatID, datum, klas, docent, 1A, 1B, 1C, 1D, 2A, 2B, 2C, 2D
1, 2012-04-03, B1a, docent1, 1, 0, 0, 0, 0, 1, 0, 0

Dit zijn de codes:
index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
47
48
49
50
51
52
53
54
55
56
<?php
session_start();
include("include/header.php");
include("include/config.php");
?>


<html>
    <head>
        <title>Index</title>
        <link rel="stylesheet" type="text/css" href="include/style.css">
    </head>
    <body>

<?php
    $query2
= mysql_query('SELECT klas FROM klassen') or die(mysql_error());
    $query3 = mysql_query('SELECT docent FROM docenten') or die(mysql_error());
?>


 <form action="enquete.php" method="post">
    <table>
        <tr>
            <td>Klas:</td>
            <td><select name="klas">
            <?php
                while (list($klas) = mysql_fetch_row($query2)){
                    echo("<option value='$klas'>$klas</option>");
                    }

            ?>

            </select></td>
        </tr>
        <tr>
            <td>Docent:</td>
        <td><select name="docent">
            <?php
                while (list($docent) = mysql_fetch_row($query3)){
                    echo("<option value='$docent'>$docent</option>");
                    }

            ?>

            </select></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="start" name="start"/></td>
        </tr>
    </table>
</form>

<br>
<a href=login.php>LOGIN</a>

    </body>
</html>

<?php
include("include/footer.php");
?>


enquete.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
session_start();
include ("include/header.php");
include ("include/config.php");
?>


<html>
    <head>
        <title>Enquete</title>
        <link rel="stylesheet" type="text/css" href="include/style.css" />
    </head>
    <body>

 <form action="" method="post">
    <table>
    <?php

    //hoeveel vragen staan er in de db?
    $aantalvragenquery = mysql_query("SELECT * FROM vragen");
    $totaalaantalvragen = mysql_num_rows($aantalvragenquery);
    
    // haal vraag id's op
    $resultvraagids = mysql_query("SELECT vraagID FROM vragen");
    $i = 0;
    while ($rij = mysql_fetch_array($resultvraagids))
    {

        //query om de vragen op te halen en deze beneden erbij te zetten
        $resultvragen = mysql_query("SELECT vraag FROM vragen WHERE vraagID =" . $rij["vraagID"]);
        //query om te kijken voor elke vraag welke antwoorden erbij horen
        $resultantwoorden = mysql_query("SELECT antwoord FROM antwoorden WHERE vraagID =" .
        $rij["vraagID"]);
        //vragen loop
        while ($rij1 = mysql_fetch_array($resultvragen))
        {

            echo '<tr>
                        <td><b>'
. $rij1["vraag"] . '</b></td>
                     </tr>
                     <tr><td></td></tr>'
;
        }

            //antwoorden loop
            while ($rij2 = mysql_fetch_array($resultantwoorden))
            {

                $i++;
                echo '<tr>
                    <td><input type="radio" name="antwoord'
. $i . '"/>' . $rij2["antwoord"] . '</td>
                    </tr>'
;
                    //kijk voor elk antwoord of het antwoord is aangeklikt en laat het zien
                    if (isset($_POST['antwoord'.$i]))
                    {

                        $antwoord='antwoord';
                        ${$antwoord.$i}=1;
                    }
            }
        
    echo '<tr><td></td></tr>';
    }


    ?>
    
        <tr>
            <td></td>
            <td><input type="submit" value="stoppen" name="stoppen"/></td>
        </tr>
    </table>
</form>    
    
    
    </body>
</html>
<?php
        
if(!empty($_POST))
{

    //datum van vandaag
    $date = date("Y-m-d");
    $id = $_POST['resultaatID'];
    //resultaat invoeren
     $query = "INSERT INTO resultaten (resultaatID, klas, docent, datum, 1A, 1B, 1C, 1D, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, 4A, 4B, 4C, 4D, 5A, 5B, 5C, 5D, 6A, 6B, 6C, 6D, 7A, 7B, 7C, 7D, 8A, 8B, 8C, 8D, 9A, 9B, 9C, 9D, 10A, 10B, 10C, 10D, 11A, 11B, 11C, 11D, 12A, 12B, 12C, 12D, 13A, 13B, 13C, 13D, 14A, 14B, 14C, 14D, 15A, 15B, 15C, 15D)
        VALUES ('$id','$_POST[klas]','$_POST[docent]','$date','$antwoord1','$antwoord2','$antwoord3','$antwoord4','$antwoord5','$antwoord6','$antwoord7','$antwoord8','$antwoord9','$antwoord10','$antwoord11','$antwoord12','$antwoord13','$antwoord14','$antwoord15','$antwoord16','$antwoord17','$antwoord18','$antwoord19','$antwoord20','$antwoord21','$antwoord22','$antwoord23','$antwoord24','$antwoord25','$antwoord26','$antwoord27','$antwoord28','$antwoord29','$antwoord30','$antwoord31','$antwoord32','$antwoord33','$antwoord34','$antwoord35','$antwoord36','$antwoord37','$antwoord38','$antwoord39','$antwoord40','$antwoord41','$antwoord42','$antwoord43','$antwoord44','$antwoord45','$antwoord46','$antwoord47','$antwoord48','$antwoord49','$antwoord50','$antwoord51','$antwoord52','$antwoord53','$antwoord54','$antwoord55','$antwoord56','$antwoord57','$antwoord58','$antwoord59','$antwoord60')"
;    
        
    $result = mysql_query($query) or die ("FOUT: " . mysql_error());
}
    

include ("include/footer.php");
?>


Hoe kan ik dit oplossen? Het kan goed zijn dat er nog een aantal fouten inzitten. Ik moet namelijk deze website maken voor een stageopdracht, maar heb nooit echt php gedaan.

Zou eventueel iemand mij ook kunnen helpen met de rest van de website?

Toevoeging op 03/04/2012 10:48:29:

oeps mijn codes staan er nu raar in XD
Gewijzigd op 03/04/2012 10:51:11 door Inge V
 
PHP hulp

PHP hulp

15/11/2024 14:30:15
 
Gerhard l

gerhard l

03/04/2012 10:49:47
Quote Anchor link
Ik moet zeggen als dit je eerste php code is, ben je toch goed bezig. Maar er kan nog wel heel wat verbeterd worden:

Zet tijdens het testen dit bovenaan je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
?>


Geef je queries duidelijkere namen zo raak je niet in de war.
Or die is geen juiste manier voor foutafhandeling gebruik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?
$query
= mysql_query('blabal');
if($query === false){
    echo mysql_error();
}

else{
    //gadoor
}
?>


Om fouten te voorkomen, kan je beter je variabelen buiten de quotes halen in je query, en kan je ze direct beveiligen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$query
= mysql_query("INSERT INTO iets(veld, nogeenveld) VALUES('". mysql_real_escape_string($veld) ."','".mysql_real_escape_string($nogeenveld)."')")
?>


Zo te zien is je database niet erg handig ingedeeld, gebruik een apart tabel voor de vragen en een tabel voor de antwoorden, deze koppel je aan elkaar met ID's.

Om je codes goed weer te geven met je [code][/code] tags om je gehele code heen zetten.
Gewijzigd op 03/04/2012 10:56:43 door gerhard l
 
Reshad F

Reshad F

03/04/2012 10:49:59
Quote Anchor link
wijzig je codes eventjes a.u.b. alleen de php code is genoeg. :)

en wat is het probleem dan? wat voor foutmelding krijg je wat snap je niet? waar wil je mee geholpen worden?

nu zeg je ik heb A het moet worden B en dit is de code ..

verder..
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_POST[klas]  ?>
moet zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_POST['klas'] ?>
dus met de enkele quotes ( pas dit overal toe in je query )

gebruik mysql_fetch_assoc ipv Fetch..

en waarom de tellertje in je while?

Toevoeging op 03/04/2012 10:57:46:

lees deze tut van roel even door dan weetje gelijk hoe je foutafhandeling moet toepassen en veel van de andere fouten die je nu hebt moet aanpassen.

http://www.phphulp.nl/php/tutorial/overig/beginnersfouten-tegengaan/763/
Gewijzigd op 03/04/2012 10:55:10 door Reshad F
 
Inge V

Inge V

03/04/2012 10:59:01
Quote Anchor link
Gerhard l op 03/04/2012 10:49:47:
Ik moet zeggen als dit je eerste php code is, ben je toch goed bezig. Maar er kan nog wel heel wat verbeterd worden:

Zet tijdens het testen dit bovenaan je script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
?>

Ik heb wat hulp gehad van de icters hier, maar die kunnen natuurlijk niet alles gaan voorkauwen :P

Hij geeft aan:
Undefined variable: antwoord2 in /var/www/enquete.php on line 80 Notice: Undefined variable: antwoord3 in /var/www/enquete.php on line 80.. enz, enz.
Maar omdat hij wordt gestuurd naar zijn eigen pagina, wordt dat onderste gedeelte INSERT wel uitgevoerd en krijg ik wel een 1 in de database als die radiobutton is aangevinkt. Ik denk dat ik dat gedeelte op de verkeerde plaats heb staan, want als ik hem naar een andere pagina stuur dan voert ie het niet uit. Ik weet alleen niet waar ik het moet zetten dan. Of wat ik moet aanpassen.
 
Erwin H

Erwin H

03/04/2012 11:01:12
Quote Anchor link
En er is ook nog wel iets te doen aan de enorme hoeveelheid queries die je uitvoert. Volgens mij ben je daar al eens eerder op gewezen. Bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$aantalvragenquery
= mysql_query("SELECT * FROM vragen");
$totaalaantalvragen = mysql_num_rows($aantalvragenquery);
    
// haal vraag id's op
$resultvraagids = mysql_query("SELECT vraagID FROM vragen");
?>

Bij de tweede query doe je natuurlijk precies hetzelfde als bij de eerste, alleen haal je dan alleen de vraagID kolom op, in plaats van alle kolommen. Die mysql_num_rows kan je dus net zo goed doen op de tweede query, kan je die eerste gewoon weglaten.

Vervolgens doe je nog eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$resultvragen
= mysql_query("SELECT vraag FROM vragen WHERE vraagID =" . $rij["vraagID"]);
?>

Waarom dat ook niet gewoon meteen invoegen in de eerdere query waar je de IDs ophaalt? Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
SELECT vraagID, vraag FROM vragen
?>

scheelt je weer een x-aantal queries.

Maar goed zoals gezegd heb ik het idee dat dit tegen dovemansoren is gezegd.
 
Reshad F

Reshad F

03/04/2012 11:02:56
Quote Anchor link
undefined variable houd in dat je een variable hebt die nergens opgehaald wordt / gelinkt wordt aan.. ( weet niet of ik het zo goed uitleg ) dus kijk even waar die vandaan komen. lees even de tut van roel door die ik hiervoor gepost heb en ik denk dat je 80% van je fouten kwijt bent.
 
Inge V

Inge V

03/04/2012 11:29:14
Quote Anchor link
Reshadd farid op 03/04/2012 10:49:59:
wijzig je codes eventjes a.u.b. alleen de php code is genoeg. :)

en wat is het probleem dan? wat voor foutmelding krijg je wat snap je niet? waar wil je mee geholpen worden?

nu zeg je ik heb A het moet worden B en dit is de code ..

verder..
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_POST[klas]  ?>
moet zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $_POST['klas'] ?>
dus met de enkele quotes ( pas dit overal toe in je query )

gebruik mysql_fetch_assoc ipv Fetch..

en waarom de tellertje in je while?


Met het tellertje in de while worden de aantal antwoorden die er in de database staan geteld en worden dan netjes op de pagina weergeven.

Als ik er $_POST['klas'] van maak, dan krijg ik een leeg scherm, maar dat heeft denk ik ook met de andere cootjes te maken die ik in mijn script heb staan... weet niet precies hoe de rest dan moet.

Ik wil dat de gegevens die gekozen worden bij index.php in dezelfde rij komen als de gegevens die ingevult worden bij enquete.php


Bij enquete.php haalt hij de vragen op uit de tabel vragen en de antwoorden op uit de tabel antwoorden. Iedere vraag heeft 4 antwoorden en dat wordt ook netjes op de pagina gezet:
vraag1
antwoord1
antwoord2
antwoord3
antwoord4
vraag2
antwoord5
antwoord6
enz..

Nu is het zo wanneer vraag1, antwoord1 is gekozen wordt deze in de database weggeschreven in de tabel resultaten onder de kolom 1A als een 1. wanneer de radiobutton niet is gekozen, komt er een 0 te staan. Zo wordt er dus bij vraag2, antwoord6 een 1 neergzet onder de kolom 2B.

Het enige grote probleem is dus dat er 1 rij komt waar de gekozen radiobuttons in komen te staan + datum en 1 aparte rij voor de gekozen klas en docent op de indexpagina. Ik wil dat dit op 1 rij terecht komt dat het in de database zo weggeschreven wordt:
resultaatID, klas, docent, datum, 1A, 1B, 1C, 1D, 2A, 2B, 2C, 2D..
1, B1a, docent1, 2012-04-03, 1, 0, 0, 0, 0, 1, 0, 0
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/04/2012 14:27:39
Quote Anchor link
Je script volgorde is verkeerd. Je handeld namelijk een formulier in hetzelfde script af waarmee je het formulier toont. Geen probleem, maar dan is het beter om eerst te kijken of er gepost - if ($_SERVER['REQUEST_METHOD'] == 'POST') - zoja doe de dingen met de database zo niet dan toon je het formulier.
Kunnen er op één vraag meerdere antwoordrn gegeven worden?
 
Inge V

Inge V

03/04/2012 15:26:04
Quote Anchor link
Ger van Steenderen op 03/04/2012 14:27:39:
Je script volgorde is verkeerd. Je handeld namelijk een formulier in hetzelfde script af waarmee je het formulier toont. Geen probleem, maar dan is het beter om eerst te kijken of er gepost - if ($_SERVER['REQUEST_METHOD'] == 'POST') - zoja doe de dingen met de database zo niet dan toon je het formulier.
Kunnen er op één vraag meerdere antwoordrn gegeven worden?


Waar kan ik dit dan precies plaatsen? Of als dit toch niet handig is. Hoe kan ik ervoor zorgen dat ik het formulier tonen

Ik heb per vraag 4 antwoorden.
Zou je me eventueel nog meer kunnen helpen met codes voor de kleine website die ik aan het maken ben? Ik ga namelijk te langzaam vooruit, want ik heb te weinig kennis van php, maar toch moet het voor mijn stageopdracht...
 
Obelix Idefix

Obelix Idefix

03/04/2012 16:27:17
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

04/04/2012 09:30:09
Quote Anchor link
Natuurlijk kan ik je verder helpen. Dus als je eerst eventjes vertelt wat die opdracht precies inhoud.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.