• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

datenausgabe aus datenbank einschränken

Sacul

Neues Mitglied
Hi hab mehrere Adressen die ich auf mehrere Seiten verteilt habe- also auf jeder Seite 20 und dann ergeben sich da bis jetzt 3 Seiten raus - glaube ich hab jetzt nicht nochmals geguckt. Ich möchte die Ergebnisse jedoch durch Formular -pulldowns einschränken - wie geht dass - wenn es möglich ist würde ich auch gern eine schlagwort suche in das abfrageformular mit einbinden. so dass mann z.b. einen namen - meinetwegen hans eingibt und dann alle hans aus der datenbank angezeigt bekommt - brauche echt hilf danke schonmal im vorraus - hier mein bisheriger code:

PHP:
<?php

// Datenbankverbindung
//---------------------------------------------------
$host = "localhost";     // Adresse des Datenbankservers, meist localhost
$user = "root";             // Ihr MySQL Benutzername
$pass = "";             // Ihr MySQL Passwort
$dbase = "villa";             // Name der Datenbank

$connection = mysql_connect("$host" , "$user" , "$pass")
              OR die ("Keine Verbindung zu der Datenbank moeglich.");
$db = mysql_select_db($dbase , $connection)
              OR die ("Auswahl der Datenbank nicht moeglich.");
//---------------------------------------------------

$pfad = $_SERVER['PHP_SELF'];    // aktuellen Dateipfad ermitteln, wichtig fuer die Links der Seitennavigation

$query = mysql_query("SELECT id FROM firmen"); // DB Abfragee

// ------------------------------------------------------------------------

$datensaetze_pro_seite = "10";      // Anzahl der Datensaetze die Pro Seite angezeigt werden sollen
$p = "3";                                // Anzahl der Links die in der Seitenavigation ausgegeben werden

$total = mysql_num_rows($query);                      // liefert die Anzahl der Datensaetze der Abfrage
$seiten = ceil($total / $datensaetze_pro_seite);     // Berechnet die Seitenanzahl insgesamt

// ------------------------------------------------------------------------

if(empty($_GET['go'])){ // korrigieren der aktuellen Seite

    $go = 1;             // Sofern $go nicht uebergeben wurde

}elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten){

    $go = 1;         // Variable definieren

}else{ // Wenn Obiges nicht zutraf

    $go = mysql_real_escape_string($_GET['go']);     // Variable definieren
}

$links = array(); // Linkkette bilden

// Seite die vor der aktuellen Seite kommt definieren
if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }

// Seite die nach der aktuellen Seite kommt definieren
if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }

$off = ($go - $davor); // Variable definieren

if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen
    $first = 1;
       $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";
}

if($go != 1){ // Link definieren => eine Seite zurueck blaettern
    $prev = $go-1;
    $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";
}


for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

  if ($i != $go){  // Link definieren

        $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";

  }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich

        $links[] = "<span class=\"current\">[ $i ]</span>\n";

  }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich

        $links[] = "<span class=\"current\">[ $i ]</span>\n";

  } // close if $i
}

if($go != $seiten){ // Link definieren => eine Seite weiter blaettern
    $next = $go+1;
    $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
}

if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen
    $last = $seiten;
    $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
}

$start = ($go-1) * $datensaetze_pro_seite;             // Berechne den Startwert fuer die DB


$link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String

 if (isset($_POST['art']) != 'alle_kategorien' && isset($_POST['ort']) != 'alle_orte'){
$abfrage = mysql_query("SELECT * FROM firmen   LIMIT $start,$datensaetze_pro_seite ");
 }
 elseif ($_POST['art'] != 'alle_kategorien' && $_POST['ort'] == 'alle_orte'){
     $abfrage = mysql_query("SELECT * FROM firmen WHERE art LIKE $art  LIMIT $start,$datensaetze_pro_seite ");
 }
  elseif ($_POST['art'] == 'alle_kategorien' && $_POST['ort'] != 'alle_orte'){
     $abfrage = mysql_query("SELECT * FROM firmen WHERE ort LIKE $ort  LIMIT $start,$datensaetze_pro_seite ");
 }
 else{
     $abfrage = mysql_query("SELECT * FROM firmen WHERE ort LIKE $ort AND art LIKE  $art  LIMIT $start,$datensaetze_pro_seite ");
 }

// Daten ausgeben
while($row = mysql_fetch_object($abfrage)){
?>
<style type="text/css">

.entry {
    width: 570px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
    float: left;
}

.entry_inhalt {
    width: 500px;
    float: left;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;
}
.entry_mehr {
    width: 50px;
    float: right;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;

}

.info {
    width: 530px;
    margin-left: 40px;
    float: left;
}
.weiter {
    width: 580px;
    margin-bottom: 10px;
    margin-top: 10px;
    float: left;
}

</style>



       <div class="entry"> <div class="entry_inhalt">
        <p><?php echo sanitize($row->firmenname); ?> </p>
       <p><?php echo sanitize($row->plz) . ' - ' . sanitize($row->ort); ?></p>
        <p><?php echo sanitize($row->strasse) . ' ' . sanitize($row->hausnummer); ?></p>
        <p><?php echo sanitize($row->telefon); ?></p>
        </div>
           

        <div class="entry_mehr">
        <?php if ($row->id != $_GET['more']): ?>

      
        <p><a href="?more=<?php echo sanitize($row->id); ?>&amp;go=<?php echo $_GET['go']; ?>">Mehr...</a></p>
        
        <?php endif; ?>
    
    </div>
    </div>

    <?php if ($row->id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($row->i); ?></p>
    </div>
    <?php endif;




} // close while


 echo '<div class="weiter">';

 echo "<div id=\"navigation\">\n";

 echo "<span class=\"pages\">Seite $go von $seiten</span>\n";

 echo $link_string; 

 echo "</div> \n";
 echo "</div>";



?>

wie ihr seht hab ich schon variablen wie ort und art in den select teil Für die Datenbank einggefügt und hab versucht so eine lösung zu bekommen hat aber leider nicht ganz funktioniert
hoffe ihr könnt mir helfen!

gruß Sacul
 
Werbung:
Abgesehen davon, dass du dich offenbar auf "register globals" verlässt (etwa die Variable $ort) und deine Queries anfällig für SQL Injections sind, sieht die Idee doch ganz gut aus.

Es wäre gut und der Übersicht zuträglich, wenn du versuchst, den Code in klar voneinander abgegrenzte Schritte/Funktionen aufzuteilen.

Ziel ist es immer, den Ablauf zu strukturieren (Konfiguration/Initialisierung, Werte ermitteln, mit Werten arbeiten, Ausgabedaten ermitteln, Ausgabe) und die Komplexität zu reduzieren und so etwa möglichst wenige Variablen in einem Namensraum (etwa Körper einer Funktion) zu haben. Sonst ist ruckzuck der Überblick weg.

Hier mal ein Ansatz, wie das aussehen könnte (das funktioniert so aber nicht!):

PHP:
<?php

function getLinkString($go, $seiten, $p, $pfad)
{
    $links = array();

    // Seite die vor der aktuellen Seite kommt definieren
    if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }

    // Seite die nach der aktuellen Seite kommt definieren
    if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }

    $off = ($go - $davor); // Variable definieren

    if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen
        $first = 1;
           $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";
    }

    if($go != 1){ // Link definieren => eine Seite zurueck blaettern
        $prev = $go-1;
        $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";
    }


    for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

      if ($i != $go){  // Link definieren

            $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";

      }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich

            $links[] = "<span class=\"current\">[ $i ]</span>\n";

      }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich

            $links[] = "<span class=\"current\">[ $i ]</span>\n";

      } // close if $i
    }

    if($go != $seiten){ // Link definieren => eine Seite weiter blaettern
        $next = $go+1;
        $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
    }

    if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen
        $last = $seiten;
        $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
    }

    $link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String
    
    return $link_string;
}

function createWherePart()
{
    $where = '';
     
    if ($_POST['art'] != 'alle_kategorien' && $_POST['ort'] == 'alle_orte') {
        $where = 'WHERE art LIKE' . $art;
    } elseif ($_POST['art'] == 'alle_kategorien' && $_POST['ort'] != 'alle_orte') {
        $where = 'WHERE ort LIKE' . $ort;
    } else {
        $where = "WHERE ort LIKE $ort AND art LIKE  $art";
    }

    return $where;
}

function getQueryCount($wherePart = '')
{
    $res   = mysql_query("SELECT COUNT(*) FROM firmen " . $wherePart);
    $row   = mysql_fetch_array($res);
    $total = $row[0];
    return $total;
}

function getQueryData($wherePart, $start, $datensaetze_pro_seite)
{    
    $abfrage = mysql_query("SELECT * FROM firmen WHERE ".$wherePart." LIMIT $start,$datensaetze_pro_seite ");    
    return $abfrage;
}

/* Konfiguration */

$host                  = "localhost";
$user                  = "root";
$pass                  = "";
$dbase                 = "villa";
$datensaetze_pro_seite = 10;
$p                     = 3;
$pfad                  = $_SERVER['PHP_SELF'];

/* DB-Verbindung aufbauen */

$connection = mysql_connect("$host" , "$user" , "$pass")
              OR die ("Keine Verbindung zu der Datenbank moeglich.");
$db = mysql_select_db($dbase , $connection)
              OR die ("Auswahl der Datenbank nicht moeglich.");

$wherePart = createWherePart();
$seiten    = ceil(getQueryCount($wherePart) / $datensaetze_pro_seite);

/* Aktive Seite bestimmen */

if (empty($_GET['go'])) {
    $go = 1;
} elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten) {
    $go = 1;
} else {
    $go = (int) $_GET['go'];
}

/* Auszugebende Daten ermitteln */

$link_string = getLinkString($go, $seiten, $p, $pfad);
$abfrage     = getQueryData($wherePart,
                            ($go-1) * $datensaetze_pro_seite,
                            $datensaetze_pro_seite);

/* Ausgabe */

while($row = mysql_fetch_object($abfrage)){
?>
<style type="text/css">

.entry {
    width: 570px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
    float: left;
}

.entry_inhalt {
    width: 500px;
    float: left;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;
}
.entry_mehr {
    width: 50px;
    float: right;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;

}

.info {
    width: 530px;
    margin-left: 40px;
    float: left;
}
.weiter {
    width: 580px;
    margin-bottom: 10px;
    margin-top: 10px;
    float: left;
}

</style>



       <div class="entry"> <div class="entry_inhalt">
        <p><?php echo sanitize($row->firmenname); ?> </p>
       <p><?php echo sanitize($row->plz) . ' - ' . sanitize($row->ort); ?></p>
        <p><?php echo sanitize($row->strasse) . ' ' . sanitize($row->hausnummer); ?></p>
        <p><?php echo sanitize($row->telefon); ?></p>
        </div>


        <div class="entry_mehr">
        <?php if ($row->id != $_GET['more']): ?>


        <p><a href="?more=<?php echo sanitize($row->id); ?>&amp;go=<?php echo $_GET['go']; ?>">Mehr...</a></p>

        <?php endif; ?>

    </div>
    </div>

    <?php if ($row->id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($row->i); ?></p>
    </div>
    <?php endif;




} // close while


echo '<div class="weiter">';

echo "<div id=\"navigation\">\n";

echo "<span class=\"pages\">Seite $go von $seiten</span>\n";

echo $link_string;

echo "</div> \n";
echo "</div>";
 
Abgesehen davon, dass du dich offenbar auf "register globals" verlässt (etwa die Variable $ort) und deine Queries anfällig für SQL Injections sind, sieht die Idee doch ganz gut aus.

das versteh ich nicht ganz - mach noch nicht lange mit php solche sachen - hoffe mir kann das jemand mal erklären, wie müsste denn obiges aussehen damit es funktionier?

und wie kann ich sicher eine einschränkung vornehmen - bzw. eine suche programmieren? - so dass der benutzer wähle kann wass er sehen möchte?
 
Werbung:
Register Globals ist eine PHP-Einstellung, die Felder aus den GET/POST/COOKIE-Variablen gleichzeitig auch als globale Variablen definiert. Das heißt, du kannst auf denselben Wert über $_POST['ort'] und über $ort zugreifen.

Das kann missbraucht werden und sollte deshalb vermieden werden. (Übrigens auch ein Grund, warum Variablen vor dem Auslesen immer mit einem Anfangswert initialisiert werden sollten.) In kommenden Versionen von PHP wird Register Globals völlig wegfallen. Der korrekte Weg, auf den Inhalt etwa von POST-Variablen zuzugreifen, ist über den entsprechenden Feldnamen in $_POST ($_POST['ort']).

(Ich sehe gerade, phpforum.de hat dazu auch eine Standardantwort: Standardantwort zu register_globals - Forum: phpforum.de)

Zum Thema SQL Injections: Standardantwort zu SQL Injections - Forum: phpforum.de

und wie kann ich sicher eine einschränkung vornehmen - bzw. eine suche programmieren? - so dass der benutzer wähle kann wass er sehen möchte?

Indem du dir einen entsprechenden WHERE-Part für die SQL-Query erzeugst und diesen sowohl an die Funktion, die die Ergebnisse zählt, als auch an die Funktion, die die Ergebnisse "von/bis" ausliest, anhängst.

(Im Prinzip müsste das innerhalb einer Transaktion geschehen, da sich der Inhalt der Tabelle theoretisch zwischen den beiden SELECT-Anweisungen ändern könnte. Aber das wollte ich erstmal außen vor lassen.)

Anders gesagt: So, wie ich es in meinem letzten Post umrissen habe. Wenn du das ein wenig aufräumst, solltest du die halbe Miete haben.

(Der Code ist aber völlig ungetestet. Ich weiß etwa nicht absolut sicher, ob das mit dem COUNT-Befehl von der genauen Syntax her so geht. Der Ansatz passt jedenfalls.)
 
hi hab noch mal nach den variablen geguckt und die so wie ichs nach deinen Erläuterungen verstanden habe geändert - und nun deine version übernommen - ich bekomme sie nur nicht zu laufen was fehlt was ist falsch und wie kann ich die abfrage sicher machen aber auch so , dass sie gut funktioniert? hier also nochmal der code: (in zeile 72 und 126 ist schonmal was falsch ich hoffe die zeilen stimmen ;) - naja das da was kracht sagt zumindest mein browser wo es genau hängt - kp!)

