Suchfunktion für Datenbanktabelle

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.
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

@Miriam

Danke, läuft jetzt super ! :grin:
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

// Yay for wildcards... :lol:
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

Nachdem das nun alles so wunderbar geht, würde ich das gern noch etwas erweitern.
Zur Zeit findet er jeden Begriff der in der Datenbankspalte "name" eingetragen ist.
Wie muß ich jetzt die search.html und search_2.php ändern damit die Daten aller Spalten anzeigt werden ?
Ich gehe davon aus das die search.php schon OK ist oder fehlt da noch was ?

search.php

Code: Alles auswählen

$submit = (isset($_POST['submit'])) ? true : false;
{ 
    $submit = (isset($_POST['post'])) ? true : false;

    $id = request_var ('id', 0); 
		$land = request_var ('land', '', true);     
    $name = request_var ('name', '', true);
    $plz = request_var('plz', '', true);
    $ort = request_var('ort', '', true);
                   
		$sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
            WHERE id = ' . (int)$id . "
                  OR land LIKE '%" . $db->sql_escape($land) . "%'                 
									OR name LIKE '%" . $db->sql_escape($name) . "%' 									
                  OR plz LIKE '%" . $db->sql_escape($plz) . "%' 
                  OR ort LIKE '" . $db->sql_escape($ort) . "'"; 
                  
                  $result = $db->sql_query($sql);
							 										 									  
    $template->assign_vars(array(     
    'U_FORM_ACTION' => append_sid($phpbb_root_path . 'adress_search_2.' . $phpEx, 'mode=search&id=' . $row['id']),      
   ));
 }   
search.html

Code: Alles auswählen

<form method="post" action="{U_FORM_ACTION}">
<table width="300" border="0">
  <tr>
    <td>Suchbegriff eingeben</td>
    <td><input type="text"   name="name"   /></td>
  </tr>
 <tr>
    <td>&nbsp;</td>
    <td><input type="submit" name="submit" value="Suchen"></td>
  </tr>
</table>
</form>
search_2.php

Code: Alles auswählen

$name = request_var ('name', '', true);
                  
    $sql = 'SELECT * FROM ' . TOURZIEL_TABLE ."
        WHERE name LIKE '%" . $db->sql_escape($name) . "%'
        ORDER BY name ";    
				       
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('liste', array(
             
            'POST_ID'       => $row['id'],
            'POST_LAND'     => $row['land'],
            'POST_NAME'     => $row['name'],
            'POST_STRASSE'  => $row['strasse'], 
						'POST_PLZ'      => $row['plz'], 
						'POST_ORT'      => $row['ort'],                                   						                   
        ));
    }
    $db->sql_freeresult($result);
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Warum schmeißt Du nicht die search.php und die search_2.php zusammen?
Du Übergibst dann mittels des Formulars in der search.html

Code: Alles auswählen

<form method="post" action="{U_FORM_ACTION}">
    <h1>Suche:</h1>
    <fieldset>
        <legend>Personen bezogen</legend>
        <table>
            <tr>
                <td width="100px">Name: </td><td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td width="100px">Vorname: </td><td><input type="text" name="vorname" /></td>
            </tr>
        </table>
    </fieldset>
    <fieldset>
        <legend>Ort bezogen</legend>
        <table>
            <tr>
                <td width="100px">Land: </td><td><input type="text" name="land" /></td>
            </tr>
            <tr>
                <td width="100px">Ort: </td><td><input type="text" name="ort" /></td>
            </tr>
            <tr>
                <td width="100px">Postleitzahl: </td><td><input type="text" name="plz" /></td>
            </tr>
            <tr>
                <td width="100px">Straße: </td><td><input type="text" name="strasse" /></td>
            </tr>
        </table>
    </fieldset>
    <fieldset>
        <legend>Absenden</legend>
        <table>
            <tr>
                <td width="100px">&nbsp;</td><td><input type="submit" name="submit" value="Suchen"></td>
            </tr>
        </table>
    </fieldset>
</form>
die relevanten Suchparameter and die search.php.

Wenn $_POST['submit']gesetzt ist, dann zeigt der Aufruf der search.php die Suchergebnisse an, ansonsten das Such-Formlar.
So in der Art:

Code: Alles auswählen

