Glossar Script

kosovafan

Erfahrenes Mitglied
Hallo,

ich bin gerade dabei mir ein Glossar Scriot zu bauen, das beim Aufruf den kompletten Inhalt anzeigt und bei Klick auf den Buchstaben, die entsprechende Einträge anzeigen soll.

Das erste funktioniert, das zweite will irgendwie nicht klappen.

PHP:
<?php
error_reporting(E_ALL); // Nur zum Debuggen, bei Einsatz auf Website entfernen.
ini_set("display_errors", 1); // Nur zum Debuggen, bei Einsatz auf Website entfernen.
require ("inc/db/db.html"); // Datenbank Connection

/* Built the menu */
// Set ABC in Array for the menu
$abc = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");


// Give out the menu
echo "<ul class=\"lexikon_menu\">\n";
foreach($abc as $menu)
{
    echo "<li><a href=\"tabs.html?list=".$menu."\">".strtoupper($menu)."</a></li>\n";
}
echo "</ul>\n";
/* Menu is build */


/* The Script load Character Data when $_GET is active, when not the script will load the Index. */
$list = (isset($_GET['list'])) ? $_GET['list'] : '';

if(!empty($list) && $list != '') {

    // Database Statement and handle the connection
    $query = $db->query("SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='".addslashes($list)."'");
    if (!$query)
    {
        die("Execute query error, because: " . $db->errorInfo());
    }
    $query->execute();

    // Give out the Database Entrys
    while($row = $query->fetch(PDO :: FETCH_ASSOC))
    {
        echo "<ul>\n";
        echo "<li>".htmlspecialchars($row['title'])."</li>\n";
        echo "<li>".htmlspecialchars($row['beschreibung'])."</li>\n";
        echo "</ul>\n";
    }
}else {

    // Build the statement for Database with PDO
    $query = $db->prepare("SELECT id, erster, title, beschreibung FROM `glossar` ORDER BY erster");
    if (!$query)
    {
        die("Execute query error, because: " . $db->errorInfo());
    }
    $query->execute();

    // Give out the Index of Table
    while ($row = $query->fetch(PDO :: FETCH_ASSOC)) {
        echo "<ul>\n";
        echo "<li>".htmlspecialchars($row['title'])."</li>\n";
        echo "<li>".htmlspecialchars($row['beschreibung'])."</li>\n";
        echo "</ul>\n";
    }
}
/* Index is loaded */

/* At end we close active connections */
$row = null;
$query = null;
$db = null;
?>

Die $_GET Variable list und der entsprechende Eintrag wird anscheinend übergeben,
die Datenbank wird abgefragt, wie sich aus der Query Log entnehmen lässt.

Code:
110609 15:02:40	  153 Connect	root@localhost on fundi
		  153 Query	SELECT id, erster, title, beschreibung FROM `glossar` ORDER BY erster
		  153 Query	SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='e'
		  153 Query	SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='e'
		  153 Quit	
110609 15:02:41	  154 Connect	root@localhost on fundi
		  154 Query	SELECT id, erster, title, beschreibung FROM `glossar` ORDER BY erster
		  154 Query	SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='p'
		  154 Query	SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='p'
		  154 Quit

Woran liegt der Fehler?


Gruß
Silvio
 
Zuletzt bearbeitet:
Hi
Was genau funktioniert denn nicht? ich kann kein Fehler erkennen beim überfliegen des Codes.
Ich weiss allerdings auch nicht was die Methoden deiner DB Klasse machen.


btw.
Die Zeilen find ich geil :
PHP:
foreach($abc as $menu) {
    if(in_array($menu, $abc)) {
:D
 
Hi

btw.
Die Zeilen find ich geil :
PHP:
foreach($abc as $menu) {
    if(in_array($menu, $abc)) {
:D

Das war das erste was mir aufgefallen ist als ich den Code angeshen hab :D

@kosovafan: dieses IF_Konstrukt kannste dir sparen, da du hier nicht prüfen musst ob der Buchstabe im Array vorkommt. Du hast das Array ja selbst definiert mit dem ganzen ABC. So hast du nur einen kleinen Flaschenhals eingbeaut.
 
Das war das erste was mir aufgefallen ist als ich den Code angeshen hab :D

@kosovafan: dieses IF_Konstrukt kannste dir sparen, da du hier nicht prüfen musst ob der Buchstabe im Array vorkommt. Du hast das Array ja selbst definiert mit dem ganzen ABC. So hast du nur einen kleinen Flaschenhals eingbeaut.

Das wäre so ungefähr die Situation:
Du bist aufm Markt, gehst zum Kartoffelhändler, kaufst ne Kartoffel und fragst ihn dann ob du die Kartoffel von ihm gekauft hast.

:D
 
Hallo,

okay, also die foreach Schleife abändern und die IF Anweisungen weg lassen. Okay werde ich ausprobieren.


Silvio
 
nene nur das If Kontrukt kann weg da es immer wahr sein wird.

Das wird allerdings nicht dein Problem lösen.
Müsstest uns schon genauer erklären was nicht funktioniert in deinem Script.
 
Hallo,

oh Entschuldigung, im Moment so viel im Kopf, weiß nicht mehr wie ich noch Ruhe bekommen soll. Hochzeitsplanungen sind in Vorbereitung.

Das Ziel ist, das beim Aufruf der Website die kompletten Einträge ausgegeben werden. Wenn man dann auf einen Buchstabe klickt, sollen eben nur die dazu gehörigen Einträge kommen. Das ist was nicht geht. Der Aufruf findet statt, zurzeit hängt er ein ?list=b zum Beispiel an, die Datenbank wird auch abgefragt, aber es wird nichts ausgegeben.

Das ist das Problem, ich verstehe nicht warum. Keine Fehlermeldung, keine Syntaxfehler und die Datenbank wird korrekt abgefragt.


MFG
Silvio
 
PHP:
    // Database Statement and handle the connection
    $query = $db->query("SELECT id, erster, title, beschreibung FROM `glossar` WHERE erster='".addslashes($list)."'");
    if (!$query) {die("Execute query error, because: " . $db->errorInfo());}
    $query->execute();

    // Give out the Database Entrys
    while($row = $query->fetch(PDO :: FETCH_ASSOC)){

Der Fehler versteckt sich wohl hier irgendwo.

Wie schaut die Klasse aus die in der Variablen $db instanziiert ist ?
 
Hallo,

die DB Klasse sieht folgend aus:

PHP:
<?php
try {
$db = new PDO("mysql:host={$host};dbname={$database}", $user, $pass);
}catch(PDOException $pe)
{ 
die('Connection error, because: ' .$pe->getMessage());
}
?>

MFG
Silvio
 
Achso du benutzt PHP Data Objects, hab ich noch nicht verwendet sollte aber alles mit in Ordnung sein :D
puuhh dann weiss ich ned, ich schau nochmal nach.
 
Zurück