PHP:
<?php

function getLinkString($go, $seiten, $p, $pfad)
{
    $links = array();

    // Seite die vor der aktuellen Seite kommt definieren
    if(($go - $p) < 1){ $davor = $go - 1;  }else { $davor = $p; }

    // Seite die nach der aktuellen Seite kommt definieren
    if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; }

    $off = ($go - $davor); // Variable definieren

    if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen
        $first = 1;
           $links[] = "<a href=\"$pfad?go=$first\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";
    }

    if($go != 1){ // Link definieren => eine Seite zurueck blaettern
        $prev = $go-1;
        $links[] = "<a href=\"$pfad?go=$prev\" title=\"Eine Seite zurueck blaettern\"> &laquo;</a>\n";
    }


    for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen

      if ($i != $go){  // Link definieren

            $links[] = "<a href=\"$pfad?go=$i\">$i</a>\n";

      }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich

            $links[] = "<span class=\"current\">[ $i ]</span>\n";

      }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich

            $links[] = "<span class=\"current\">[ $i ]</span>\n";

      } // close if $i
    }

    if($go != $seiten){ // Link definieren => eine Seite weiter blaettern
        $next = $go+1;
        $links[] = "<a href=\"$pfad?go=$next\" title=\"Eine Seite weiter blaettern\"> &raquo; </a>\n";
    }

    if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen
        $last = $seiten;
        $links[] = "<a href=\"$pfad?go=$last\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\n";
    }

    $link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String

    return $link_string;
}

function createWherePart()
{
    $where = '';

    if ($_POST['art'] != 'alle_kategorien' && $_POST['ort'] == 'alle_orte') {
        $where = 'WHERE art LIKE' . $_POST['art'];
    } elseif ($_POST['art'] == 'alle_kategorien' && $_POST['ort'] != 'alle_orte') {
        $where = 'WHERE ort LIKE' . $_POST['ort'];
    } else {
        $where = 'WHERE ort LIKE'.$_POST['ort'].'AND art LIKE'.$_POST['art'];
    }

    return $where;
}

