Automatische enquete

Status
Niet open voor verdere reacties.
Bedankt voor je antwoord.
Ik snap alles, behalve het gedeelte van de variabele.
Want wat moet ik als variabele invullen en waar? (bij value=?)
Het script Bekijk bijlage Informatica.zip

Alvast bedankt
 
Laatst bewerkt:
Ik denk dat je beter even kan lezen wat variabelen zijn, zodat je misschien mij beter begrijp ;)
http://www.sitemasters.be/tutorials/1/1/3/PHP/Variabelen_in_PHP

Maar met variabele bedoelde ik $value_question_1, $value_question_2 ... t/m $value_question_9, die maakte je niet aan en vulde je niet met data en dus waren die gewoon leeg. En dan gaat het fout

Maar ik zag dat je het had toegevoegd dus zou wel moeten werken denk ik :thumb:

groete vreugde
 
Ik heb zojuist de inhoud van dat zip bestand op de site gezet.
Toen heb ik de enquete ingevuld, wat goed ging.
Maar hij slaat gewoon niets op in phpmyadmin.
Ik denk dat ik misschien in die database iets fout heb, maar die heb ik de vorige keer hier ook geupload. Denk je dat die ook goed is? Ik zou voor de rest niet weten wat fout is dan.
 
Dat zou idd kunnen maar dat zal je moeten testen

Probeer eens de query in je database uit te voeren, ipv via een website.
Krijg je dan een foutmelding en zo ja wat denk je dat er dan fout gaat ;)

Dus deze query:
Code:
INSERT INTO `table_name` (`id`, `vraag1`, `vraag2`, 'vraag3', 'vraag4', 'vraag5', 'vraag6', 'vraag7', 'vraag8', 'vraag9', 'vraag10') VALUES (NULL, '$antwoord1', '$antwoord2', '$antwoord3', '$antwoord4', '$antwoord5', '$antwoord6', '$antwoord7', '$antwoord8', '$antwoord9', '$antwoord10');
gebruiken in je database en dan de variabelen $antwoord... vervangen door iets zodat je iets kan invoeren in de database

groeten vreugde
 
Hmm dat werkt ook niet. Hij zegt:
Code:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''vraag3', 'vraag4', 'vraag5', 'vraag6', 'vraag7', 'vraag8', 'vraag9', 'vraag10')' at line 1

Ik had dit als SQL gebruikt:
Code:
INSERT INTO `vragenlijst` ( `id` , `vraag1` , `vraag2` , 'vraag3', 'vraag4', 'vraag5', 'vraag6', 'vraag7, 'vraag8', 'vraag9', 'vraag10' ) 
VALUES (NULL , 'ja', 'gematigd', 'aap', '34', 'donkey', 'ja', 'nee', 'gematigd', 'wel', 'bowlen' )
Ik weet niet wat er fout is en hoop dat het gaat werken.
Maar hoe kan de database weten welk antwoord op welke vraag is gegeven.
Hopelijk kun je er nog even naar kijken.
Alvast bedankt.
 
Laatst bewerkt:
Als je kijkt naar de foutmelding zie je dat de fout in je SQL-query zit. Hierdoor zal hij niets in je database plaatsen.

als je kijkt naar je query zie je een verschil, jij hebt nu dit:
HTML:
INSERT INTO `vragenlijst` ( `id` , `vraag1` , `vraag2` , 'vraag3', 'vraag4', 'vraag5', 'vraag6', 'vraag7, 'vraag8', 'vraag9', 'vraag10' ) 
VALUES (NULL , 'ja', 'gematigd', 'aap', '34', 'donkey', 'ja', 'nee', 'gematigd', 'wel', 'bowlen' )

Verander dat eens in het volgende:
HTML:
INSERT INTO `vragenlijst` ( `id` , `vraag1` , `vraag2` , `vraag3`, `vraag4`, `vraag5`, `vraag6`, `vraag7`, `vraag8`, `vraag9`, `vraag10` ) 
VALUES (NULL , 'ja', 'gematigd', 'aap', '34', 'donkey', 'ja', 'nee', 'gematigd', 'wel', 'bowlen' )

Let goed op de quotes die ik gebruik bij de velden vraag3 t/m vraag 10.

groeten vreugde
 
oke, de query werkt nu wel en hij voegt de antwoorden in de tabel.
Maar de grote vraag is nu, waarom werkt hij niet vanaf de site?
Bedankt voor de vele hulp tot nu toe!:d
 
Als de query goed en los wel werkt, kan het zijn dat er een fout staat in de code. Nu lijkt mij dat de connectie met de database mis gaat, maar dat durf ik niet zeker te zeggen.

Controleer of je de juiste waardes heb gezet voor je database naam, gebruikersnaam en wachtwoord

anders probeer de antwoorden van de vragen eerst uit te printen om zeker te zijn dat deze gevuld zijn:
PHP:
// Haal alle antwoorden op
$a1 = $_POST["vraag1_antwoord"];
$a2 = $_POST["vraag2_antwoord"];
$a3 = $_POST["vraag3_antwoord"];
$a4 = $_POST["vraag4_antwoord"];
$a5 = $_POST["vraag5_antwoord"];
$a6 = $_POST["vraag6_antwoord"];
$a7 = $_POST["vraag7_antwoord"];
$a8 = $_POST["vraag8_antwoord"];
$a9 = $_POST["vraag9_antwoord"];
$a10 = $_POST["vraag10_antwoord"];

echo "Antwoord 1: ".$a1;
// en zo ook voor de andere antwoorden

en daarna kan je proberen te controleren of de connectie lukt:
PHP:
if (mysql_connect("localhost", "marishome_nl", "knaapaap007") == true)
	{
		if (mysql_select_db("marishome_nl") == true)
		{
			$query = "INSERT INTO `vragenlijst` (`id`, `vraag1`, `vraag2`, `vraag3`, `vraag4`, `vraag5`, `vraag6`, `vraag7`, `vraag8`, `vraag9`, `vraag10`) VALUES (NULL, '$a1', '$a2', '$a3', '$a4', '$a5', '$a6', '$a7', '$a8', '$a9', '$a10');";
			if (mysql_query($query) == false)
				echo "Cannot execute the Query";
		}
		else
			echo "Cannot select the Database";
	}
	else
		echo "Cannot connect with the server";

hiermee krijg je veel informatie en kan je bepalen waar het goed of fout gaat

groeten vreugde
 
oke, bedankt. De eerste test is goed gegaan, de antwoorden worden weergegeven.
Maar de 2e test lukt niet, waar moet ik het script plaatsen? Ik denk in de action file? Zoja waar en ipv wat? Want het werkt niet, maar het is wel duidelijk dat de fout in de connectie zit denk ik nu.
Alvast bedankt.
 
Dus de antwoorden worden mooi meegenomen en het opslaan lukt ook aangezien je dat getest heb in je database.

Nu ligt het aan de connectie en dat kan je testen door het script te plaatsen waar de connectie gemaakt wordt lijkt mij... ;)
 
Hallo vreugde,

Ik werk samen met sjaaky55 aan deze opdracht. We hebben het script geplaatst op de plek waar de connectie gemaakt wordt. Eerst lukte de connectie niet, omdat er een aantal gegevens verkeerd waren ingevuld, maar na een aantal aanpassingen lukte het wel.

Het is nu voor het eerst gelukt om vanuit de vragenlijst gegevens in de database opgeslagen te krijgen. Het enige probleem is dat alleen het 'id' verstuurd wordt en niet de antwoorden op de vragen. Blijkbaar zit er dus nog ergens een foutje in het script want ik snap niet hoe dit precies komt.

Alvast bedankt en ook veel dank voor uw hulp tot nu toe!
 
Jullie voegen niet de variables toe aan de database...

Jullie slaan zo de variabel op:

PHP:
<?php
$a1 = $_POST["vraag1_antwoord"];
$a2 = $_POST["vraag2_antwoord"];
?>

Dan moet je dus ook wel $a1 toevoegen aan de database. Je moet voor iedereen die een ding invult een nieuwe ID aanmaken. Dat betekend dat je de laatste moet ophalen uit de database.

Hier ziet de querry eruit die je in wil laten voegen

INSERT INTO vragenlijst VALUES ($id,$a1,$a2)

En zo verder.
$id moet je ophalen uit de database. Dat scritp ziet er ongeveer zo uit:

Database plus tabel connectie
De volgende querry uitvoeren
sla dit wel op in een variable

SELECT MAX(ID) //als ID tenminste de naam van de kolom is, voor je id
FROM je tabel naam

Vervolgens gebruik je de functie mysql fetch array voor de variable waarin je je querry hebt opgeslagen
Je maakt er een nette variable van je resulaten

je voegt 1 toe aan je variable oftewel

$id = $resultaat +1

EDIT: Ik heb zelf helaas geen fatsoenlijke verwerker en kan je het script dus niet geven... Maar het is altijd beter het zelf te maken. Als je ergens vast loopt of iets niet snapt horen we het wel ;)

