Archief - PHP: Q: enquete begint na laatste vraag opnieuw

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

wc-duif

Legacy Member
Ik ben dus bezig met een online enquete samen te stellen
maar op een of andere wijze, na het oplossen van de laatste vraag moet je normal naar "outro.php" gaan, maar dat gebeurd niet, de enquete start gewoon opnieuw bij vraag 1
iemand die mij kan helpen?

gebruikte codes:

vragen.php
Code:
<?php
error_reporting(E_ALL);
?>
<?php
session_start();

include "config.php";

$aantal_vragen = mysql_num_rows(mysql_query("SELECT id FROM vragen"));        

if($_POST['volgende'] && $_SESSION['vraagnr'] != '' && $_POST['vraag'.$_SESSION['vraagnr']] != '')
{
    if($_POST['vraag1'])
        $_SESSION['antwoordjes'] = $_POST['vraag1'];
    else
        $_SESSION['antwoordjes'] .= '|'.$_POST['vraag'.$_SESSION['vraagnr']];
    
    $_SESSION['vraagnr']++;
}
if($_POST['vraag'.$aantal_vragen] != '' && $_SESSION['vraagnr'] >= ($aantal_vragen + 1))
{
   mysql_query("INSERT INTO antwoorden (ip,antwoorden,datum) VALUES ('".$_SERVER['REMOTE_ADDR']."','".$_SESSION['antwoordjes']."',NOW())");
   session_destroy();
   header("Location: outro.php");
   exit;
}
if($_SESSION['vraagnr'] == '' || $_SESSION['vraagnr'] >= ($aantal_vragen + 1))
{
    $vraag = 1;
    $_SESSION['vraagnr'] = $vraag;
}
else
    $vraag = $_SESSION['vraagnr'];


$data = mysql_fetch_array(mysql_query("SELECT vraag,antwoorden FROM vragen WHERE id='".$vraag."'"));

$antwoorden = explode('|',$data['antwoorden']);

$vraag = stripslashes($data['vraag']);


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Internet onderzoek</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<table align="left">
</table>
<div class="centrum">
<div class="header"></div>
<div class="content" id="content">
<div class="balk">Introductie | <span style="color:#000033;">Vragen</span> | Afronding</div>
<br /><strong><?php echo $vraag; ?></strong><br />
<br />
<form method="post" action="vragen.php">
<?php
$nummer = 1;
foreach($antwoorden as $antwoord)
{
    echo '<input type="radio" name="vraag'.$_SESSION['vraagnr'].'" value="'.$nummer.'" id="antwoord'.$nummer.'" /><label for="antwoord'.$nummer.'">'.$antwoord.'</label><br />';
    $nummer++;
}

?>
<br />
<input type="submit" name="volgende" value="Volgende" class="knop" />
</form>
</div>
</div>
</body>
</html>

(vragen komen 1 na 1 als je op doorgaan hebt geklikt)

hopelijk kan iemand mij vertellen wat ik fout gedaan heb..
alvast bedankt!

killgore

Legacy Member
$_SESSION['vraagnr'] >= ($aantal_vragen + 1)

->

$_SESSION['vraagnr'] >= ($aantal_vragen)

in de 2e if dus

edit: nvm, dat is het dus niet

edit2: ik zie het niet direct, maar je gebruikt veel te veel rechtstreeks je globals imho.

komt hij trouwens altijd in die eerste if (zet eens een echo om te testen)?

wc-duif

Legacy Member
ik heb een echo onder men conditie gezet, en die zag ik dan staan op men pagina dus dat wilt dan toch zegge dat men :
header("Location: outro.php");
niet werkt, maar mits dat men locatie van men pagina zo is moet hij het toch doen of niet?

dJeez

Legacy Member
Na een Header("Location: ..."); moet je wel het script zelf afbreken hé, als je niet wil dat het verder wordt uitgevoerd. Zet daar dus maar een exit; onder.

BTW Je kan beter de rijen tellen via select count(...) ipv een mysql_num_rows te doen waarbij je de IDs van alle rijen uit de tabel selecteert (dat is nl. totaal zinloos als je verder niks met die IDs doet).

wc-duif

Legacy Member
ja awel met die exit; eronder stopt hij inderdaad met opnieuw beginne, maar krijg een leeg pagina nu nog ff naar men outro pagina late werke en dan is het gefixt

killgore

Legacy Member
dJeez zei:
Na een Header("Location: ..."); moet je wel het script zelf afbreken hé, als je niet wil dat het verder wordt uitgevoerd. Zet daar dus maar een exit; onder.

BTW Je kan beter de rijen tellen via select count(...) ipv een mysql_num_rows te doen waarbij je de IDs van alle rijen uit de tabel selecteert (dat is nl. totaal zinloos als je verder niks met die IDs doet).

die exit is heus niet noodzakelijk hoor.

dan gok ik inderdaad dat je location niet werkt, stuur je iets van output in config.php? headers werken niet als er output voorkomt

en probeer anders eens header("Location: /outro.php");

dJeez

Legacy Member
killgore zei:
die exit is heus niet noodzakelijk hoor.
In dit geval echt wel, aangezien het script verder uitgevoerd zal worden, en de volgende stap zorgt er dus idd voor dat hij in de tweede if terechtkomt en - doordat aan de voorwaarde daar is voldaan - dan het vraagnr terug op 1 wordt gezet.

Een header call stopt de uitvoer van het script niet hé. Anders zou je nooit bestanden via PHP terug kunnen posten naar de browser (aangezien je daar eerst een resem HTTP headers voor doorstuurt - oa. content type & bestandsgrootte).

BTW Vergeet niet dat de session_destroy je (globale) sessie variabelen niet leegkiepert, $_SESSION['vraagnr'] zal dus zijn waarde behouden ook na de session_destroy (tot het einde van het script in dit geval).

wc-duif

Legacy Member
die "/outro.php" doet het ook niet

nope in men outro.php zit geen php code, het is gewoon een pagina zegt bedankt voor invulle enzo en een linke naar de pagina met de uitslagen

config.php:
Code:
<?php
mysql_connect('localhost','jcbilzen_be','wachtwoord') or die('<br /><br />Er ging iets fout bij het verbinden met de database. Controleer of je verbinding hebt, de config goed ingevuld is, de database aangemaakt is enz.<br /><br />Foutmelding:<br />'.mysql_error());

mysql_select_db('jcbilzen_be');
?>

killgore

Legacy Member
dJeez zei:
In dit geval echt wel, aangezien het script verder uitgevoerd zal worden, en de volgende stap zorgt er dus idd voor dat hij in de tweede if terechtkomt en - doordat aan de voorwaarde daar is voldaan - dan het vraagnr terug op 1 wordt gezet.

Een header call stopt de uitvoer van het script niet hé. Anders zou je nooit bestanden via PHP terug kunnen posten naar de browser (aangezien je daar eerst een resem HTTP headers voor doorstuurt - oa. content type & bestandsgrootte).

BTW Vergeet niet dat de session_destroy je (globale) sessie variabelen niet leegkiepert, $_SESSION['vraagnr'] zal dus zijn waarde behouden ook na de session_destroy (tot het einde van het script in dit geval).

yup, het is puur scriptgewijs nodig dat die exit er staat, ik bedoelde dat ze niet noodzakelijk is voor de Location-header ;-).

dJeez

Legacy Member
9 kansen op de 10 zit je dan met output voor de header("Location: ...");, gebruik vb. error_reporting(E_ALL); om dat te traceren (dan zal je wellicht wel een foutmelding te zien krijgen). Een andere mogelijkheid is dat je outro.php script geen output genereert of het op een andere locatie staat dan het huidige script. Bij een header("Location: ") is het overigens steeds aan te raden van de volledige URI te specifiëren - als ik het mij goed herinner staat dat trouwens vermeld in de HTTP RFC.

-> http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30 (my memory serves me right :p).

wc-duif

Legacy Member
error reporting had ik al als eerste geprobeerd, geen meldingen daarom eigenlijk de post :)
outro.php heeft indd geen script, omdat het gewoon een tussenpagina met een dankwoordje is voor de enquete in te vullen, dan nog maar eens de volledig url specifiëren en als dat het niet doet dan ga ik hier eens met dinge beginne te smijte ^^

wc-duif

Legacy Member
lol ja wss wel ^^

ma allez hé da is toch ni onmogelijk dat daar geen oplossing voor is :D (op het scriptje bedoeld hé :p)

wc-duif

Legacy Member
LOOL

ik heb ergens een losse spatie gevonde :s

maar nu krijg ik we dees errors:

Notice: Undefined index: vraag1 in /customers/jcbilzen.be/jcbilzen.be/httpd.www/vragen.php on line 13
(deze ook op lijn 11, 12, 20)

Warning: Cannot modify header information - headers already sent by (output started at /customers/jcbilzen.be/jcbilzen.be/httpd.www/vragen.php:13) in /customers/jcbilzen.be/jcbilzen.be/httpd.www/vragen.php on line 24

killgore

Legacy Member
dat eerste is omdat je in de post array niet bestaande velden wilt lezen

en dat 2e omdat je al output stuurt

beide problemen heb ik hier in stickes beschreven & ik denk dat ik die topics ook heb gekopieerd naar de knowledge base :-).

wc-duif

Legacy Member
ja mooie handleiding
ma ik heb het gefixd, lijn 11 moest
if( isset($_POST['vraag1']))

zijn ipv wat ik had
nog ne merci voor alle hulp hé!
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan