pragmaMx Support Forum

pragmaMx => Individuelle Anpassungen => Thema gestartet von: Kauter in 29 Mai 2007, 22:10:38

Titel: Modul Datenbank durchsuchen...
Beitrag von: Kauter in 29 Mai 2007, 22:10:38
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! ;)
Titel: Re: Modul Datenbank durchsuchen...
Beitrag von: JoergK in 29 Mai 2007, 22:37:15
Wirf doch mal nen Blick in das MySQL-Tutorial (http://dev.mysql.com/doc/refman/5.1/de/tutorial.html), da werden einem die Grundlagen erklärt.

Zu PHP-Befehlen / -Funktionen, um eine MySQL-Datenbank abzufragen, solltest Du einen Blick ins SelfPHP (http://www.selfphp.info/) werfen: Funktionsreferenzen -> MySQL-Funktionen (http://www.selfphp.info/funktionsreferenz/mysql_funktionen/index.php).

Wenn Du, wie Du beschreibst, an einem Modul für pragmaMx arbeitest, solltest Du statt der PHP-Funktionen zur DB-Abfrage die API (http://de.wikipedia.org/wiki/Programmierschnittstelle)-Funktionen von pragmaMx verwenden. Welche es gibt, sieht Du, wenn Du Dir die /includes/sql_layer.php ansiehst.
Titel: Re: Modul Datenbank durchsuchen...
Beitrag von: Kauter in 30 Mai 2007, 09:51:30
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
Titel: Re: Modul Datenbank durchsuchen...
Beitrag von: JoergK in 30 Mai 2007, 18:04:11
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");
}

Titel: Re: Modul Datenbank durchsuchen...
Beitrag von: Kauter in 05 Juni 2007, 10:02:20
OK, DANKE!