function getQueryCount($wherePart = '')
{
    $res   = mysql_query("SELECT COUNT(*) FROM firmen ".$wherePart);
    $row   = mysql_fetch_array($res);
    $total = $row[0];
    return $total;
}

function getQueryData($wherePart, $start, $datensaetze_pro_seite)
{
    $abfrage = mysql_query("SELECT * FROM firmen WHERE ".$wherePart." LIMIT $start,$datensaetze_pro_seite ");
    return $abfrage;
}

/* Konfiguration */

$host                  = "localhost";
$user                  = "root";
$pass                  = "";
$dbase                 = "villa";
$datensaetze_pro_seite = 10;
$p                     = 3;
$pfad                  = $_SERVER['PHP_SELF'];

/* DB-Verbindung aufbauen */

$connection = mysql_connect("$host" , "$user" , "$pass")
              OR die ("Keine Verbindung zu der Datenbank moeglich.");
$db = mysql_select_db($dbase , $connection)
              OR die ("Auswahl der Datenbank nicht moeglich.");

$wherePart = createWherePart();
$seiten    = ceil(getQueryCount($wherePart) / $datensaetze_pro_seite);

/* Aktive Seite bestimmen */

if (empty($_GET['go'])) {
    $go = 1;
} elseif($_GET['go'] <= 0 || $_GET['go'] > $seiten) {
    $go = 1;
} else {
    $go = (int) $_GET['go'];
}

/* Auszugebende Daten ermitteln */

$link_string = getLinkString($go, $seiten, $p, $pfad);
$abfrage     = getQueryData($wherePart,
                            ($go-1) * $datensaetze_pro_seite,
                            $datensaetze_pro_seite);

/* Ausgabe */

while($row = mysql_fetch_object($abfrage)){
?>
<style type="text/css">

.entry {
    width: 570px;
    padding: 4px;
    border: 1px solid #ccc;
    margin-bottom: 10px;
    float: left;
}

.entry_inhalt {
    width: 500px;
    float: left;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;
}
.entry_mehr {
    width: 50px;
    float: right;
    padding: 4px;
    border: 0px;
    margin-bottom: 0px;

}

.info {
    width: 530px;
    margin-left: 40px;
    float: left;
}
.weiter {
    width: 580px;
    margin-bottom: 10px;
    margin-top: 10px;
    float: left;
}

</style>



       <div class="entry"> <div class="entry_inhalt">
        <p><?php echo sanitize($row->firmenname); ?> </p>
       <p><?php echo sanitize($row->plz) . ' - ' . sanitize($row->ort); ?></p>
        <p><?php echo sanitize($row->strasse) . ' ' . sanitize($row->hausnummer); ?></p>
        <p><?php echo sanitize($row->telefon); ?></p>
        </div>


        <div class="entry_mehr">
        <?php if ($row->id != $_GET['more']): ?>


        <p><a href="?more=<?php echo sanitize($row->id); ?>&amp;go=<?php echo $_GET['go']; ?>">Mehr...</a></p>

        <?php endif; ?>

    </div>
    </div>

    <?php if ($row->id == $_GET['more']): ?>
    <div class="entry info">
        <p><?php echo sanitize($row->i); ?></p>
    </div>
    <?php endif;




} // close while


echo '<div class="weiter">';

echo "<div id=\"navigation\">\n";

echo "<span class=\"pages\">Seite $go von $seiten</span>\n";

echo $link_string;

echo "</div> \n";
echo "</div>";

brauche echt hilfe - bin auch nicht so der profie also wär cool wenn ihr mir die fehler zeigen und erklären könntet danke schonmal!
 
Also, die createWherePart()-Funktion muss vollständig vermutlich so aussehen (Post bitte vollständig lesen ;)):

PHP:
function createWherePart()
{
    $where = '';

    $parts = array();

    if ($_POST['art'] != 'alle_kategorien') {
        $parts[] = "`art` LIKE '" . mysql_real_escape_string($_POST['art']) . "'";
    }

    if ($_POST['ort'] != 'alle_orte') {
        $parts[] = "`ort` LIKE '" . mysql_real_escape_string($_POST['ort']) . "'";
    }

    if (!empty($parts)) {
        $where = 'WHERE ' . implode(' AND ', $parts);
    }

    return $where;
}