<?php
//search.php
$submit = (isset($_POST['submit'])) ? true : false;
if ($submit) // zeige Ergebnisse
{
    $id = request_var ('id', 0);
    $land = request_var ('land', '', true);     
    $name = request_var ('name', '', true);
    $strasse =    request_var('strasse', '', true);
    $plz = request_var('plz', 0); // PLZ sollte doch integer sein... oder?
    $ort = request_var('ort', '', true);

    $sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
            WHERE id = ' . (int)$id . "
                OR land LIKE '%" . $db->sql_escape($land) . "%'
                OR name LIKE '%" . $db->sql_escape($name) . "%'
                OR plz = $plz
                OR ort LIKE '" . $db->sql_escape($ort) . "'";
    $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('liste', array(
             
            'POST_ID'        => $row['id'],
            'POST_LAND'        => $row['land'],
            'POST_NAME'        => $row['name'],
            'POST_STRASSE'    => $row['strasse'],
            'POST_PLZ'        => $row['plz'],
            'POST_ORT'        => $row['ort'],                                                                        
        ));
    }
    $db->sql_freeresult($result);
    
    $template->assign_vars(array(     
        'U_FORM_ACTION' => append_sid($phpbb_root_path . 'search.' . $phpEx),     
    ));
}
else // zeige Suchformular
{
    page_header($user->lang['SEARCH']);

    $template->set_filenames(array(
        'body' => 'search.html')
    );

page_footer();
}
?>
Ist natürlich noch nicht fertig. Da mußt Du noch ein bißchen dran feilen.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

@Miriam
Dank für deine Mühe.
In dieser Schreibweise liegt eigentlich mein Problem.
Das war auch der Grund warum ich das in 2 Dateien zerlegt hatte. Wenn ich das so als eine Datei zusammenfasse bekomme ich nach dem Absenden der Suche zwar keine Fehlermeldung aber immer nur eine weiße Seite angezeigt.

Ich denke der Fehler liegt hier:

else // zeige Suchformular
{
page_header($user->lang['SEARCH']);

$template->set_filenames(array(
'body' => 'search.html')
);

Ich bekomme da die richthe Schreibweise im Template nicht hin.
Es dürfte an der Übergabe von dieser Zeile liegen: page_header($user->lang['SEARCH']);
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

Wo genau paßt es denn nicht? Hast Du mal geschaut, wie die phpBB3 search.php aufgebaut ist?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Walter91
Mitglied
Beiträge: 108
Registriert: 16.02.2012 08:28

Re: Suchfunktion für Datenbanktabelle

Beitrag von Walter91 »

@Miriam
Die phpBB-search.php hab ich mir auch schon ausgiebig angesehen. Allerdings sind da meine Kentnisse zu bescheiden um restlos durch zu sehen.

So hab ich das jetzt komplett: (Ergebnis ist nach Eingabe einer Suche aber eine weiße Seite)

search.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('tourziel'); 

// Suche
$submit = (isset($_POST['submit'])) ? true : false;
if ($submit) 
{    
    $id = request_var ('id', 0); 
		$land = request_var ('land', '', true);     
    $name = request_var ('name', '', true);
    $strasse = request_var('strasse', '', true);
    $plz = request_var('plz', 0);
    $ort = request_var('ort', '', true);
                   
		$sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '       
            WHERE id = ' . (int)$id . "
                  OR land LIKE '%" . $db->sql_escape($land) . "%'                 
									OR name LIKE '%" . $db->sql_escape($name) . "%' 
									OR strasse LIKE '%" . $db->sql_escape($strasse) . "%' 
									OR plz = $plz
                  OR ort LIKE '" . $db->sql_escape($ort) . "'"; 
                  
                   $result = $db->sql_query($sql);
    while ($row = $db->sql_fetchrow($result))
    {
        $template->assign_block_vars('liste', array(
             
            'POST_ID'       => $row['id'],
            'POST_LAND'     => $row['land'],
            'POST_NAME'     => $row['name'],
            'POST_STRASSE'  => $row['strasse'],
            'POST_PLZ'      => $row['plz'],
            'POST_ORT'      => $row['ort'], 
					  'POST_EMAIL'    => $row['email'],  
						'POST_HOME'     => $row['home'],                                                                      
        ));
    }
    $db->sql_freeresult($result);
    
     $template->assign_vars(array(     
        'U_FORM_ACTION' => append_sid($phpbb_root_path . 'search.' . $phpEx),     
    ));
}
else 
{
    page_header($user->lang['SEARCH']);
    
    $template->set_filenames(array(
        'body' => 'search.html')
    );

page_footer();
}

?>
search.html

Code: Alles auswählen

<h2>{L_SUCHEN}</h2> <br>

    <form method="post" action="{U_FORM_ACTION}">
            
            <table>
                <tr>
                    <td width="100px">Land: </td><td><input type="text" name="land" /></td>
                </tr>
                
                <tr>
                    <td width="100px">Tourziel: </td><td><input type="text" name="name" /></td>
                </tr>
                
                <tr>
                    <td width="100px">Strasse: </td><td><input type="text" name="strasse" /></td>
                </tr>
                   
                <tr>
                    <td width="100px">PLZ: </td><td><input type="text" name="plz" /></td>
                </tr>
                
                <tr>
                    <td width="100px">Ort: </td><td><input type="text" name="ort" /></td>
                </tr>
                           
                <tr>
                    <td width="100px">&nbsp;</td><td><input type="submit" name="submit" value="Suchen"></td>
                </tr>                
                			
			<!-- BEGIN liste --> 				 				
			<b><font color="crimson">{liste.POST_NAME}</font></b><br />									
			{liste.POST_LAND}&nbsp;
			{liste.POST_PLZ}&nbsp;
			{liste.POST_ORT}&nbsp;&nbsp;
			{liste.POST_STRASSE}&nbsp;&nbsp; 			
			{liste.POST_TELEFON}&nbsp;&nbsp; 			
			<a href="mailto:{liste.POST_EMAIL}"><font color="blue">{liste.POST_EMAIL}</font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<a href="http://{liste.POST_HOME}" target="visu"><font color="blue">{liste.POST_HOME}</font></a><br />			
						
			<div class="back2top"><a href="#wrap" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>		
			<hr/>									
			<!-- END liste -->			
</table>			 
</form>
Es scheitert also daran die search.php mit dem Ergebnis aufzurufen.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Suchfunktion für Datenbanktabelle

Beitrag von Miriam »

search.php
  • Code: Alles auswählen

    <?php
    define('IN_PHPBB', true);
    $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
    $phpEx = substr(strrchr(__FILE__, '.'), 1);
    include($phpbb_root_path . 'common.' . $phpEx);
    
    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup('search');
    
    // Suche
    $submit = (isset($_POST['submit'])) ? true : false;
    if ($submit)
    {
        $id = request_var ('id', 0);
        $land = (request_var ('land', '', true)) ? " OR land LIKE '%" . $db->sql_escape(request_var ('land', '', true)) . "%'" : '';
        $name = (request_var ('name', '', true)) ? " OR name LIKE '%" . $db->sql_escape(request_var ('name', '', true)) . "%'" : '';
        $strasse = (request_var('strasse', '', true)) ? " OR strasse LIKE '%" . $db->sql_escape(request_var('strasse', '', true)) . "%'" : '';
        $plz = (request_var('plz', 0)) ? " OR plz = " . request_var('plz', 0) : '';
        $ort = (request_var('ort', '', true)) ? " OR ort LIKE '%" . $db->sql_escape(request_var('ort', '', true)) . "%'": '';
    
        $sql = 'SELECT * FROM ' . TOURZIEL_TABLE . '
                WHERE id = ' . (int)$id 
                    . $land
                    . $name
                    . $strasse
                    . $plz
                    . $ort;
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result))
        {
            $template->assign_block_vars('liste', array(
                'POST_ID'        => $row['id'],
                'POST_LAND'        => $row['land'],
                'POST_NAME'        => $row['name'],
                'POST_STRASSE'    => $row['strasse'],
                'POST_PLZ'        => $row['plz'],
                'POST_ORT'        => $row['ort'],
                'POST_EMAIL'    => $row['email'], 
                'POST_HOME'        => $row['home'],                                                                     
            ));
        }
    
        $db->sql_freeresult($result);
    
        $template->assign_vars(array(     
            'U_FORM_ACTION' => append_sid($phpbb_root_path . 'search.' . $phpEx),
        ));
    }
    
    page_header($user->lang['SEARCH']);
    $template->set_filenames(array(
        'body' => 'search_tour.html')
    );
    page_footer();
    ?>
    
    
styles/dein_style/template/search_tour.html
  • Code: Alles auswählen

    <!-- INCLUDE overall_header.html -->
    
    <h2>{L_SUCHEN}</h2> <br>
    <form method="post" action="{U_FORM_ACTION}">
        <table>
            <tr>
                <td width="100px">Land: </td><td><input type="text" name="land" /></td>
            </tr>
            <tr>
                <td width="100px">Tourziel: </td><td><input type="text" name="name" /></td>
            </tr>
            <tr>
                <td width="100px">Strasse: </td><td><input type="text" name="strasse" /></td>
            </tr>
            <tr>
                <td width="100px">PLZ: </td><td><input type="text" name="plz" /></td>
            </tr>
            <tr>
                <td width="100px">Ort: </td><td><input type="text" name="ort" /></td>
            </tr>
            <tr>
                <td width="100px">&nbsp;</td><td><input type="submit" name="submit" value="Suchen"></td>
            </tr>
            <!-- BEGIN liste -->
            <b><font color="crimson">{liste.POST_NAME}</font></b><br />                           
            {liste.POST_LAND}&nbsp;
            {liste.POST_PLZ}&nbsp;
            {liste.POST_ORT}&nbsp;&nbsp;
            {liste.POST_STRASSE}&nbsp;&nbsp;
            {liste.POST_TELEFON}&nbsp;&nbsp;
            <a href="mailto:{liste.POST_EMAIL}"><font color="blue">{liste.POST_EMAIL}</font></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <a href="http://{liste.POST_HOME}" target="visu"><font color="blue">{liste.POST_HOME}</font></a><br />
     
            <div class="back2top"><a href="#wrap" class="top" title="{L_BACK_TO_TOP}">{L_BACK_TO_TOP}</a></div>
            <hr/>
            <!-- END liste -->
        </table>
    </form>
    
    <!-- INCLUDE overall_footer.html -->
    
Ab hier mußt Du selbst schwimmen... Viel Glück.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

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