Modul Datenbank durchsuchen...

Begonnen von Kauter, 29 Mai 2007, 22:10:38

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Kauter

Hi, ich bin grad dabei mir ein phpnuke etwas anzupassen bzw zu verändern. Ich würd gern die datenbanktabelle durchsuchen lassen und mit den Ergebnissen anzeigen lassen. Also genauso eine suche wie bei den downloads oder llink. ich habe aber garkeine ahnung wie ich anfangen soll. kann mir jemand ein paar tips geben! ;)
Christian Kauter
www.hogaSCOUT.de - Das Gastronomieportal
we SCOUT your BUSINESS


CMS-Version: pragmaMx 1.12.3.1.33.4.14 (2012-06-21)
PHP-Version: 5.2.17
MySQL-Version: 5.0.96-log
Server-Version: Apache/2.2.24 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r

IE 10 / Firefox / Opera

JoergK

Wirf doch mal nen Blick in das MySQL-Tutorial, da werden einem die Grundlagen erklärt.

Zu PHP-Befehlen / -Funktionen, um eine MySQL-Datenbank abzufragen, solltest Du einen Blick ins SelfPHP werfen: Funktionsreferenzen -> MySQL-Funktionen.

Wenn Du, wie Du beschreibst, an einem Modul für pragmaMx arbeitest, solltest Du statt der PHP-Funktionen zur DB-Abfrage die API-Funktionen von pragmaMx verwenden. Welche es gibt, sieht Du, wenn Du Dir die /includes/sql_layer.php ansiehst.
Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

Kauter

#2
Danke, hätte jetzt nicht gedacht das es doch so einfach und schnell geht, also ich fass kurz zusammen:

Das Suchfeld:
<form action="modules.php" method="get">
        <label><?php echo _SEARCH ?>:</label>&nbsp;<input type="text" size="25" name="query" maxlength="60" value="<?php echo $query ?>">
        <input type="image" src="modules/<?php echo $module_name ?>/icons/search.gif" alt="<?php echo _SEARCH ?>" title="<?php echo _SEARCH ?>" style="width: 16px; height: 16px; border: none; vertical-align: middle;">
        <input type="hidden" name="name" value="<?php echo $module_name ?>">
        <input type="hidden" name="op" value="search">
        <input type="hidden" name="min" value="0">
        </form>


Die search.php

<?php
function search()
{
    global 
$module_name,$prefix,$query
        
include(
"header.php");        
OpenTable();
$result mysql_query("select * from ${prefix}_fragen_admin where fragenTitle like '%$query%'");
$menge mysql_num_rows($result);
echo 
'<b>' $menge ' Datensätze gefunden</b><br><br>';

while(
$row mysql_fetch_row($result)){
  echo 
'<a href="modules.php?name='.$module_name.'&op=Fragen&qid='.$row[0].'">'.$row[1].'</a><br><br>';  
}
      
CloseTable();
include(
"footer.php");
}
?>


Gibt es da noch was zu beachten oder ist das gut so? Dankenochmal @JoergK
Christian Kauter
www.hogaSCOUT.de - Das Gastronomieportal
we SCOUT your BUSINESS


CMS-Version: pragmaMx 1.12.3.1.33.4.14 (2012-06-21)
PHP-Version: 5.2.17
MySQL-Version: 5.0.96-log
Server-Version: Apache/2.2.24 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r

IE 10 / Firefox / Opera

JoergK

Wichtig wäre auf jeden Fall, dass Du zu Beginn Deines Moduls der Variablen $module_name einen definierten Wert zuweist:
Zitat$module_name = basename(dirname(__FILE__));

Ansonsten tut sich ne mögliche Sicherheitslücke auf.

In meiner ersten Antwort hab ich bereits auf die API von pragmaMx bezüglich der Funktionen zu DB-Abfragen hingewiesen. Desweiteren sollte man niemals Usereingaben ungefiltert an die DB übergeben, weder als Eintrag noch als Vergleichswert. Zur Filterung der Usereingaben bedienen wir uns also mal am Search-Modul und  bauen die dortige Filterfunktion hier ein. Dein Code sollte also unter Nutzung der API so aussehen:
Zitat
function convertquerystring($query)
{
    $query = stripslashes(strip_tags($query));
    $query = ereg_replace("[[:space:]]{1,}", "%", $query);
    $query = ereg_replace("[[:punct:]]{1,}", "%", $query);
    $query = trim(str_replace("%%", "%", $query));
    return $query;
}

if (isset($query)) {
    $query = convertquerystring($query);
    if (empty($query)) {
        $query = '%';
    }
} else {
    $query = '';
}


function search()
{
    global $module_name,$prefix,$query;
   
    include("header.php");   
    OpenTable();
    $result = sql_query("select * from ${prefix}_fragen_admin where fragenTitle like '%$query%'");
    $menge = sql_num_rows($result);
    echo '<b>' . $menge . ' Datensätze gefunden</b><br><br>';

    while($row = sql_fetch_row($result)){
        echo '<a href="modules.php?name='.$module_name.'&op=Fragen&qid='.$row[0].'">'.$row[1].'</a><br><br>';   
    }
     
CloseTable();
include("footer.php");
}

Gruß,
Jörg


Nobody is perfect ... so don't call me Nobody

Kauter

Christian Kauter
www.hogaSCOUT.de - Das Gastronomieportal
we SCOUT your BUSINESS


CMS-Version: pragmaMx 1.12.3.1.33.4.14 (2012-06-21)
PHP-Version: 5.2.17
MySQL-Version: 5.0.96-log
Server-Version: Apache/2.2.24 (Unix) mod_ssl/2.2.21 OpenSSL/0.9.8r

IE 10 / Firefox / Opera