Die Fehler hier hättest du finden können, indem du dir die vollständige Query vor Ausführung per echo ausgeben lassen hättest.

Ich weiß nicht, ob ich das schon geschrieben habe, aber du musst den Code debuggen bzw. von vorne bis hinten durchgehen. Das heißt, per echo 'irgendwas'; überprüfen, ob bestimmte Stellen im Code erreicht werden, wenn sie erreicht werden müssten, per echo $variable; die Werte von Variablen ausgeben und gucken, ob sie passen usw.

Weil das ziemlich viel Arbeit ist, ist es um so wichtiger, dass du deinen Code gut und sinnvoll strukturierst und dass du versuchst, in sich geschlossene Abschnitte zu schaffen, die nur von wenigen Variablen abhängen (die Funktionen). Das wollte ich in erster Linie mit meinem Umschreiben vermitteln.

Was das Testen von Code angeht, kann man sich übrigens zügeln und loslassen. ;)

PHP:
<?php

//require_once './inc.funcs.php';

// {{{ Getestete Funktion der Einfachheit halber hierher kopiert:

function createWherePart()
{
    $where = '';

    $parts = array();

    if ($_POST['art'] != 'alle_kategorien') {
        $parts[] = "`art` LIKE '" . mysql_real_escape_string($_POST['art']) . "'";
    }

    if ($_POST['ort'] != 'alle_orte') {
        $parts[] = "`ort` LIKE '" . mysql_real_escape_string($_POST['ort']) . "'";
    }

    if (!empty($parts)) {
        $where = 'WHERE ' . implode(' AND ', $parts);
    }

    return $where;
}

// }}}

function test1()
{
    $_POST['art'] = 'alle_kategorien';
    $_POST['ort'] = 'alle_orte';

    if (createWherePart() !== '') {
        echo 'part 1 failed';
    }

    $_POST['art'] = 'test';
    $_POST['ort'] = 'alle_orte';

    if (createWherePart() !== "WHERE `art` LIKE 'test'") {
        echo 'part 2 failed';
    }

    $_POST['art'] = 'alle_kategorien';
    $_POST['ort'] = 'test';

    if (createWherePart() !== "WHERE `ort` LIKE 'test'") {
        echo 'part 3 failed';
    }

    $_POST['art'] = 'test';
    $_POST['ort'] = 'test';

    if (createWherePart() !== "WHERE `art` LIKE 'test' AND `ort` LIKE 'test'") {
        echo 'part 4 failed';
    }
}


ob_start();
test1();
$s = ob_get_clean();

if ($s === '') {
    echo 'Test erfolgreich!';
} else {
    echo $s;
}

test1 stellt ziemlich sicher, dass createWherePart funktioniert. Aber ich glaube, sowas in diesem Fall flächendeckend zu implementieren, würde zu weit führen. Ich wollte nur mal zeigen, was man machen *könnte*.

PS: Du hast die Ursprungsversion deines Codes nicht komplett selbst geschrieben, oder? Das ist nicht vorwurfsvoll gemeint, es hilft einfach, eine passende Antwort zu finden.



Edit: Hier ein "part 5" für Test 1, der zeigt, wo noch was auszubessern ist:

PHP:
    $_POST = array();

    if (createWherePart() !== '') {
        echo 'part 5 failed';
    }



Edit 2: Verbesserte Version von createWherePart:

PHP:
function createWherePart()
{
    $where = '';

    $parts = array();

    $_POST['art'] = (isset($_POST['art'])) ? $_POST['art'] : '';
    $_POST['ort'] = (isset($_POST['ort'])) ? $_POST['ort'] : '';

    if ($_POST['art'] !== '' && $_POST['art'] !== 'alle_kategorien') {
        $parts[] = "`art` LIKE '" . mysql_real_escape_string($_POST['art']) . "'";
    }

    if ($_POST['ort'] !== '' && $_POST['ort'] !== 'alle_orte') {
        $parts[] = "`ort` LIKE '" . mysql_real_escape_string($_POST['ort']) . "'";
    }

    if (!empty($parts)) {
        $where = 'WHERE ' . implode(' AND ', $parts);
    }

    return $where;
}

Test-driven development: It works! ;)
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben