Daten in Datenbank-Tabelle eintragen / anzeigen

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Helmut »

Hallo Volli3,

die Abfrage sollte so in etwa aussehen

Code: Alles auswählen

$suchen_ort = request_var('ort', '');
           
$sql = 'SELECT *
    FROM ' . ADRESSEN_TABLE ."
    WHERE ort LIKE '$suchen_ort%'
    GROUP BY ort, name";           
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
     //Hier Ausgabe alles was zum Datensatz gehört
    $template->assign_block_vars('liste', array(
        'ORT' => $row['ort'],                         
        'PLZ' => $row['plz'], 

        'U_FORM_ACTION_EDIT'         => append_sid($phpbb_root_path . 'adress_eingabe.' . $phpEx, 'mode=edit&id=' . $row['id']), //Datensatz bearbeiten
        'U_FORM_ACTION_DELETE'       => append_sid($phpbb_root_path . 'adress_eingabe.' . $phpEx, 'mode=delete&id=' . $row['id']), //Datensatz löschen                       
    ));
}
$db->sql_freeresult($result);


//hier Ausgabe vom Rest
$template->assign_vars(array(
    'U_FORM_ACTION'         => append_sid($phpbb_root_path . 'adress_suche.' . $phpEx, 'mode=search'),
));
 
und so wird die Liste in der html ausgegeben (mit entsprechender Formatierung, musst halt noch machen)

Code: Alles auswählen

//Hier würde die Eingabe für die Suche sein

<!-- BEGIN liste -->

{liste.ORT} 
{liste.PLZ}

//Hier würden die Buttons zum Bearbeiten vom Datensatz sein
<!-- END liste -->  
Du solltest die php Dateien für die Eingabe der Datensätze und die für die Anzeige trennen z.B adress_eingabe.php und adress_suchen.php, dann wird es einfacher und übersichtlicher.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Volli3
Mitglied
Beiträge: 14
Registriert: 12.02.2012 12:22

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Volli3 »

Hallo Helmut,
läuft jetzt alles glänzend :grin:

Noch mal großen Dank für deine Hilfe.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von BNa »

Statt

Code: Alles auswählen

$suchen_ort = request_var('ort', '');
würde ich

Code: Alles auswählen

$suchen_ort = request_var('ort', '', true);
draus machen. Für UTF8 Unterstützung, zB. Suche nach "München"
Volli3
Mitglied
Beiträge: 14
Registriert: 12.02.2012 12:22

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Volli3 »

Danke BNa für den Tipp

Beim Eintragen geht das wunderbar wenn ich schreibe

Code: Alles auswählen

$sql =   'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array(
                 'ort' =>        request_var('ort','', true),
Bei suchen macht er es nicht.
Mein Code

Code: Alles auswählen

$suchen_ort = request_var('ort', '', true);                   
    $sql = 'SELECT *
        FROM ' . ADRESSEN_TABLE ."      
        WHERE ort LIKE '$suchen_ort%'
        GROUP BY ort, name";           
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('liste', array(
            'ORT'      => $row['ort'],  'ORT'      => $row['ort'], 
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Helmut »

Hallo Volli3,

und läuft jetzt dein Projekt?

Lasse doch mal sehen was du da zusammen gebastelt hast.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Volli3
Mitglied
Beiträge: 14
Registriert: 12.02.2012 12:22

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Volli3 »

Hallo Helmut,
habe das zur Demo mal teilweise freigeschaltet.
http://www.polarbiker.dyndns.org/forum/adress_liste.php

Auflisten, Eintragen und Suchfunktion ist fertig und funktioniert.
Ändern / Löschen ist noch in Arbeit.

Beim Eintragen ist allerdings noch ein kleiner Fehler drin. Er schreibt mir jedesmal eine Leerzeile in die Datenbank.
Kannst du den Fehler sehen ?

Code: Alles auswählen

 $sql = 'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array(
    
           'name' =>     request_var('name','', true),
           'strasse' =>  request_var('strasse','', true),
           'plz' =>      request_var('plz',''),
           'ort' =>      request_var('ort','', true),
           'land' =>     request_var('land','', true),
           'telefon' =>  request_var('telefon',''),
           'email' =>    request_var('email','', true),
           'homepage' => request_var('homepage','', true),
				   'Notiz' =>    request_var('Notiz',''))               
          );
     
    $db->sql_query($sql); 
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Helmut »

Hallo Volli3,

du meinst bei jedem Eintrag schreibt er zwei Datensätze in die Tabelle wobei einer davon leer ist?

Dann stellt sich die Frage, schreibt er zuerst den leeren und dann den vollen Datensatz oder umgekehrt. Der Teil vom Code wo du die Daten absendest wäre noch interessant und auch die html Datei dazu.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Volli3
Mitglied
Beiträge: 14
Registriert: 12.02.2012 12:22

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Volli3 »

Ja er macht 2 Einträge
1. Leere Zeile dann 2. den korrekten Eintrag

So sehen die Dateien komplett aus:

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, 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 Datensätze anzeigen  
));

   // Beginn Daten in Datenbank eintragen                
    $sql = 'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array(
    
           'name' =>     request_var('name','', true),
           'strasse' =>  request_var('strasse','', true),
           'plz' =>      request_var('plz',''),
           'ort' =>      request_var('ort','', true),
           'land' =>     request_var('land','', true),
           'telefon' =>  request_var('telefon',''),
           'email' =>    request_var('email','', true),
           'homepage' => request_var('homepage','', true),
				   'Notiz' =>    request_var('Notiz',''))               
          );
     
    $db->sql_query($sql); 
   // Ende Daten in Datenbank eintragen 

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

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->
<br />
<div class="forabg">
	<div class="inner">
		<span class="corners-top"><span></span></span>
		<ul class="topiclist">
			<li class="header"><dl><dt>{L_EXAMPLE}</dt>
                <dd></dd>
              </dl></li>
		</ul>	
		<ul class="topiclist forums" style="padding: 5px">
			<li>
<!-- Bis hier nichts verändern -->	

<!-- Anfang Inhalt einfügen -->

<font face="Verdana" size="2">Total sind</font>&nbsp;<b><font color="crimson" size="2">{TERM_ID_COUNT}</font></b><font face="Verdana" size="2"> Eintragungen in der Datenbank vorhanden.</font>
<br>
<br>

<p>
{L_BUTTONANZEIGEN} {L_BUTTONSUCHE} {L_BUTTONAENDERN} {L_BUTTONGMAP}
</p>


<h2>{L_EINTRAGEN}</h2> 

<b>Hinweis:</b> Dein Eintrag darf die Länge des Eingabefeldes nicht überschreiten.<br>Die Datenbank zeigt sonst eine Fehlermeldung !
<br>
<br>
<form action="" method="post">
<table width="700" border="0">
   
  <tr>
    <td><font face="Verdana" size="2">Cafe&bull;Kneipe&bull;Pension&bull;Hotel</font></td>
    <td><input type="text" name="name" size="30" /></td>
  </tr>
  
  <tr>
   <td>&nbsp;</td>
	 <td>&nbsp;</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>&nbsp;</td>
	 <td>&nbsp;</td> 
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Land</font></td>
    <td><input type="text" name="land" size="3" />&nbsp;&nbsp;z.B. D / CZ / PL</td>
  </tr>
  
  <tr>
   <td>&nbsp;</td>
	 <td>&nbsp;</td> 
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">Telefon</font></td>
    <td><input type="text" name="telefon" size="20" /></td>
  </tr>
  
  <tr>
   <td>&nbsp;</td>
	 <td>&nbsp;</td> 
  </tr>
  
  <tr>
    <td><font face="Verdana" size="2">E-Mail</font></td>
    <td><input type="text" name="email" size="80" /></td>
  </tr>

  <tr>
    <td><font face="Verdana" size="2">Homepage</font></td>
    <td><input type="text" name="homepage" size="80" /></td>
  </tr>
  
  <tr>
   <td>&nbsp;</td>
	 <td>&nbsp;</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>

<!-- Ende Inhalt einfügen -->	

<!-- IF S_DISPLAY_ONLINE_LIST -->

	<table class="tablebg" cellspacing="1">
	<tr>
		<td class="cat" colspan="2"><!-- IF U_VIEWONLINE --><h3><a href="{U_VIEWONLINE}">{L_WHO_IS_ONLINE}</a></h3><!-- ELSE --><h3>{L_WHO_IS_ONLINE}</h3><!-- ENDIF --></td>
	</tr>
	<tr>
	<!-- IF LEGEND -->
		<td class="row1" rowspan="2" align="center" valign="middle"><img src="{T_THEME_PATH}/images/whosonline.png" alt="{L_WHO_IS_ONLINE}" /></td>
	<!-- ELSE -->
		<td class="row1" align="center" valign="middle"><img src="{T_THEME_PATH}/images/whosonline.png" alt="{L_WHO_IS_ONLINE}" /></td>
	<!-- ENDIF -->
		<td class="row1"><span class="genmed">{TOTAL_USERS_ONLINE} ({L_ONLINE_EXPLAIN})<br />{RECORD_USERS}<br /> <br />{LOGGED_IN_USER_LIST}</span></td>
	</tr>
	<!-- IF LEGEND -->
		<tr>
			<td class="row1"><b class="gensmall">{L_LEGEND}: {LEGEND}</b></td>
		</tr>
	<!-- ENDIF -->
	
	</table>
<!-- ENDIF -->
<hr>
<div class="copyright">{L_PHPBB} | {L_VERSION}


<!-- Ab hier nichts verändern -->			
			</div>
			</li>
		</ul>
		<span class="corners-bottom"><span></span></span>
	</div>
</div>
<br />
<!-- INCLUDE overall_footer.html -->
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Helmut »

Hallo Volli3,

hm .... wie schaut der Code vor // Beginn Daten in Datenbank eintragen bei dir aus, also wo du die Bedingungen vorgibst wann der Datensatz geschrieben wird?

Scheint mir fast als ob die Anweisung für den Button "submit" schon vorher einen Datensatz schreibt bevor das array gefüllt wurde.

Bin mir nicht sicher, aber nehme mal die Leerzeile nach $sql = 'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array( raus, könnte auch stören. Außerdem brauchst du vermutlich das $db->sql_query($sql); am Ende nicht.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Volli3
Mitglied
Beiträge: 14
Registriert: 12.02.2012 12:22

Re: Daten in Datenbank-Tabelle eintragen / anzeigen

Beitrag von Volli3 »

Hallo Helmut,
Scheint mir fast als ob die Anweisung für den Button "submit" schon vorher einen Datensatz schreibt bevor das array gefüllt wurde.
Dieser Denkanstoß hat mich auf die Lösung gebracht. Hab jetzt mal ausgiebig rumprobiert.
Die Leerzeile nach:
$sql = 'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array(
ist nicht die Ursache.
$db->sql_query($sql);
Muss drin stehen, sonst überhaupt kein Eintrag

Habe den Code in der adress_eintrag.php jetzt so erweitert:
Und jetzt geht das :grin:

Code: Alles auswählen

// Beginn Daten in Datenbank eintragen  
	 $submit	= (isset($_POST['submit'])) ? true : false;
		if ($submit)
		{
	               
    $sql = 'INSERT INTO ' . ADRESSEN_TABLE . ' ' . $db->sql_build_array('INSERT', array(

           'name' =>     request_var('name','', true),
           'strasse' =>  request_var('strasse','', true),
           'plz' =>      request_var('plz',''),
           'ort' =>      request_var('ort','', true),
           'land' =>     request_var('land','', true),
           'telefon' =>  request_var('telefon',''),
           'email' =>    request_var('email','', true),
           'homepage' => request_var('homepage','', true),
				   'Notiz' =>    request_var('Notiz',''))                       
				  );
            $db->sql_query($sql); 
     		}
   // Ende Daten in Datenbank eintragen 
Nur wenn ich jetzt den SUBMIT-Button drücke, erfolgt ein Eintrag und keine zusätzliche Leerzeile.
Ich muss mir nur noch was austüfteln ein paar Plichtfelder einzubauen, damit kein leerer Eintrag gespeichert wird wenn nicht wenigstens ein Feld ausgefüllt wird.
Dann ist das perfekt.
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“