EDIT2: Ik zag net jullie informatica script, ik weet niet of de opset uberhaupt wel werkt, dat je hem steeds onthoudt, immers wordt de vorige vraag wel gepost, maar de vraag daarvoor niet. Mischien moet je dus op elke pagina apart. Iets toevoegen op de database en dan alleen de waarde van de vorige vraag.

Bovendien weet ik niet helemaal wat je bedoelt met automatisch in automatische enquete
 
Laatst bewerkt:
Bedankt voor je reactie!

Maar ik denk niet dat ik helemaal begrijp wat u bedoelt. Voor mijn idee hebben we namelijk al in het script staan wat u zegt.

In ons action.php script staat eerst:
PHP:
$antwoord1 = $_POST["vraag1_antwoord"];
	$antwoord2 = $_POST["vraag2_antwoord"];
	$antwoord3 = $_POST["vraag3_antwoord"];
	$antwoord4 = $_POST["vraag4_antwoord"];
	$antwoord5 = $_POST["vraag5_antwoord"];
	$antwoord6 = $_POST["vraag6_antwoord"];
	$antwoord7 = $_POST["vraag7_antwoord"];
	$antwoord8 = $_POST["vraag8_antwoord"];
	$antwoord9 = $_POST["vraag9_antwoord"];
	$antwoord10 = $_POST["vraag10_antwoord"];
Vervolgens wordt er verbinding gemaakt met de database en worden de gegevens toegevoegd aan de database:
PHP:
$query = "INSERT INTO `enquete` (`id`, `vraag1`, `vraag2`, `vraag3`, `vraag4`, `vraag5`, `vraag6`, `vraag7`, `vraag8`, `vraag9`, `vraag10`) VALUES (NULL, '$antwoord1', '$antwoord2', '$antwoord3', '$antwoord4', '$antwoord5', '$antwoord6', '$antwoord7', '$antwoord8', '$antwoord9', '$antwoord10');";

Wat klopt hier dan precies niet aan volgens u?

In de database hebben we het veld 'id' ingesteld op auto increment. Daardoor komt er volgensmij steeds automatisch een achtereenvolgend nummer bij de id's. Daardoor hoeft er dacht ik geen extra scriptje meer bij die de id's uit de tabel leest en +1 doet?

Alvast bedankt;)
 
Je mag je zeggen hoor, ik heb zelf ook nog informatica op school...

vraag1 is niet letterlijk hetzelfde als $a1
Je hebt nergens in je script verteld wat vraag1 is. Je moet dus vraag1 veranderen in $a1.
Ik weet niet helemaal hoe dat in zn werk gaat, met je database. Maar in dat geval zou je id niet meer hoeven toe te voegen in het script. Mijn persoonlijke voorkeur is wel altijd zoveel mogelijk met PHP te doen, en wat minder met in PHPmyADMIN aangegeven opties...

Succes ermee.
Ik had btw mijn vorige post nog 2 keer geedited (ofzoiets)

EDIT: dit is overegens de enige goede manier om te kijken of er gepost is.

PHP:
if ($_SERVER['REQUEST_METHOD'] ==  'POST')
 
Laatst bewerkt:
Okee, ik denk dat ik begrijp wat het probleem is. Ik snap alleen de oplossing niet helemaal. Bedoel je dat we door het hele script $value_question_1 moeten vervangen door $antwoord1? (en dan natuurlijk bij alle vragen)

