Support » Allgemeine Fragen » Eigene Datenbank Abfrage

  • Hallo zusammen,

    ich bin neu hier und möchte mich erstmal vorstellen.
    Mein Name ist Sascha. Habe schon ein paar Jährchen als IT-ler hinter mir und ein paar Skills in den Programmiersprachen C#, VisualBasic, Powershell und ein wenig PHP.
    In der WordPress Welt, bin ich komplett neu unterwegs und finde mich sehr gut zu recht.
    Jetzt komme ich zu meiner eigentliche Frage:
    Ist es möglich auf einer angelegten Seite eine MySQL Abfrage zu starten?

    Hintergrund:
    Ich habe in der MySQL Datenbank weitere Tabellen angelgt die ich Abfragen und auf der Seite ausgeben möchte.

    Meine WordPress Version ist 5.4.1.

    Was habe ich schon alles gemacht:
    Ich habe mit PHP Execution versucht auf der Seite direkt ein PHP Script zu schreiben. Dies wandelt das System anscheinend immer wieder in HTML um.
    Weitere Plugins die ich schon versucht habe sind Scripts n Styles, Code Snippets, Code Embed, Advanceds Custom Fields und entweder funktionieren diese nicht oder ich mache etwas falsch.

    Nach nun 3 Tagen googlen und lesen sehe ich vor lauter Bäume den Wald nicht mehr und ich hoffe ihr könnt mir einen neuen Tipp geben und mir weiterhelfen.

    Gruß

    Sascha

    Die Seite, für die ich Hilfe brauche: [Anmelden, um den Link zu sehen]

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Ich habe soetwas mal mit einem Seiten-Template in Verbindung mit dem Plugin „Tabs Responsive“ gebaut, vielleicht hilft dir das weiter:

    <?php
    /**
     * Template Name: Spiele
     *
     * Zeigt Spiele aller Mannschaften an
     *
     * @package VfB
     * @subpackage VfB
     *
     */
    ?>
    <?php get_header(); ?>
    	<?php do_action( 'vfb_before_body_content' ); ?>
    
    	<div id="primary">
    		<div id="content" class="clearfix">
    			<?php
                      // Ausgabe buffern
                      ob_start();
                      // Ausgabe starten
                      while ( have_posts() ) : the_post();
                          get_template_part( 'content', 'page' );
                      endwhile;
                      // Ausgabe aus Buffer holen
                      $output = ob_get_contents();
                      // Buffer loeschen
                      ob_end_clean();
    
                      global $wpdb;
    
                      $teams = array('1', '2', 'ah', 'da', 'e', 'f1', 'f2', 'g');
    
                      $types = array("(M)", "(F)", "(P)", "(T)", "(S)", "(R)");
    
                      foreach($teams as $team)
                      {
                         $rows = $wpdb->get_results("SELECT
                                                      <code>team</code>,
                                                      <code>gegner</code>,
                                                      <code>ort</code>,
                                                      <code>confirmed</code>,
                                                      <code>fail</code>,
                                                      <code>gametype</code>,
                                                      date_format(datum, '%d.%m.%Y') as d,
                                                      date_format(datum, '%H:%i') as h
                                                     FROM
                                                      <code>&quot; . $wpdb->prefix . &quot;spiele</code>
                                                     where
                                                       <code>datum</code> > now()
                                                     and
                                                       <code>team</code> = '$team'
                                                     order by
                                                       <code>datum</code>");
    
                       if($rows !== NULL) //Wenn nicht Null
                       {
                          if(!empty($rows)) //Wenn Array nicht leer
                          {
                             $table = "<table class='spiele'>";
    
                             $vfb = "VfB XXXXXXXXXXXXXXXXX e.V.";
    
                             foreach ($rows as $row)
                             {
    
                                if ($row->ort == "H")
                                  $spiel = $vfb . " - " . $row->gegner;
                                else
                                 $spiel = $row->gegner . " - " . $vfb;
    
                                $datum = $row->d;
                                
                                if ($row->confirmed)
                                    $datum .= ", " . $row->h . " Uhr";
    
                                $type = $types[$row->gametype];
    
                                if ($row->fail)
                                   $datum = "<span style='text-decoration: line-through;'>$datum</span>";
    
                                $table .= "<tr>
                                            <td>$spiel</td>
                                           <td>$datum &nbsp; &nbsp; &nbsp; $type</td>
                                          </tr>\n";
                            }
    
                            $table .= "<tr>
                                         <td colspan='2' style='font-size: 10pt; padding: 5px;'>
                                            (M)eisterschaftsspiel, (F)reundschaftsspiel, (P)okalspiel, (T)urnier, (S)onstiger Termin
                                         </td>
                                         </tr>
                                      </table>\n";
    
                             // Text im Tab ersetzen
                            $output = str_replace("##$team##",$table, $output);
                          }
                          else // Text im Tab ersetzen
                             $output = str_replace("##$team##","Keine aktuellen Termine vorhanden", $output);
                        }
                        else // Text im Tab ersetzen
                             $output = str_replace("##$team##","Keine aktuellen Termine vorhanden", $output);
                      }
    
                      echo $output;
                ?>
    
    		</div><!-- #content -->
    	</div><!-- #primary -->
    
    	<?php vfb_sidebar_select(); ?>
    
    	<?php do_action( 'vfb_after_body_content' ); ?>
    
    <?php get_footer(); ?>

    Der Aufbau und die Funktionsaufrufe können je nach Template unterschiedlich sein.

    • Diese Antwort wurde geändert vor 5 Monaten, 1 Woche von bscu.

    Für den Zugriff auf die MySQL-Datenbank stellt dir WordPress ein eigenes Objekt zur Verfügung, das WordPress Database Access Abstraction Object, kurz WPDB. Direkte Zugriffe auf die Datenbank solltest du vermeiden und statt dessen das Objekt nutzen, um die Sicherheit deiner Website nicht zu gefährden.

    Informationen zu WPDB findest du im Developer Handbook:
    Class WPDB

    Beachte dabei besonders den Abschnitt Protect Queries Against SQL Injection Attacks.

    PHP-Scripte solltest du nicht auf Seiten unterbringen, auch wenn es dafür (teilweise obskure) Plugins gibt. Entweder verwendest du das Plugin Code Snippets, um kurze Code-Schnipsel einzufügen oder du schreibst dein eigenes Plugin, was eigentlich nicht besonders kompliziert ist. Du findest dazu eine Anleitung unter
    https://developer.wordpress.org/plugins/

    Hier dürfte auch wieder der Abschnitt über Plugin-Sicherheit besonders interessant sein.

Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)