Fragebogen in PHP - Unter allen Fragen die gleichen Antworten

daniel_sun

Erfahrenes Mitglied
Hallo PHPler,

ich habe einen Fragenbogen erstellt, der die Fragen und die dazugehörigen Antworten aus einer Datenbank ausliest und dann einen Fragebogen generiert.

Dieses Script liest die Datenbank aus und übergibt die Daten an ein Template:

PHP:
$target = "index.php?action=runfb&kid=".$_GET['kid']."";
    $sql = "SELECT * FROM frage WHERE frage_katalog = '".$_GET['kid']."' ORDER BY sort_id";
    $result = mysql_query($sql);

    $table_data = array();
        while ($row = mysql_fetch_assoc($result))
        {
            array_push(
                $table_data,
                array(
                    'fid' => $row['frage_id'],
                    'frage' => $row['frage_text']
                )
            );
            $sql2 = "SELECT * FROM antwort WHERE antwort_frage = '".$row['frage_id']."' ORDER BY antwort_sort_id";
            $result2 = mysql_query($sql2);

            $table_data2 = array();
            while ($row2 = mysql_fetch_assoc($result2))
            {
                array_push(
                $table_data2,
                array(
                    'aid' => $row2['antwort_id'],
                    'aname' => $row2['antwort_text']
                )
            );
            }
           
        }
    require_once 'tpl/fb.tpl';
    exit();

Dies ist das Template, welches den Fragebogen anzeigt:

HTML:
html>
    <head>
        <title>Fragebogen</title>
        <link rel="stylesheet" type="text/css" href="style/acp.css">
    </head>
    <body>
        <table border="0" width="70%" align="center">
        <tr>
            <td class="table_comp_top" width="70%">Willkommen beim Fragebogen</td>
        </tr>
        <tr>
            <td class="table_comp_middel" width="70%">
                <center><b><br>Die folgenden Fragenkataloge k&ouml;nnen beantwortet werden:</b></center>
                <p>
                <table border="1" align="center">
                    <tr class="table_content_top">
                        <td><b>Frage</b></td><td><b>Deine Antwort</b></td><td><b>richtige Antwort</b></td>
                    </tr>
                        <?php foreach ($table_data as $td_row): ?>
                    <tr class="table_content_middel">
                        <td><?=$td_row['frage']?></td><td><?=$td_row['antwort']?></td><td><?=$td_row['antwort']?></td>
                    </tr>
                        <?php endforeach; ?>
                    <tr class="table_content_bottom">
                        <th colspan="4" align="center">&nbsp;</th>
                    </tr>
                </table>
                </p>
                <p>
                <table border="1" align="center">
                    <tr class="table_content_top">
                        <th colspan="2"><b>Legende:</b></th>
                    </tr>
                    <tr class="table_content_middel">
                        <td><img src="img/stift.gif" alt="Stift" width="20" height="20"></td><td>Fragebogen beantworten</td>
                    </tr>
                </table>
                <br>
                </p>
            </td>
        </tr>
        <tr>
            <td class="table_comp_bottom" width="70%" align="center">Poll-Managers V1.0</td>
        </tr>
        </table>
    </body>
</html>

Mein Problem ist nun, das alle Fragen korrekt angezeigt werden aber unter allen Fragen die gleichen Antworten stehen(nämlich die der letzten Frage). Mir ist auch klar, dass es an der 2. While-schleife liegt. Ich habe nur leider keine Idee wie ichs richtig machen kann.

Ich hoffe ihr könnt mir helfen.

Gruß
Daniel_Sun
 
Dann versuch es doch mal mit Debuggen.

Setze in der Schleife in der du den Fehler vermutest mal ein echo(), print_f() oder am besten var_dump() auf die Variablen und schau was da genau passiert.
 
Es empfiehlt sich ein LEFT JOIN in der Query einzubauen. Damit könntest du deine beiden SQL-Abfragen in einer Bündeln. Spart minimal Leistung und gibt aber auch nur die Fragen raus, für die es eine Antwort gibt ;)

SQL:
SELECT 
  frage.*,
  antwort.*
FROM
  frage AS frage,
  antwort AS antwort
WHERE 
  frage.frage_katalog = '".$_GET['kid']."' AND
  antwort.antwort_frage = frage.frage_id
ORDER BY 
  frage.sort_id,
  antwort_sort_id
 
Zuletzt bearbeitet von einem Moderator:
Hi

wenn du das so schreibst, kann man sich auch noch ein paar Zeilen unnötigen Code sparen ;)
SQL:
SELECT
  frage.*,
  antwort.*
FROM
  frage,
  antwort
WHERE
  frage.frage_katalog = '".$_GET['kid']."' AND
  antwort.antwort_frage = frage.frage_id
ORDER BY
  frage.sort_id,
  antwort.antwort_sort_id

Wieso benutzt du ein Alias und nutzt als Alias dann den alten Namen? :confused:
 
Zuletzt bearbeitet von einem Moderator:
Das Problem ist ja, das er zu eine Frage mehrere Antworten ausgeben soll. Mit der SQL Anweisung klappt das dann nicht.

Das Problem ist nicht das auslesen aus der DB sondern, dass er den Letzten Eintrag auf das Ganze Template anwendet. Nun habe ich das Problem das er zu jeder Frage alle Antworten anzeigt. Damit das in dem Template klappt müsste im Grunde der Fragedatensatz 1 mal und dann alle antworten ausgegeben werden.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück