WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

Du bist nicht angemeldet.

#1 16.10.2020 15:43:00

gks
Mitglied

[gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Liebe Foristen,
ich bin mir nicht sicher, ob der Beitrag hier richtig ist.

Ich habe eine Frage zu php, die aber speziell auf WBCE ausgerichtet ist.

Ich möchte eine Information zu einer bestimmten Tabelle der zur WBCE-Installation gehörigen Datenbank abfragen, nämlich die Anzahl der Einträge (=Zeilenanzahl). Mittels online-Suche habe ich diese funktionierende Lösung gefunden:

<?php
$dbhandle = mysql_connect("datenbankserver","benutzer","passwort");
$db = mysql_select_db("datenbank", $dbhandle);
$result = mysql_query("SELECT * FROM tabelle");
echo mysql_num_rows($result);
?>

Nun meine Frage: Wie geht das, ohne die Datenbankdaten fest in den Code2-Abschnitt hinein zu schreiben? Das erscheint mir irgendwie zu unsicher. Ich kenne von anderen php-Skripten, dass da die Zeile

[== PHP ==]
global $database,$wb;

steht, und darüber meines Wissens die Verbindung zur Datenbank hergestellt wird. Aber ich bekomme das darüber nicht hin (bin php-Novize big_smile )

Danke fürs Lesen und Eure zahlreichen Tipps
GKS

Beitrag geändert von gks (16.10.2020 18:31:33)


WBCE Version: 1.6.2
PHP Version: 8.1.27
MySQL Version: 5.7.38
Hoster: Strato  facepalm

Offline

#2 16.10.2020 15:59:47

bernd
Developer

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

In einem Code2 Abschnitt hast du ohnehin bereits eine bestehende Verbindung zur Datenbank, also brauchst du keinerlei Klimmzüge machen um diese herzustellen.
Du kannst direkt loslegen.
Beispiel (alle Daten aus der addons-Tabelle holen und die jeweiligen Addon-Namen ausgeben):

$result = $database->query("SELECT * FROM `addons`");
while ($data = $result->fetchRow()) {
  echo $data['name'];
  echo '<br>';
}

Edit:
um bei deinem Beispiel zu bleiben - Zählen der Einträge:

$result = $database->query("SELECT * FROM `addons`");
echo $result->numRows();

Beitrag geändert von bernd (16.10.2020 16:06:26)


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

Liked by:

gks

#3 16.10.2020 16:23:00

gks
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Dass es soooo einfach ist, hätte ich nicht gedacht. big_smile

@Bernd: Super, hab' recht vielen Dank!

Ich wünsche ein schönes WE
GKS


WBCE Version: 1.6.2
PHP Version: 8.1.27
MySQL Version: 5.7.38
Hoster: Strato  facepalm

Offline

#4 17.10.2020 08:06:48

berny
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

sollte das nicht einfacher sein?

$rows= $database->query(" SELECT COUNT(*) FROM addons");
echo $rows;

Offline

#5 17.10.2020 14:49:59

bernd
Developer

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

@berny:
nicht ganz  - $database->query gibt immer ein mysql-Object zurück das man nicht per echo ausgeben kann.

Dies hingegen würde funktionieren:

$rows = $database->get_one("SELECT COUNT(*) FROM `addons`");
echo $rows;

Beitrag geändert von bernd (17.10.2020 14:51:02)


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

Liked by:

berny

#6 13.02.2021 16:05:32

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

bernd schrieb:

In einem Code2 Abschnitt hast du ohnehin bereits eine bestehende Verbindung zur Datenbank, also brauchst du keinerlei Klimmzüge machen um diese herzustellen.
Du kannst direkt loslegen.
Beispiel (alle Daten aus der addons-Tabelle holen und die jeweiligen Addon-Namen ausgeben):

$result = $database->query("SELECT * FROM `addons`");
while ($data = $result->fetchRow()) {
  echo $data['name'];
  echo '<br>';
}

Edit:
um bei deinem Beispiel zu bleiben - Zählen der Einträge:

$result = $database->query("SELECT * FROM `addons`");
echo $result->numRows();

Sehr schön, das hat mir schonmal die Tür geöffnet smile
Meiner sieht jetzt erstmal so aus.

[== PHP ==]
$result = $database->query("SELECT * FROM `rmyAp_mod_mpform_results_264`");
while ($data = $result->fetchRow()) {
  echo $data['field24'], $data['field21'], $data['field22'], $data['field25'], $data['field26'], $data['field27'], $data['field28'], $data['field29'] ;
  echo '<br>';
}

Wie bekomme ich das jetzt in einer Tabelle verschönert, damit das sauber aufgelistet und mit anderen Namen im Tabellenkopf angezeigt bekomme?
Darüber hinaus würde ich gerne das mit datatables einbinden.


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

#7 13.02.2021 16:46:28

bernd
Developer

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

In dem du vor der while-Schleife dein Tabellen-Anfangs-Geraffel zusammenbastelst, etwa so:

echo '<table id="id-fuer-dynamic-table">';
echo '<thead>';
echo '<tr>';
echo '<th>Überschrift 1</th>';
echo '<th>Überschrift 2</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';

(könnte man auch zusammenfassen, hab's nur wegen der Übersichtlichkeit auf mehrere Zeilen verteilt)

In der while-Schleife baust du dann die Datenausgabe:

echo '<tr>';
echo '<td>'.$data['field24'].'</td>';
echo '<td>'.$data['field21'].'</td>';
echo '</tr>';

Und nach der while-Schleife machst du die Tabelle ordentlich zu:

echo '</tbody>';
echo '</table>';

... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#8 13.02.2021 17:32:17

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Hallo Bernd,
vielen vielen Dank für die einfache Erklärung, ich mache  gerade mehrere Luftsprünge  glasses  big_smile

Das hat alles auf anhieb funktioniert. cool

Ich habe hier aber noch zwei Felder definier.
In dem ersten Feld32 wird ein Link für ein Bild hinterlegt.
In dem zweiten Feld33 wird das Einverständnis für das Bild hinterlegt.

Ich möchte gerne das Bild, sofern das Einverständnis vorliegt in der Zeile, wenn man mit der Maus darüber fährt einblenden lassen.
Ist so etwas möglich und ja wie?

Beitrag geändert von Slugger (13.02.2021 17:32:36)


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

#9 13.02.2021 17:47:59

bernd
Developer

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Boah ... jetzt wird's aber hardcore  devil

Das Bild fest anzeigen zu lassen wäre vermutlich kein größeres Problem wenn da im Feld32 sowas wie "media/blah/blub/fasel.jpg" steht (also eine Angabe die man als src-Attribut für den img-Tag verwenden kann), halt in Abhängigkeit von dem was in Feld33 steht (true/false - 1/0 - oder was auch immer).
Für die mouse-over Geschichte bräuchte es aber "klein bischen" mehr an "Magie", das kann ich jetzt grade ohne konkrete Daten auch nicht aus dem Ärmel schütteln, außerdem wäre das dann in einem Code-Abschnitt bischen heftig ...


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#10 13.02.2021 18:14:53

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Ja im Feld32 steht der Link zu dem Bild.
Feld33 wird nur gefüllt, wenn JA bestätigt wird, ansonsten ist es LEER.

Ich habe das mal irgendwo gesehen, kann mich aber nicht mehr daran erinnern wo das war.

Wäre ein nettes Gimmick wenn man über die Zeile mit der Maus fährt und das Bild eingeblendet wird.

NACHTRAG:
Das ist jetzt der aktuelle Code den ich in Verbindung mit datatable verwende:

$result = $database->query("SELECT * FROM `rmyAp_mod_mpform_results_264`");

# 1. Tabelle öffnen und erste Tabellenzeile mit Spaltennamen definieren. 
echo '<table id="264" width="100%">';
echo '<thead>';
echo '<tr>';
echo '<th>Turnierdatum</th>';
echo '<th>Name Reiter</th>';
echo '<th>Name Pferd</th>';
echo '<th>Turnierort</th>';
echo '<th>Prüfungsart</th>';
echo '<th>Ergebnis</th>';
echo '<th>Platzierung</th>';
echo '<th>Ordnung</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';

# 2. Daten aus DB auslesen
while ($data = $result->fetchRow()) {
echo '<tr>';
echo '<td>'.$data['field24'].'</td>';
echo '<td>'.$data['field21'].'</td>';
echo '<td>'.$data['field22'].'</td>';
echo '<td>'.$data['field25'].'</td>';
echo '<td>'.$data['field26'].'</td>';
echo '<td>'.$data['field27'].'</td>';  
echo '<td>'.$data['field28'].'</td>';  
echo '<td>'.$data['field29'].'</td>';
echo '</tr>';
}

# 3. Tabelle abschließen
echo '</tbody>';
echo '</table>';

Beitrag geändert von Slugger (13.02.2021 18:16:25)


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

#11 13.02.2021 20:03:33

bernd
Developer

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Sodele, hab da mal bischen gespielt  ops

Die Tabellenzelle für dein Bild könnte so aussehen:

echo '<td  style="position:relative;">';
if ($data['field33'] != '') {
       echo '<span class="show-this-pic">Bild anzeigen</span>';
       echo '<img src="'.$data['field32'].'" style="display:none; position:absolute; top:32px; left:0; z-index:99">';
}
echo '</td>';

Wichtig ist hierbei die position:relative für's td sonst klappt anschließend das position:absoltue für's img nicht.
Und mit top/left das img so positionieren das es nicht das "Bild anzeigen" überlagert (hat mich grade richtig Nerven gekostet warum das partout nicht funktionieren wollte ... ist aber klar: wenn das Bild den Text überlagert verliert der Text seinen Focus  roll )

Das $data['field32'] im img src musst du ggf. halt noch erweitern, je nachdem was da schon als Link vorhanden ist.

Dann packst du einen weiteren Code2-Abschnitt drunter vom Typ "Javascript", dort kommt dann dieses Schnippsel rein:

$(document).ready(function(){
  $('.show-this-pic')
    .mouseover(function() {
      $(this).next('img').show();
    })
    .mouseout(function() {
      $(this).next('img').hide();
    });
});

Das ganze war jetzt eine "Trockenübung" ohne reale Daten, hoffe das es trotzdem passt  angel

Beitrag geändert von bernd (13.02.2021 20:05:23)


... nein in Europa verwenden wir beim Programmieren nicht € statt $ ...

Offline

#12 13.02.2021 20:31:39

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Hallo bernd,
vorab schonmal ein dickes Dankschön, werde ich ausprobieren.

In der Zwischenzeit habe ich auch noch mal geschaut wo ich das damals gefunden hatte.
Und ich meine fündig geworden zu sein.

Nennt sich mouse-overlib:

http://www.tommyherrmanndesign.com/nof/ … erlib.html
https://github.com/overlib/overlib


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

#13 14.02.2021 11:44:00

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

Hallo bernd,
Hut ab vor deinen Trockenübungen  glasses  thumb_up

Ich musste noch entsprechend die Spalte vorziehen, damit der Effekt für das Einblenden des Bildes funktioniert.

Sobald nämlich datatables die Überschüssigen Spalten im "+" Button verbirgt, funktioniert der Code mit dem Einblenden nicht mehr sad

Jetzt ist aber wieder eine Spalte mehr dazugekommen, ist es denn auch möglich das man z. B.: field21 und flied22 zum Einblenden für das Bild nehmen kann oder gar die komplette Zeile selbst wenn der Mausepfeil in der Zeile ist? (Siehe Bild im Anhang)

Ich möchte auch noch die Schriftgröße der Tabelle  wieder kleiner haben ebenso wie ich die Sortierreihenfolge in der ersten Spalte hinbekomme, da tappe mal wieder im Dunkeln.

Beitrag geändert von Slugger (14.02.2021 12:16:41)


Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

#14 20.03.2021 16:27:07

Slugger
Mitglied

Re: [gelöst] Datenbankzugriff über php mittels code2-Abschnitt

@bernd

Wie muss der Code aussehen, wenn ich stattdessen nur über <tr> das Bild einblenden lassen möchte, wenn die Maus über die Zeile  fährt und das field32 ein Bild hat?
Denn ich möchte das field32 aus Platzgründen nicht anzeigen lassen.

[== PHP ==]
# Daten aus DB auslesen
$result = $database->query("SELECT * FROM `rmyAp_mod_mpform_results_264` ORDER BY field21 ASC");

# 1. Tabelle öffnen und erste Tabellenzeile mit Spaltennamen definieren. 
echo '<table id="264" width="100%">';
echo '<thead>';
echo '<tr>';
echo '<th>Turnierdatum</th>';
echo '<th>Show</th>';
echo '<th>Name Reiter</th>';
echo '<th>Name Pferd</th>';
echo '<th>Turnierort</th>';
echo '<th>Prüfungsart</th>';
echo '<th>Ergebnis</th>';
echo '<th>Platzierung</th>';
echo '<th>Ordnung</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';

# 2. Ausgelesene Daten in Tabelle einfügen
while ($data = $result->fetchRow()) {
echo '<tr>';
echo '<td>'.$data['field24'].'</td>';
  echo '<td  style="position:relative;">';
if ($data['field33'] != '') {
       echo '<span class="show-this-pic">Bild</span>';
       echo '<img src="'.$data['field32'].'" style="display:none; position:absolute; top:32px; left:0; z-index:99">';
}
echo '</td>';
echo '<td>'.$data['field21'].'</td>';
echo '<td>'.$data['field22'].'</td>';
echo '<td>'.$data['field25'].'</td>';
echo '<td>'.$data['field26'].'</td>';
echo '<td>'.$data['field27'].'</td>';  
echo '<td>'.$data['field28'].'</td>';  
echo '<td>'.$data['field29'].'</td>';
echo '</tr>';
}

# 3. Tabelle abschließen
echo '</tbody>';
echo '</table>';

Hoster: ALL-INKL *** Grundsätzliche WBCE Konfig ***
WBCE: 1.5.4 • BE: 2.1.0 • PHP: 8.1.16 * 1. Projekt: FE: Simple responsive • BE: Argos * 2. Projekt: FE: hortal • BE: Argos * 3. Projekt: FE: WBCEZon • BE: Argos * 4. Projekt: FE: WBCETik • BE: Argos
Status Projekt 1-4:  OK

Online

Fußzeile des Forums

up