Seite 1 von 4

Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 13:21
von Volli3
Ich möchte das registrierte Benutzer Daten in eine Tabelle eintragen und anzeigen können.
Es geht um eine kleine Adressverwaltung.
Mit "normalem PHP" bekomme ich das mühelos hin. Jetzt möchte ich das in phpbb anzeigen.
Das ist der aktuelle Stand:

Tabelle in Datenbank angelegt: Adressen

Code: Alles auswählen

CREATE TABLE `phpbb_adressen` (
       Id Int(11) NOT NULL auto_increment,
       Name VarChar(50) NOT NULL default '',
       Strasse VarChar(50) NOT NULL default '',
       PLZ VarChar(50) NOT NULL default '',
       Ort VarChar(50) NOT NULL default '',
       Mobil VarChar(50) NOT NULL default '',
       Festnetz VarChar(50) NOT NULL default '',
       Email VarChar(50) NOT NULL default '',
       Homepage VarChar(50) NOT NULL default '',
       Notiz Text(1000) NOT NULL default '',
        PRIMARY KEY (Id)
       );
eingetragen in includes/constants.php

Code: Alles auswählen

// Additional tables
// Adressen 
define('ADRESSEN_TABLE', $table_prefix . 'adressen');
Sprachdatei in language/de/mods/adressen.php habe ich erstellt.

root/adress_eintrag.php

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();  
$auth->acl($user->data); 
$user->setup('mods/adressen'); 

// Code erzwingt Anmeldung, Gäste haben keinen Zugriff
if ($user->data['user_id'] == ANONYMOUS)
{
// wenn Benutzer nicht angemeldet ist
}
else
{
// wenn Benutzer angemeldet ist
}
if ($user->data['user_id'] == ANONYMOUS)
{
	login_box();
}
// Ende Anmeldung erzwingen. Bis hier OK, ohne Anmeldung kein Zugriff

   // zeigt die Anzahl der vorhandenen Datensätze
   $sql = 'SELECT COUNT(*) AS count
   FROM ' . ADRESSEN_TABLE . '
   ORDER BY name';
   $result = $db->sql_query($sql);       
   $count = (int) $db->sql_fetchfield('count');
   $db->sql_freeresult($result); 
   $template->assign_vars(array(
   'TERM_ID_COUNT' => $count,
   // Ende Anzahl anzeigen. Bis hier OK, Anzahl der vorhandenen Datensätze wird im Template angezeigt
));

   // Beginn Daten in Datenbank eintragen
   $sql = 'SELECT *
	 FROM ' . ADRESSEN_TABLE . '
	 ORDER BY name';
	 $result = $db->sql_query($sql);
	 
	 if (isset($_POST["submit"])) 
{
   $sql = 'INSERT INTO .ADRESSEN_TABLE. (Name, Strasse, PLZ, Ort, Mobil, Festnetz, Email, Homepage, Notiz)
   
   VALUES ('.$_POST['Name'].','.$_POST['Strasse'].','.$_POST['PLZ'].','.$_POST['Ort'].','.$_POST['Mobil'].','.$_POST['Festnetz'].','.$_POST['Email'].','.$_POST['Homepage'].','.$_POST['Notiz'].')';
   
      mysql_query($sql);
   
      $template->assign_vars(array(
      'NAME' => $name, 
      'STRASSE' => $strasse, 
      'PLZ' => $plz, 
      'ORT' => $ort,
	    'MOBIL' => $mobil,
	    'FESTNETZ' => $festnetz, 
	    'EMAIL' => $email,  
	    'HOMEPAGE' => $homepage, 
	    'NOTIZ' => $notiz,  
    )
  );    
}           
   // Ende Daten in Datenbank eintragen 

page_header($user->lang['MEIN_TITEL']);
$template->set_filenames(array(
	'body' => 'adress_eintrag.html'
));
page_footer();
?>
/prosilver/template/adress_eintrag.html

Code: Alles auswählen

Es sind <b><font color="crimson">{TERM_ID_COUNT}</font></b> Eintragungen in der Datenbank vorhanden.

<h2>{L_EINTRAGEN}</h2>

<form action="" method="post">
<table width="700" border="0">
   
  <tr>
    <td><font face="Verdana" size="2">Cafe / Kneipe</font></td>
    <td><input type="text" name="Name" size="30" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Stra&szlig;e</font></td>
    <td><input type="text" name="Strasse" size="30" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">PLZ</font></td>
    <td><input type="text" name="PLZ" size="5" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Ort</font></td>
    <td><input type="text" name="Ort" size="30" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Mobil</font></td>
    <td><input type="text" name="Mobil" size="20" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Festnetz</font></td>
    <td><input type="text" name="Festnetz" size="20" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Email</font></td>
    <td><input type="text" name="Email" size="30" /></td>
  </tr>

  <tr>
    <td><font face="Verdana" size="2">Homepage</font></td>
    <td><input type="text" name="Homepage" size="40" /></td>
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Notiz</font></td>
    <td><textarea name="Notiz" cols="31" rows="3"></textarea></td>
  </tr>
  
  <tr>
      <td><input type="reset" name="reset" value="Zurücksetzen" /></td>
    <td><input type="submit" name="submit" value="Eintragen" /></td>
  </tr>
</table>
</form>
Die Anzahl der vorhandenen Datensätze wird korrekt im Template angezeigt.
Ich habe zum Testen 3 Adressen manuell in phpmyAdmin eingetragen.
Wenn ich jetzt über die Template-Datei versuche Daten einzutragen, erfolgt kein Eintrag.
Es erscheint aber auch keine Fehlermeldung
Was mache ich falsch?

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 13:40
von Pyramide

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 14:42
von Volli3
@Pyramide
Danke für die schnelle Antwort, sieht ziemlich kompliziert aus. (bin nur "Hobbyprogrammierer")
Ich bin mit deinen Links schon am basteln.
Kannst du mir eventuell noch ein ganz kleines Praxis-Beispiel an Code dafür geben?
Da kann ich das besser verstehen und finde die Lösung sicher schneller.

Ich denke das Thema interessiert bestimmt viele User.

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 14:54
von Miriam
Du hast bergeweise Praxisbeispiele für die Codeumsetzungen ... und zwar in den phpBB3 Scripten. Schau doch mal rein.

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 18:36
von Volli3
Hallo Miriam,
Du hast bergeweise Praxisbeispiele für die Codeumsetzungen ...

Genau die "Berge " an Scripten durchsuche ich seit 3 Wochen. Ich hätte hier nicht gefragt wenn ich eine Lösung hätte.
Wie oben schon gesagt, bekomme ich das in php zum laufen. Mein Problem besteht darin das auch in phpbb zu übertragen.
Trotzdem danke.

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 18:40
von Miriam
<OT>
  • Echt? Du suchst 3 Wochen nach einen Begriff, der ungefähr so anfängt -> $sql =
</OT>

Hier ist also ein Beispiel (aus der viewtopic.php):

Code: Alles auswählen

$sql = $db->sql_build_query('SELECT', array(
    'SELECT'    => 'u.*, z.friend, z.foe, p.*',

    'FROM'        => array(
        USERS_TABLE        => 'u',
        POSTS_TABLE        => 'p',
    ),

    'LEFT_JOIN'    => array(
        array(
            'FROM'    => array(ZEBRA_TABLE => 'z'),
            'ON'    => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id'
        )
    ),

    'WHERE'        => $db->sql_in_set('p.post_id', $post_list) . '
        AND u.user_id = p.poster_id'
));
$result = $db->sql_query($sql);

$now = phpbb_gmgetdate(time() + $user->timezone + $user->dst);

// Posts are stored in the $rowset array while $attach_list, $user_cache
// and the global bbcode_bitfield are built
while ($row = $db->sql_fetchrow($result))
{hier Auswertung der Datenübergabe}

$db->sql_freeresult($result); 
In dem sind so ziemlich alle Möglichkeiten drin... Check mal die Scripte nach weiteren evtl. einfacher gestrickten Beispielen durch,.

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 18:44
von Pyramide
Im Wiki gibt es doch genug Beispiele...

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 20:15
von Volli3
@Miriam
Dank für deine Mühe.
Du hast meine Frage eventuell nicht richtig verstanden.
Mir ist schon klar das der Fehler in der oben geposteten adress_eintrag.php liegt.