En om te reageren op je vorige edits:

Wij weten dus inderdaad ook niet of de opzet van het script helemaal klopt, want die hebben we dus van iemand anders gekregen. Op elke pagina apart iets toevoegen aan de database is inderdaad een mogelijkheid, maar wel lastig te realiseren ivm de id's.

Met automatische enquete bedoelen we dat hij automatisch verwerkt wordt in de database. Alleen enquete was ook wel voldoende geweest, maar de schoolopdracht noemt het automatische enquete :)
 
Ik denk toch dat het het slimst is om op elke pagina wat toe te voegen. Daar ligt waarschijnlijk het probleem. En volgens mij, als je NULL invoert bij ID, wordt het id dan niet leeg gemaakt?

Mag kan je anders 1 pagina en je action script even de code hier weergeven van wat je nu hebt? Informatica.zip is verouderd volgens mij...
 
Het is correct om NULL te gebruiken als waarde voor een auto-increment veld om een rij in de database in te voegen. Ook is het het beste om dit door de database te laten doen en niet handmatig via PHP. Als je het handmatig doet loop je het risico dat je dubbele IDs krijgt door een race condition.

Verder is je INSERT-query op dit moment kwetsbaar voor een SQL-injectie. Ik weet niet of dit van belang is bij een schoolopdracht, maar normaal gesproken moet je alles wat een gebruiker kan invoeren/aanpassen en gebruikt wordt in een database-query "escapen" met mysql_real_escape_string.

Daarnaast ben ik het eens met Jorryt, dat het het handigste is als je even de code die je nu hebt post.
 
Dit is de code die we tot nu toe hebben

action.php:
PHP:
<?php
// Uiteindelijk zal je klaar zijn met al je vragen en zal je in plaats van te linken naar vraag<nummer>.php in de FORM-tag,
// zal je moeten linken naar action.php.
// Hierin verwerk je dan alle data zodat deze opgeslagen kan worden in een database of zo iets

// Controleer hier weer eerst of de vorige en laatste vraag ingevuld is
if (isset($_POST["vraag10.php"]))
{
	// Haal alle antwoorden op
	$antwoord1 = $_POST["vraag1_antwoord"];
	$antwoord2 = $_POST["vraag2_antwoord"];
	$antwoord3 = $_POST["vraag3_antwoord"];
	$antwoord4 = $_POST["vraag4_antwoord"];
	$antwoord5 = $_POST["vraag5_antwoord"];
	$antwoord6 = $_POST["vraag6_antwoord"];
	$antwoord7 = $_POST["vraag7_antwoord"];
	$antwoord8 = $_POST["vraag8_antwoord"];
	$antwoord9 = $_POST["vraag9_antwoord"];
	$antwoord10 = $_POST["vraag10_antwoord"];
	
// Maak connectie met een database van jou, waarbij gebruikersnaam "username" is en wachtwoord "password" is.
	$mysql_link = mysql_connect("localhost", "deb42120_enquete", "knaapaap") or die(mysql_error()); 
	// Selecteer de database waarin je wilt werken, waarbij deze de naam "database_name" heeft.
	$mysql_db = mysql_select_db("deb42120_enquete")or die(mysql_error());
	
	// Maak een query voor je database met een tabel naam van "vragenlijst"
	$query = "INSERT INTO `enquete` (`id`, `vraag1`, `vraag2`, `vraag3`, `vraag4`, `vraag5`, `vraag6`, `vraag7`, `vraag8`, `vraag9`, `vraag10`) VALUES (NULL, '$antwoord1', '$antwoord2', '$antwoord3', '$antwoord4', '$antwoord5', '$antwoord6', '$antwoord7', '$antwoord8', '$antwoord9', '$antwoord10');";
	// Voer de query uit waardoor je antwoorden in de database opgeslagen zijn
	$result = mysql_query($query) or die(mysql_error());
}
	
	// Hoe je zelf een tabel maakt, zegt ik lekker niet voor maar dat moet geen probleem zijn
	// Google is hiervoor je beste vriend, succes ermee
{
	if (mysql_connect("localhost", "deb42120_enquete", "knaapaap") == true)
    {
        if (mysql_select_db("deb42120_enquete") == true)
        {
            $query = "INSERT INTO `enquete` (`id`, `vraag1`, `vraag2`, `vraag3`, `vraag4`, `vraag5`, `vraag6`, `vraag7`, `vraag8`, `vraag9`, `vraag10`) VALUES (NULL, '$antwoord1', '$antwoord2', '$antwoord3', '$antwoord4', '$antwoord5', '$antwoord6', '$antwoord7', '$antwoord8', '$antwoord9', '$antwoord10');";
            if (mysql_query($query) == false)
                echo "Cannot execute the Query";
        }
        else
            echo "Cannot select the Database";
    }
    else
        echo "Cannot connect with the server";
}

