Toon posts:

Probleem met MySql/PHP

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hee, ik moet een enquete maken op deze manier maar ik heb een probleem en ik kom er niet zelf uit, ik ben een beginner in php/mysql. Ik denk ook dat de "$........." woorden voor geen meter kloppen want die heb ik ergens anders vandaan.

Database naam is: Alcoholtest
Tabel namen zijn: antwoorden
vragen

antwoorden bestaat uit de structuur:
ID int(11) AUTO_INCREMENT
vraag text
antwoord text

vragen bestaat uit de structuur:
Vraagnummer int(11) AUTO_INCREMENT
Vraag text
A text
B text
C text

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
29
<?php

{
echo 'Veel succes, '.$_POST['naam'].'!</p>';
}

mysql_connect("localhost", "root", "usbw");

mysql_select_db("alcoholtest");

$resultaten = mysql_query("select * from vragen") or die("Kan query niet uitvoeren: ".mysql_error());
mysql_query("insert into resultaten values('','vraag','antwoorden')") or die("Kan niet invoegen: ".mysql_error());
$teller = 0;

while($record = mysql_fetch_array($resultaten))
    {
    $teller = $teller + 1;
    echo'<p>'; 
    echo '<h3> '.$record['Vraag'].' </h3>';
                echo'<ul> 
                        <li><input type="radio" value="A" name="Gegeven'.$teller.'" />'.$record['A'].' </li>
                        <li><input type="radio" value="B" name="Gegeven'.$teller.'" />'.$record['B'].' </li>
                        <li><input type="radio" value="C" name="Gegeven'.$teller.'" />'.$record['C'].' </li>
                    </ul>';
    
    echo'</p>';
    }
    
?>

Acties:
  • 0 Henk 'm!

  • johnkeates
  • Registratie: Februari 2008
  • Laatst online: 04-07 16:30
Ah, de USB webserver. Klinkt alsof dit je huiswerk is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De code heb ik zelf gemaakt, maar kom er niet uit wat ik fout doe aangezien bij "vraag" gewoon vraag wordt ingetypt en bij 'antwoord' antwoord, ik weet dat de fout hier in line 12 zit, maar hoe ik het moet verbeteren weet ik niet.

Acties:
  • 0 Henk 'm!

Verwijderd

"insert into resultaten"

Moet resultaten geen antwoorden zijn?

Acties:
  • 0 Henk 'm!

  • Lampje
  • Registratie: Mei 2006
  • Laatst online: 27-03 19:48
Er klopt niets van je code? Eerst haal je je vragen op (regel 11), dan voeg je op regel 12 ineens resultaten toe zonder dat je echt de resultaten mee geeft.

Sowieso mis je een hoop op regel 2 denk ik? Iets van een IF-statement?

Acties:
  • 0 Henk 'm!

  • Full_hyperion
  • Registratie: Februari 2003
  • Laatst online: 02-10 14:08
Zoals Lampje al een beetje zegt, je doet 2 dingen door elkaar, namelijk het laten zien van de vragen, en het opslaan van de resultaten. Maak daar eens 2 losse pagina's van.

Je database is ook niet echt handig gemaakt. De vragen tabel is prima (genomen dat er altijd 3 keuzes zijn bij een vraag), maar de antwoorden wil je koppelen aan een vraag, en het liefst niet door de vraag te herhalen. In de antwoorden tabel moet je daarvoor de kolom "vraag" vervangen door "Vraagnummer", die het ID van de vraag bevat.

Verder heb je geen <form> tag gebruikt, en wil je bij de radio-buttons niet de teller gebruiken in de name, maar het vraagnummer. Anders kun je de antwoorden bij het opslaan nooit meer koppelen aan een vraag.

Edit: oh, en je doet "insert into resultaten ...", maar je hebt helemaal geen tabel "resultaten".

[ Voor 6% gewijzigd door Full_hyperion op 04-03-2015 20:21 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke Oke, even kijken, Jaa ik heb er vrij weinig verstand van en dokter graag dingen zelf uit, maar dit ging me niet lukken.
Ik neem aan dat ik nu al vooruitgang heb geboekt? Ik heb ook wat Full_hyperion voorstelde de 'vraag' verandert naar 'Vraagnummer' in de kolom.
Maar ik begrijp niet wat je nu nog bedoeld met het scheiden van vraag en antwoord?

Ik heb nu
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
29
30
31
32
33
34
35
36
<form method="post" action="page3.php">
<?php

{
echo 'Veel succes, '.$_POST['naam'].'!</p>';
}

mysql_connect("localhost", "root", "usbw");

mysql_select_db("alcoholtest");

$antwoorden = mysql_query("select * from vragen") or die("Kan query niet uitvoeren: ".mysql_error());

$teller = 0;

while($record = mysql_fetch_array($antwoorden))
    {
    $teller = $teller + 1;
    echo'<p>'; 
    echo '<h3> '.$record['Vraag'].' </h3>';
                echo'<ul> 
                        <li><input type="radio" value="A" name="Gegeven'.$teller.'" />'.$record['A'].' </li>
                        <li><input type="radio" value="B" name="Gegeven'.$teller.'" />'.$record['B'].' </li>
                        <li><input type="radio" value="C" name="Gegeven'.$teller.'" />'.$record['C'].' </li>
                    </ul>';
    
    echo'</p>';
    }
    
mysql_query("insert into antwoorden values('','vraag','antwoorden')") or die("Kan niet invoegen: ".mysql_error());  
    
?>
</p>

<input type="submit" value="Stuur mijn antwoorden op!"/>
</form>

Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Leuk, weer zo'n lap code, maar je geeft totaal niet aan wát er nu mis gaat t.o.v. het gewenste gedrag.

Kijk, ik zie wel vanalles misgaan, maar als ik dat nu voor ga kouwen.. Daar schiet je ook niets mee op.

Leren coden valt en staat bij het leren debuggen: wát gaat er mis (dus je moet een duidelijk 'gewenst resultaat' hebben, anders kan er sowieso niets mis gaan.. :+) en waaróm zou dat dan misgaan?

Dat mis ik allemaal bij je.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet niet of jullie de afbeeldingen kunnen zien maar het zit 'm in afbeelding 2 geloof ik, daar zie je wat er verkeerd gaat elke keer. in de vraag en in 't antwoord komt steeds "vraag" en "antwoord" te staan.

Afbeeldingslocatie: http://i57.tinypic.com/ir23xu.jpg
Afbeeldingslocatie: http://i58.tinypic.com/wvsguu.jpg
Afbeeldingslocatie: http://i59.tinypic.com/11hgh9i.jpg

[ Voor 40% gewijzigd door Verwijderd op 04-03-2015 20:57 ]


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op woensdag 04 maart 2015 @ 20:55:
in de vraag en in 't antwoord komt steeds "vraag" en "antwoord" te staan.
En dat vind je raar als je naar je code kijkt? :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee dat vind ik niet raar, maar ik moest vanuit mezelf een code beginnen, en die heb ik tot die code gevormd.
Ik weet dat er veel mis aan is, alleen het is lastig om het te verbeteren als je niet weet hoe het wel moet.
De leraar helpt ook niet echt mee want er zijn 30 andere jongens zoals ik die non-stop vragen stellen. Maar ik wil het wel goed doen daarom ben ik hierheen gekomen.

Acties:
  • 0 Henk 'm!

  • hydrargyrum
  • Registratie: December 2012
  • Laatst online: 19-09-2024
Ik zou ten eerste al ipv mysql zou ik mysqli gebruiken. Ook is mysqli_real_escapestring erg belangrijk.

Acties:
  • 0 Henk 'm!

  • ShitHappens
  • Registratie: Juli 2008
  • Laatst online: 14:37
Begin eens met op regel 30 de juiste variabelen te gebruiken om te INSERTen naar je database. Daar INSERT je nu namelijk continu alleen maar "vraag" en "antwoorden" , letterlijk dus. En tevens lijkt me het mogelijk dat na elke deelname je de hele tablel `antwoorden` getoond wordt in plaats van de antwoorde uit de betreffende deelname.

[ Voor 29% gewijzigd door ShitHappens op 04-03-2015 21:24 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ShitHappens daar was ik dus al mee aan het klooien maar kwam alleen maar errors tegen op elk moment dat ik 'vraag' en 'antwoord' veranderde

Acties:
  • 0 Henk 'm!

  • Full_hyperion
  • Registratie: Februari 2003
  • Laatst online: 02-10 14:08
Ik zie nu dat je een page3.php hebt, dat bedoelde ik met het splitsen van de pagina's.

Op page2.php toon je de vragen, en op page3.php ga je de antwoorden opslaan in de database.

De "insert into antwoorden..." query moet dan ook op page3.php komen.

PHP:
1
mysql_query("insert into antwoorden values('','$vraagNummer','$antwoord')") or die("Kan niet invoegen: ".mysql_error());


Waarbij je moet zorgen dat je variabelen $vraagNummer en $antwoord de goede waarden hebben.

Edit:
De "vraagnummer" kolom in de antwoorden tabel moet ook een int kolom zijn, net als "vraagnummer" in de vragen tabel (die horen namelijk bij elkaar).

En tevens is deze code zo lek als een mandje, maar ik neem aan dat dit voor een oefening is en niet zo op het grote boze internet verschijnt.

Edit2: Quoteje vergeten

[ Voor 24% gewijzigd door Full_hyperion op 04-03-2015 22:02 ]


Acties:
  • 0 Henk 'm!

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Met enkele aanhalingstekens om de variabelen heen (waaróm eigenlijk überhaupt?) schiet dat natuurlijk voor geen ene meter op... Wacht, dubbele quotes om de string te defineren, dan zou 't OK zijn idd.. Blech, blijf het vies coden vinden, zo met je vars in de string... Totaal niet overzichtelijk..

[ Voor 40% gewijzigd door Osiris op 04-03-2015 21:47 ]


Acties:
  • 0 Henk 'm!

  • Damic
  • Registratie: September 2003
  • Nu online

Damic

Tijd voor Jasmijn thee

Trouwens zit nog een fout in die lijn, maar dat zul je wel merken als je het test :)

PHP:
1
mysql_query('insert into antwoorden values(\'\',\''.$vraagNummer.'\',\''.$antwoord.'\') or die('Kan niet invoegen: '.mysql_error());

Al wat ik aanraak werk niet meer zoals het hoort. Damic houd niet van zijn verjaardag


Acties:
  • 0 Henk 'm!

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 15-10 20:45

BLACKfm

o_O

De code (in welke vorm die intussen genoemd is);

PHP:
1
mysql_query("insert into antwoorden values('','$vraagNummer','$antwoord)") or die("Kan niet invoegen: ".mysql_error());


Zegt niets meer dan dat 'waardes in de tabel antwoorden moeten worden geplaatst'. In dit geval op volgorde van kolommen in de rij.

Waarbij jij 3 kolommen hebt. 'ID' 'Vraagnummer' 'antwoord' .
Met jouw code

PHP:
1
('','vraag','antwoorden')


Geef je aan dat de eerste kolom niet ingevuld wordt, maar door de auto-increment wordt het ID nummer automatisch opgehoogd per nieuwe waarde die je invoert. De 2e kolom vul je vervolgens met 'vraag' en de 3e met 'antwoorden'.

Dit is wat je ook terugziet in je database.

Je wilt die waardes dus defineren wat je kunt doen met de manier die Full_hyperion aangeeft, door variabelen.

Dat kan dan met een $_POST inline (dus binnen de insert regel) of je zet deze variabele vooraf (met enige beveiliging zoals hydrargyrum aangeeft, maar waar je waarschijnlijk op dit moment helemaal niet aan moet beginnen als beginner) en spreekt ze dan aan in de insert regel.

Simplistisch voorbeeld:

Je maakt een form:

code:
1
2
3
4
5
6
7
8
9
10
<form method="post" action="verwerk.php">
<input type="radio" value="A" name="keuze1" /> Keuze A <br/>
<input type="radio" value="B" name="keuze1" /> Keuze B <br/>
<input type="radio" value="C" name="keuze1" /> Keuze C <br/>
<br/>
<input type="radio" value="A" name="keuze2" /> Keuze A <br/>
<input type="radio" value="B" name="keuze2" /> Keuze B <br/>
<input type="radio" value="C" name="keuze2" /> Keuze C <br/>
<input type="submit" value="Verstuur">
</form>


Vervolgens druk je dus op de 'verstuur' knop en worden gegevens ge-POST (zie form method="post")

Pagina verwerk.php wordt geladen en heeft dan ongeveer de volgende indeling;

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Maak verbinding met de database
mysql_connect("localhost", "root", "usbw");
mysql_select_db("alcoholtest");

// Verwerk gegevens in de database

$waarde_vraag = $_POST['keuze1'];
$waarde_antwoord = $_POST['keuze2'];
    
mysql_query("INSERT INTO antwoorden (Vraagnummer, antwoord) VALUES ('$waarde_vraag','$waarde_antwoord')") or die("Kan niet invoegen: ".mysql_error());

// Bovenstaande regel geeft aan dat je in de kolommen 'vraagnummer' en 'antwoord' de waardes wilt toevoegen
// die uit '$waarde_vraag' en '$waarde_antwoord' worden gegenereerd.

echo 'Gegevens zijn verwerkt.'; // eventueel met controle of dat ook zo is


Note: fouten voorbehouden, ik ben ook maar een 'beginner' en doe het niet meer elke dag :).

In principe moet je beginnen om bovenstaand werkend te krijgen, op dat moment kun je de boel uitbreiden, voorzien van beveiligingen, extra dingen toevoegen, opmaak etc.

Ik zie maar al te vaak bij mensen die 'net komen kijken' dat er eerst een hele site is gebouwd en je vervolgens maar moet gaan uitzoeken waar alle problemen liggen. Zeker als je net begint zou ik zorgen dat op code basis (dus zonder al te veel HTML opmaak) alles werkt zoals het moet en je daarna pas met de opbouw begint.

[ Voor 5% gewijzigd door BLACKfm op 04-03-2015 22:25 ]

Litebit.eu voorraad check :).


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor 't snelle reageren trouwens, ik ga na deze reactie slapen maar dan kijk ik morgen wel even terug. Dus als ik het goed heb, heb ik nu (bijna) alles stap voor stap gedaan. Maar bij page3 komt er nog steeds deze foutmelding:

