Seite 1 von 1

Verschachtelte SQL-Abfragen

Verfasst: 26.08.2015 12:33
von mps
Hallo zusammen,

ich habe zwei SQL Abfragen von verschiedenen Tabellen. Die beiden Abfragen sollen ins Template gesendet werden. Das ganze sieht so aus bisher:

Code: Alles auswählen

<!-- BEGIN umfrage -->
Inhalt ... {umfrage.TITEL} .. weiterer Inhalt
Das war Teil eins. Das klappt auch alles wunderbar.

Dann kommt der zweite Teil, in dem die zweite Datenbank-Abfrage dort rein soll:

Code: Alles auswählen

<!-- BEGIN umfragepolls -->
Inhalt... {umfragepolls.AUSWAHL_ID} ... weiterer Inhalt
<!-- END umfragepolls -->
<!-- END umfrage -->
Der PHP Code ist insofern richtig, weil der Inhalt von der Abfrage mit umfragepolls auch an das Template gesendet wird (var_dump($template)) Die Abfrage und das Anzeigen im Template von der ersten Abfrage (umfrage) klappt super. Muss ich im PHP-Code irgendwie die Abfrage mit umfragepolls noch verschachteln in die Abfrage umfrage damit das so klappt?

Hier nochmal der PHP-Code (Abfrage weiter unten bei switch; Datei noch lange nicht fertig, daher noch keine Sicherheitsaspekte):

Code: Alles auswählen

<?php
/**
*
* @author Original Autor mps info@raphael-priebe.de - http://raphael-priebe.de
*
* @package {PACKAGENAME}
* @version 2.1.0
* @copyright (c) 2014 Raphael Priebe
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
// Benötigte Dateien und Variablen von phpBB
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);


// Session auslesen und Benutzer-Informationen laden
$user->session_begin();  // Session auslesen
$auth->acl($user->data); // Benutzer-Informationen laden
$user->setup('mods/umfrage'); // Sprachvariablen aus eigener Sprach Datei laden

/*
* Nun folgt erst Dein PHP Code für die neue Seite, also:
* Variablen setzen, Datenbankabfragen, Einfügen und Entfernen von Einträgen usw...
*
* Dies ist nun ein sehr primitives Beispiel.
* Es soll nur veranschaulichen wie es funktioniert.
*
*/



//GET_VARIABLEN

$mode    = request_var('mode', '');

 $mode = isset($mode) ? $mode : 'watch';
$mode = trim($mode) == '' ? 'watch' : $mode;

$aktuelle_umfrage = $config['aktuelle_umfrage'];

/*
 * Modes:
 *
 * watch=aktuelle Umfrage ansehen (wenn bereits abgestimmt, dann ergebnisse sehen, wenn nicht, dann antwortmöglichkeiten)
 * see=aktuelle Umfrage ansehen
 * vote=aktuelle Stimme speichern (Datenbank-Update und Form-action)
 * archiv=alte umfragen ansehen
 * results=ergebnisse sehen
 */

if($mode == "watch" || $mode == "see") {
    if ($user->data['user_id'] == ANONYMOUS)
    {
       $show_result_link = true;
    } else {
    //Abfrage ob der Result-Link angezeigt werden soll
    $result = $db->sql_query("SELECT show_link FROM ". U_TABLE ." WHERE umfrage_id = '" . $config['aktuelle_umfrage'] ."';");

    while($row = $db->sql_fetchrow($result))
    {
        $showresultlink = $row['show_link'];

        if($showresultlink = 1){
            $show_result_link = true;
        }
        elseif ($showresultlink = 0){
            $show_result_link = false;
        }
        else {
            echo "Show-Result-Link enth&auml;lt einen falschen Wert! Seiten-Aufbau abgebrochen. Bitte kontaktiere einen Administrator.";
            die;
        }
    } //ENDE
}}

//Wenn Modus watch, dann soll dieser bei Gästen auf see gesetzt werden

if ($user->data['user_id'] == ANONYMOUS && $mode == "watch") {
    $mode = "see";
}
elseif ($user->data['user_id'] != ANONYMOUS && $mode ="watch") {  //Wenn Modus watch, soll bei Usern entschieden werden, ob bereits abgestimmt (MODUS RESULTS) oder noch nicht abgestimmt (MODUS SEE) worden ist

    $result = $db->sql_query("SELECT * FROM " . U_VOTES_TABLE . " WHERE umfrage_id = 1 AND user_vote = 2;");

    if (mysqli_num_rows($result) == 0) {
        $mode = "see";
        $uservoteallready = false;
    }
    elseif (mysqli_num_rows($result) >= 1) {
        $mode = "results";
        $uservoteallready = true;
    }
    else {
        echo "Es ist ein schwerwiegender Fehler aufgetreten. mysqli_num_rows sind nicht 0 oder +1, sondern:";
        $rowsnum = mysqli_num_rows($result);
        echo "$rowsnum";
        exit;
    }
} //ENDE

//GET umfrage_id wenn erforderlich

if ($mode == "see" || $mode == "results"){
    $umfrage_id = request_var('poll', 0);
    //Fülle umfrage_id wenn leer mit aktueller Umfrage

    if ($umfrage_id == "0" || $umfrage_id == ""){
        $umfrage_id = $aktuelle_umfrage;
    }
}

//ENDE
//Teste ob noch Berechtigung für "see" gegeben ist

if ($uservoteallready === true && $mode == "see" && $user->data['user_id'] != ANONYMOUS){
    $mode = "results";
    $error = "allreadyvoted";
}

//ENDE
// Teste ob Berechtigung für "results" gegeben ist

if ($uservoteallready === false && $mode == "results" && $user->data['user_id'] != ANONYMOUS && $show_result_link == false){
    $mode = "see";
    $error = "allreadyvoted";
}
//ENDE

switch($mode){
    //Jetzt werden die erforderlichen Aktionen in PHP je nach MODE ausgeführt. Mode-Liste steht oben

    case('see'):
        $result = $db->sql_query("SELECT * FROM " . U_TABLE . " WHERE umfrage_id = '" . $umfrage_id . "'");

        while($row = $db->sql_fetchrow($result))
        {
            $template->assign_block_vars('umfrage', array(
                'UMFRAGE_ID'        => $row['umfrage_id'],
                'TITEL'        => $row['titel'],
                'MAX_VOTES'        => $row['max_votes'],
                'MIN_VOTES'        => $row['min_votes'],
                'SHOW_LINK'        => $row['show_link'],
            ));

        }

        $result = $db->sql_query("SELECT * FROM " . U_POLLS_TABLE . " WHERE umfrage_id = '" . $umfrage_id . "'");

            while($row = $db->sql_fetchrow($result))
            {
                $template->assign_block_vars('umfragepolls', array(
                    'AUSWAHL_ID'        => $row['auswahl_id'],
                    'TITEL'        => $row['title'],
                ));
            }
    break;

    case('results'):

    break;

    case('archiv'):

    break;

    case('vote'):

    break;

    default:
        echo "Es ist ein schwerwiegender Fehler aufgetreten. Die Variable mode ist verkehrt (aktueller Wert: $mode ). Bitte kontaktiere einen Techniker!";
        exit;
    break;
}

// Ein typischer Gebrauch um Variablen an das Template zu senden.
$template->assign_vars(array(
    'SRL'    => $show_result_link,
    'MODE'    => $mode,

));

// Seiten Titel, diese Sprach Variable sollte in der Sprach Datei,
// welche weiter oben genannt wurde, definiert sein.
page_header($user->lang['MEIN_TITEL']);

// Defniere nun den Dateinamen Deines Templates welches Du benutzen moechtest.
// Dies ist der Name von Deinem Template welches unter /styles/<style>/templates/ zu finden ist.
$template->set_filenames(array(
    'body' => 'umfrage.html',
));

// Script vervollständigen und Seite anzeigen lassen.
page_footer();

?>
Vielen Dank schon einmal im Voraus.

Gruß,
mps