Vragenlijst/soort van stemwijzer
Bij voorbaat alvast dank voor de genomen moeite tijdens het lezen van deze post van een gloednieuwe gebruiker.
Op het moment ben ik bezig met het schrijven van een vragenlijst. Deze vragenlijst sla ik lokaal op in een phpMyAdmin database en run ik op OSX d.m.v. MAMP.
De betreffende database ziet er als volgt uit (ter illustratie, ik hoop dat de opmaak een beetje fatsoenlijk er uit rolt):
ID | vraag_top | vraag_bot | post_btn_nee | post_btn_ja
1 | vraag | vraag | int 1 of 0 | int 1 of 0
2 etc
3 etc etc.
Nu zou ik middels <p class ="vraag-top"></p> in de HTML in een <div> (niet in een php echo), de variabele $vraag_top & _bot willen gebruiken om de vragen uit de database te laden, en nog belangrijker; later de gegeven waardes van de <a href> voor post_btn_ja & nee in opslaan. In mijn leek taal: de variabelen $vraag_top en $vraag_bot zijn middels sass/scss mooi gestyled en met (?) if else statements (?) of onClick events op de Ja / Nee href (?) bepalen dat er antwoord is gegeven, dit antwoord opslaan in de database om hier later een uitkomst op te genereren en de volgende vraag te weergeven.
Ik betwijfel of mijn code allemaal logisch en/of semantisch is, ik beroep mij dan op het feit dat ik recent met .php begonnen ben :-), en hoop dat jullie mij alsnog verder willen helpen!
Ter afsluiting, nogmaals dank voor het meedenken.
phpMyAdmin is geen database, maar een databasebeheertool voor MySQLi/MariaDB databases. In het algemeen gebruik je deze het meest om een databasestructuur op te zetten en even snel wat data in te voeren (voor bijv. test- en ontwikkeldoeleinden).
- Ariën - op 04/05/2017 13:24:06:
Even ter duidelijkheid om een regelmatige veel gemaakt fout recht te zetten:
phpMyAdmin is geen database, maar een databasebeheertool voor MySQLi/MariaDB databases. In het algemeen gebruik je deze het meest om een databasestructuur op te zetten en even snel wat data in te voeren (voor bijv. test- en ontwikkeldoeleinden).
phpMyAdmin is geen database, maar een databasebeheertool voor MySQLi/MariaDB databases. In het algemeen gebruik je deze het meest om een databasestructuur op te zetten en even snel wat data in te voeren (voor bijv. test- en ontwikkeldoeleinden).
Dank voor uw snelle en duidelijke reactie Ariën!
Wat adviseert u met betrekking tot mijn bovenstaande vraag en uw gegeven informatie?
Bij voorbaat dank.
Moet je altijd één van beide keuzes maken, of mag je ook een vraag leeg laten?
Gewijzigd op 04/05/2017 14:00:09 door - Ariën -
- Ariën - op 04/05/2017 13:59:38:
Ik ben benieuwd waarom je twee velden hebt met: post_btn_nee en post_btn_ja.
Moet je altijd één van beide keuzes maken, of mag je ook een vraag leeg laten?
Moet je altijd één van beide keuzes maken, of mag je ook een vraag leeg laten?
Correct, de gebruiker beantwoord de vraag met "ja" of "nee", deze waarden moeten opgeslagen worden om met de uitkomst aan het eind een conclusie aan te trekken.
Dan is deze opzet niet echt verkeerd. Je kan ook kiezen voor een enkel veld met 'answer' en daarin een E_NUM type met 0 of 1. Maar dan blijft het wel bij vaste keuzes. Als je de opzet verandert met open vragen, meerkeuzes etc, dan zul je een aparte tabel moeten gebruiken.
- Ariën - op 04/05/2017 14:11:14:
Dan is deze opzet niet echt verkeerd. Je kan ook kiezen voor een enkel veld met 'answer' en daarin een E_NUM type met 0 of 1. Maar dan blijft het wel bij vaste keuzes. Als je de opzet verandert met open vragen, meerkeuzes etc, dan zul je een aparte tabel moeten gebruiken.
Dank voor je reactie. Ik ga de velden veranderen naar "antwoord/answer", dit lijkt me inderdaad beter. Nu kom ik terug op de eerste vraag. Hoe kan ik de vragen uit de database lezen, displayen in een div/p tag en het antwoord op die pagina opslaan?
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$result = mysqli_query($conn,"SELECT vraag_top, vraag_bot, answer FROM tbl_name");
if($result === false) {
// query loopt fout! Foutafhandeling tonen met mysqli_error()
} else {
while($data = mysqli_fetch_assoc($result)) {
// de data staat hier in: $data['vraag_top'], $data['vraag_bot'] en $data['answer']
}
}
?>
$result = mysqli_query($conn,"SELECT vraag_top, vraag_bot, answer FROM tbl_name");
if($result === false) {
// query loopt fout! Foutafhandeling tonen met mysqli_error()
} else {
while($data = mysqli_fetch_assoc($result)) {
// de data staat hier in: $data['vraag_top'], $data['vraag_bot'] en $data['answer']
}
}
?>
Dat is ook mij huidige structuur, excuus voor het niet eerder volledig vermelden.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$id = isset($_GET['id']);
$sql = "SELECT * FROM vragenlijsttbl ORDER BY id DESC";
$result = $connection->query($sql) or die($connection->error);
while($row = $result->fetch_assoc()) // nog geen foutmelding handler
{
$vraag_top = $row["vraag_top"];
$vraag_bot = $row["vraag_bot"];
};
$sql = "SELECT * FROM vragenlijsttbl ORDER BY id DESC";
$result = $connection->query($sql) or die($connection->error);
while($row = $result->fetch_assoc()) // nog geen foutmelding handler
{
$vraag_top = $row["vraag_top"];
$vraag_bot = $row["vraag_bot"];
};
en deze wil ik displayen in:
Code (php)
1
2
3
4
2
3
4
<div class ="container_vragen">
<p class ="vraag-top"><?= $vraag_top ?></p>
<p class ="vraag-bot"><?= $vraag_bot ?></p>
</div>
<p class ="vraag-top"><?= $vraag_top ?></p>
<p class ="vraag-bot"><?= $vraag_bot ?></p>
</div>
Het resultaat toont de laatste vraag in de row van de database, id2. Door "ORDER BY id DESC" toe te voegen aan de $sql variabele "SELECT * FROM" tonen $vraag_top en _bot de eerste row.
Het gewenste resultaat is dat er een <a href> (of iets anders) op de "Ja" en "Nee" knop komt te staan en die de resultaten post in de betreffende row gekoppeld aan het id.
Gewijzigd op 04/05/2017 15:53:43 door - Ariën -
Je moet je hele HTML die je steeds wilt herhalen in je while plaatsen.
Zou je dat iets meer willen toelichten? Ik ben overigens meer dan bereid om de aangeboden hulp te vergoeden!
Gewijzigd op 04/05/2017 15:53:20 door - Ariën -
Dat is me inderdaad gelukt. Door $row['vraag_top & _bot'] te echoën krijg ik ook alle rows als resultaat te zien. Hoe kan ik er nu voor zorgen dat er d.m.v. een antwoord (ja/nee) te geven het resultaat ervan op te slaan en de volgende row in de database te displayen? Nogmaals dank voor alle hulp Ariën!
- Ariën -:
Het is niet nodig om een voorlaatste post integraal te quoten.
Gewijzigd op 04/05/2017 15:52:56 door - Ariën -
Je hebt al een formuliertje met de radio- of selectbuttons?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$id = isset($_GET['id']);
$sql = "SELECT * FROM vragenlijsttbl LIMIT 1 OFFSET 2";
$result = $connection->query($sql) or die($connection->error);
while($row = $result->fetch_assoc()) {
?>
<div class ="container_vragen">
<p class ="vraag-top"><?php echo $row['vraag_top']; ?></p>
<p class ="vraag-bot"><?php echo $row['vraag_bot']; ?></p>
</div>
<?php
}
?>
$id = isset($_GET['id']);
$sql = "SELECT * FROM vragenlijsttbl LIMIT 1 OFFSET 2";
$result = $connection->query($sql) or die($connection->error);
while($row = $result->fetch_assoc()) {
?>
<div class ="container_vragen">
<p class ="vraag-top"><?php echo $row['vraag_top']; ?></p>
<p class ="vraag-bot"><?php echo $row['vraag_bot']; ?></p>
</div>
<?php
}
?>
LIMIT 1 OFFSET 1 t/m 15 wil ik nu in een if statement gaan verwerken. "if href is clicked, then show LIMIT OFFSET 2, 3, 4. Hoe ik de data bij klikken van href ga opslaan is nog maar de vraag.
Dan kan de gebruiker steeds heen en weer switchen omdat alles realtime bij het klikken wordt verstuurd.
Gewijzigd op 04/05/2017 16:10:00 door - Ariën -
Dat klinkt fantastisch! Hier heb ik tijdens het zoeken voor oplossingen ook meermaals reacties over gelezen. Mijn kennis reikt echter nog niet zo ver om hier zoals jij dat kan een oplossing in te bedenken... De oplossing zoals jij het schets is wel het gewenste eindresultaat, inclusief het opslaan van het antwoord dan.
Met deze code kan je in ieder geval al de gekozen waarde tonen. Met een $.ajax() request kan je deze naar je script sturen.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<select id="123" name="123">
<option value="0">Nee</option>
<option value="1">Ja</option>
</select>
<div class="checked"></div>
<select id="123" name="123">
<option value="0">Nee</option>
<option value="1">Ja</option>
</select>
<div class="checked"></div>
En de JavaScript:
Gewijzigd op 04/05/2017 16:35:23 door - Ariën -
Hier kom ik helaas niet verder mee... Ben je mogelijk bereid om nog verder uit te weiden in je toelichting?
In plaats van die alert moet je dus de $.ajax() functie van jQuery gebruiken.
Hoe kan ik de variabele $vraagid laten optellen met 1, bij het klikken van de ja of nee button/href/HTML element?