Notice: Undefined variable: Vraagnummer in \root\page3.php on line 29

Notice: Undefined variable: antwoord in \root\page3.php on line 29

EDIT: Line 29 is hier dus Line 9

Page2
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
29
30
31
<?php

{
echo 'Veel succes, '.$_POST['naam'].'!</p>';
}

mysql_connect("localhost", "root", "usbw");

mysql_select_db("alcoholtest");

$antwoorden = mysql_query("select * from vragen") or die("Kan query niet uitvoeren: ".mysql_error());

$teller = 0;

while($Vraagnummer = mysql_fetch_array($antwoorden))
    {
    $teller = $teller + 1;
    echo'<p>'; 
    echo '<h3> '.$Vraagnummer['Vraag'].' </h3>';
                echo'<ul> 
                        <li><input type="radio" value="A" name="Gegeven'.$teller.'" />'.$Vraagnummer['A'].' </li>
                        <li><input type="radio" value="B" name="Gegeven'.$teller.'" />'.$Vraagnummer['B'].' </li>
                        <li><input type="radio" value="C" name="Gegeven'.$teller.'" />'.$Vraagnummer['C'].' </li>
                    </ul>';
    
    echo'</p>';
    }
    
    
    
?>


Page3
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php

mysql_connect("localhost", "root", "usbw");

mysql_select_db("alcoholtest");

$antwoorden = mysql_query("select * from vragen") or die("Kan query niet uitvoeren: ".mysql_error()); 
    
mysql_query("insert into antwoorden values('','$vraagNummer','$antwoord')") or die("Kan niet invoegen: ".mysql_error());

$teller=1;

while($Vraagnummer = mysql_fetch_array($antwoorden))

    {   
                    echo'<ul>
                            <li width="400px">'.$Vraagnummer['Vraag'].'</li>
                            <li width="20px">'.$_POST['Gegeven'.$teller.''].'</li>
                        </ul>';
    $teller++;
    }
        
?>

Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 20:22

AW_Bos

Liefhebber van nostalgie... 🕰️

$antwoord heeft geen waarde, en komt blijkbaar uit de lucht vallen.

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

  • Full_hyperion
  • Registratie: Februari 2003
  • Laatst online: 02-10 14:08
Wat AW_Bos ook al zei, die foutmeldingen lijken me best duidelijk.

Maar vooruit, nog een hint en een tip.

Hint: De insert-query moet in de while loop staan, je moet immers de antwoorden van iedere vraag opslaan.

Tip: Gebruik niet de variabele $teller in je loops, maar $Vraagnummer['Vraagnummer'], dan weet je zeker dat je de antwoorden bij de goede vraag opslaat.

Acties:
  • 0 Henk 'm!

  • Amanush
  • Registratie: Mei 2012
  • Laatst online: 18-06 09:30

Amanush

Saai persoon.

Helpen we hem nou serieus bij z'n huiswerk?

Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.


Acties:
  • 0 Henk 'm!

  • BLACKfm
  • Registratie: Maart 2004
  • Laatst online: 15-10 20:45

BLACKfm

o_O

Amanush schreef op donderdag 05 maart 2015 @ 18:51:
Helpen we hem nou serieus bij z'n huiswerk?
Als die blijkbaar niet bij zijn leraar terecht kan moet die toch ergens zijn assistentie kunnen krijgen.
Ik acht mijzelf behulpzaam waar dat kan, van die reacties als dat je maar moet gaan googlen of die van jouw schiet de TS al helemaal niks mee op.

Lijkt me dat er genoeg handreikingen in het topic staan, maar als die daar weinig mee doet schiet het sowieso niet op.

Litebit.eu voorraad check :).


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Amanush schreef op donderdag 05 maart 2015 @ 18:51:
Helpen we hem nou serieus bij z'n huiswerk?
Huiswerktopics mogen mits er voldoende zelfinzet is. Mocht je vragen of problemen met dit topic hebben, maak dan gewoon een TopicReport aan, ipv in dit topic te reageren ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1