Meine Frage lautet:
Wie schreibe ich die Zeile 38 (die beginnt mit $sql...) bis Zeile 68 so um, dass ich das ganze mit request_var an $template->assign_vars(array( übergeben kann???...

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 12.02.2012 21:23
von Helmut
Hallo Volli3,

Ich habe dir mal ein paar Beispiele zusammengestellt wie du sowas aufbauen könntest. Das Beispiel ist nicht lauffähig, hab nur mal schnell die wichtigsten Stellen rausgesucht wie es aussehen könnte.

Code: Alles auswählen

//Vom Formular holen
$submit        = (isset($_POST['post'])) ? true : false; //ggf. durch request_var() ersetzen
$preview        = (isset($_POST['preview'])) ? true : false; //ggf. durch request_var() ersetzen
$mode        = request_var('mode', '');
$adress         = request_var('adress', 0);
$plz             = request_var('plz', '');
$time         = request_var('time', time());
$name         = utf8_normalize_nfc(request_var('name', '', true));

// preview
if ($preview == true)
{
    $template->assign_vars(array(
        'PREVIEW_ADRESS'    => $adress,
        'PREVIEW_NAME'    => $name,
    ));
}

// Make SQL array
if ($submit == true && $preview == false)
{
    $sql_ary = array(
        'titel'                => $db->sql_escape($subject),
        'article'            => $message,
        'description'        => $db->sql_escape($description),
        'post_time'            => time(),
        'last_change'        => time(),
        'name'            => $db->sql_escape($name),
        'adress'            => $db->sql_escape($adress),
        'plz'                => $db->sql_escape($plz),
    );
}

// submit
if ($submit == true && $preview == false && $mode != 'edit')
{
    $db->sql_query('INSERT INTO ' . ADRESS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
    $adress_id = $db->sql_nextid();
}

// Edit
if ($mode == 'edit' && $preview == false)
{
    $sql = 'SELECT *
        FROM ' . ADRESS_TABLE . '
        WHERE id = ' . $id;
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    if ($preview == false)
    {
        $time = $row['post_time'];
        $adress = $row['adress'];
        $plz = $row['plz'];
        $name = $row['name'];
    }
    
    if ($submit == true)
    {
        $db->sql_query('UPDATE ' . ADRESS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE id = ' . $id);
    }    
}

// Start Ausgabe
$template->assign_vars(array(
    'DESCRIPTION'             => $description,
    'L_POST_A'                 => $page_title,
    'SUBJECT'                => $subject,
    'POST_TIME'                => $time,
    'POST_USER'                => $post_user,
    'MESSAGE'                => $post_message,
));
 
Auf alle Fälle solltest du die Eingaben noch prüfen z.B. beim Text auf die erlaubten Zeichen usw. Du kannst dann ja noch mit reinnehmen, welcher User den Eintrag gemacht hat und wer ihn zuletzt geändert hat.

Und wie schon von den anderen geschrieben, einfach die Dateien oder Mods anschauen wie die das gelöst haben, so mache ich es auch. Da findest viele Anregungen für das eigene Projekt ggf. passt manchmal ein Mods schon der nur etwas abgeändert werden muss.

Gruß Helmut

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Verfasst: 13.02.2012 20:50
von Volli3
Hallo Helmut,
trotz aller Mühe und Deiner guten Tipps bekomm ich das nicht zum laufen.

Ich habe vor paar Wochen mit einer gleichen Datenbank-Tabelle mal genau das gemacht was bei http://www.schattenbaum.net/php/insert2.php und folgende Seiten so hervorragend beschrieben wird. Habe das an meine Datenbanktabelle angepasst und es läuft perfekt. Daten eintragen, suchen, ändern und löschen alles funktioniert.
Habe das das in 4 php-Dateien aufgeteilt (eintragen- suchen- aendern- und loeschen.php)

Ich gehe jetzt mal davon aus, dass die Datenbank-Tabelle (siehe oben) richtig erstellt ist. Das Anzeigen der Anzahl der vorhanden Datensätze funktioniert. Also wird die Datenbanktabelle in phpbb auch richtig gelesen.
Das Formular in der adress_eintrag.html müsste nach meiner Kenntnis auch so richtig sein. Angezeigt wird es im phpBB-Forum exakt wie ich es will.
Ich bekomm das einfach nicht hin das phpbb das gleiche macht was mit einer einfachen php fast spielend geht.
Fehlermeldung wird keine angezeigt.