Seite 3 von 3

Re: Suchfunktion für Datenbanktabelle

Verfasst: 10.10.2012 16:47
von Walter91
@Miriam

Danke, läuft jetzt super ! :grin:

Re: Suchfunktion für Datenbanktabelle

Verfasst: 10.10.2012 16:52
von Miriam
// Yay for wildcards... :lol:

Re: Suchfunktion für Datenbanktabelle

Verfasst: 12.10.2012 10:30
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);

Re: Suchfunktion für Datenbanktabelle

Verfasst: 12.10.2012 12:47
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.

Re: Suchfunktion für Datenbanktabelle

Verfasst: 12.10.2012 22:05
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']);

Re: Suchfunktion für Datenbanktabelle

Verfasst: 13.10.2012 14:37
von Miriam
Wo genau paßt es denn nicht? Hast Du mal geschaut, wie die phpBB3 search.php aufgebaut ist?

Re: Suchfunktion für Datenbanktabelle

Verfasst: 13.10.2012 15:15
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.

Re: Suchfunktion für Datenbanktabelle

Verfasst: 13.10.2012 17:08
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.