?>

<html>
<body style="background-color:yellow">

<h1>Automatische enquete</h1>
<p>Dank je wel voor het invoeren van de Automatisch Enquete </p>

</body>
</html>

Het versturen naar de tabel staat er nu dubbel in. Er wordt echter steeds maar één id naar de database verstuurd, dus in één van de twee moet een foutje zitten. Ik krijg het echter niet werkend als ik één van de twee weghaal.

vraag1.html:
PHP:
<html>
<body style="background-color:yellow">

<p><i>Vraag 1: Hoe vaak kom je in Kiri? </i></p>

<!-- Je hebt een formulier die altijd een action- en method- attribuut nodig heeft
	action:	de actie die uitgevoerd moet worden nadat de gebruiker op de Submit-knop heeft gedrukt.
	method:	De methode van het versturen die je wilt gebruiken. Kan alleen GET of POST zijn.
	
	Verschil tussen GET en POST:
		GET:	Hiermee krijg je de informatie in de URL-bar te zien -> www.test.nl/index.html?test_waarde=JEUJ
		POST:	Hiermee blijft de informatie die verzonden wordt, onzichtbaar voor de gebruiker, is altijd de voorkeur bij formulieren
		
	Zoals je kan zien heb ik de action gezet op vraag2.php. Dit is een PHP bestand waar vraag 2 staat beschreven.
	Dit is tevens de link naar vraag 2 en hoef je geen anchors (<a>-tags) te gebruikern. -->
<form action="vraag2.php" method="post">

<input type="radio" name="vraag1_antwoord" value="Minder dan 1x per maand" /> Minder dan 1x per maand <br />
<input type="radio" name="vraag1_antwoord" value="1x per maand" /> 1x per maand <br />
<input type="radio" name="vraag1_antwoord" value="1x per 2 weken" /> 1x per 2 weken <br />
<input type="radio" name="vraag1_antwoord" value="elke week" /> Elke week<br />
<input type="radio" name="vraag1_antwoord" value="meerdere keren per week" /> Meerdere keren per week <br />
<input type="radio" name="vraag1_antwoord" value="nooit" /> Nooit <br />

<!-- De Submit-knop moet je altijd een name-attribuut toevoegen, die uniek is.
	M.b.v. de name-attribuut kan je het antwoord later ophalen bij vraag 2. -->
<input type="submit" name="vraag1" value="Volgende Vraag" />

</form>
</body>
</html>

vraag2.php:
PHP:
<?php
// Doordat dit een PHP bestand is, wordt deze vaak begonnen met de php openings-tag zoals hierboven.

// Omdat bij vraag1.html de form method op POST staat, gebruik je bij vraag 2 $_POST om de antwoorden op te halen.
// Tevens gebruik je hier de name-attribuut waarde van de Submit-knop van vraag.html, om zo juist te linken.
// Hier is het van belang dat deze uniek is.
if (isset($_POST["vraag1"]))
{
	// Doordat de name-attribuut van de radio-buttons "vraag1_antwoord" heet, kan je de waarde hiervan ophalen met een $_POST.
	// De waarde stop je in een variabele die je later in de bestand weer kan gebruiken.
	$value_question_1 = $_POST["vraag1_antwoord"];
}
?>
<html>
<body style="background-color:yellow">

<p><i>Vraag 2: Hoe oud ben je? </i></p>

<!-- Net als bij vraag1.html link je hier naar de volgende vraag en met de method POST zodat de antwoorden alleen door jou gebruikt kunnen worden in de code. -->
<form action="vraag3.php" method="post">

<input type="radio" name="vraag2_antwoord" value="12" /> 12 <br />
<input type="radio" name="vraag2_antwoord" value="13" /> 13 <br />
<input type="radio" name="vraag2_antwoord" value="14" /> 14 <br />
<input type="radio" name="vraag2_antwoord" value="15" /> 15 <br />
<input type="radio" name="vraag2_antwoord" value="16" /> 16 <br />
<input type="radio" name="vraag2_antwoord" value="17" /> 17 <br />
<input type="radio" name="vraag2_antwoord" value="18" /> 18 <br />
<input type="radio" name="vraag2_antwoord" value="19" /> 19 <br />

<!-- Omdat je het antwoord van de eerste vraag mee wilt nemen, moet je deze iedere keer in een hidden input zetten. Hierdoor staat hij wel in de HTML code 
	maar is deze niet zichtbaar voor de gebruiker.
	Mocht je bij vraag 3 zijn moet je ook het antwoord van vraag 2 als hidden erbij plaatsen. -->
<input type="hidden" name="vraag1_antwoord" value=" <?php echo $value_question_1 ?> " />

<!-- Wat opvalt aan deze Submit-knop is dat de name-attribuut weer uniek is ten opzichte van de vorige -->
<input type="submit" name="vraag2" value="Volgende Vraag" />

</form> 
</body>
</html>

De overige vragen zijn natuurlijk soortgelijk. Voor de duidelijkheid nog vraag10.php:
PHP:
<?php
if (isset($_POST["vraag9"]))
{
	$value_question_1 = $_POST["vraag1_antwoord"];
	$value_question_2 = $_POST["vraag2_antwoord"];
	$value_question_3 = $_POST["vraag3_antwoord"];
	$value_question_4 = $_POST["vraag4_antwoord"];
	$value_question_5 = $_POST["vraag5_antwoord"];
	$value_question_6 = $_POST["vraag6_antwoord"];
	$value_question_7 = $_POST["vraag7_antwoord"];
	$value_question_8 = $_POST["vraag8_antwoord"];
	$value_question_9 = $_POST["vraag9_antwoord"];
}
?>
<html>
<body style="background-color:yellow">

<p><i>Vraag 10: Wat vind je van de prijzen? </i></p>

<form action="action.php" method="post">

<input type="radio" name="vraag10_antwoord" value="Goedkoop" /> Goedkoop <br />
<input type="radio" name="vraag10_antwoord" value="Precies goed" /> Precies goed <br />
<input type="radio" name="vraag10_antwoord" value="Te duur" /> Te duur <br />

<input type="hidden" name="vraag1_antwoord" value=" <?php echo $value_question_1 ?> " />
<input type="hidden" name="vraag2_antwoord" value=" <?php echo $value_question_2 ?> " />
<input type="hidden" name="vraag3_antwoord" value=" <?php echo $value_question_3 ?> " />
<input type="hidden" name="vraag4_antwoord" value=" <?php echo $value_question_4 ?> " />
<input type="hidden" name="vraag5_antwoord" value=" <?php echo $value_question_5 ?> " />
<input type="hidden" name="vraag6_antwoord" value=" <?php echo $value_question_6 ?> " />
<input type="hidden" name="vraag7_antwoord" value=" <?php echo $value_question_7 ?> " />
<input type="hidden" name="vraag8_antwoord" value=" <?php echo $value_question_8 ?> " />
<input type="hidden" name="vraag9_antwoord" value=" <?php echo $value_question_9 ?> " />

<input type="submit" name="vraag10" value="Stuur antwoorden" />

</form> 
</body>
</html>
 
Als je gaat controleren, verstuur je dan de querry niet nog een keer?
 
Klopt, dit heb ik er in mijn vorige bericht ook bijgezet:

"Het versturen naar de tabel staat er nu dubbel in. Er wordt echter steeds maar één id naar de database verstuurd, dus in één van de twee moet een foutje zitten. Ik krijg het echter niet werkend als ik één van de twee weghaal."

Maar toen dit nog niet zo was werkte hij ook niet goed :(
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan