<a href="-online-1"></a> <a href="-online-2"></a> <a href="-online-4"></a> <a href=""></a> <a…
von:
VPNwelt.com sucht Feedback Wie der Name schon sagt handelt es sich um eine Review Website für…
von: florian.berg.privat
Hallo zusammen!
Ich habe einmal eine Frage, und ein Problem:
Zur Frage:
Ich habe eine Datenbank mit Daten eines Bücherarchivs.
Wenn man auf dieser Seite im Suchfeld z. B. Max Schwarze angibt und auf 'Suchen' klickt, erhält man auf der nächsten Seite die im Archiv vorhandenen Bücher des Autors aufgelistet.
Die Frage ist jetzt, wie bekomme ich es hin, das Tabellenkörper und Tabellenkopf die selben Ausmaße in der Breite haben. Ist es möglich den Tabellenkopf mit php zu erstellen und zu fixieren, damit bei evtl. notwendigem scrollen die Spaltenbeschriftung sichtbar bleibt?
Das Problem, welches ich habe, ist, das der ganze Vorgang bislang mit FF funktioniert. Der IE sagt nach dem Klick auf den 'Suchen'-Button 'Seite nicht gefunden'.
Wo kann der Fehler liegen?
Die Dateien sehen wie folgt aus:
Die HTML-Datei zur Abfrage
[html]<html>
<head>
<title>Das Buch-Archiv des MTV-Treubund Lüneburg v. 1848 e.V. durchsuchen</title>
</head>
<body>
Suchbegriff eingeben:
<input name="searchterm" type="text">
<input name="submit" type="submit" value="Suchen">
<?php
$verbindung = mysql_connect("localhost", "benutzername","passwort") or die
("Keine Verbindung moeglich");
mysql_select_db("benutzername") or die
("Die Datenbank existiert nicht.");
?>
<head>
<title>Ergebnis Durchsuchen des Buch-Archivs MTV-Treubund</title>
<style type="text/css"> <br />.five{width:5%;} <br />.ten{width:10%;} <br />.fifteen{width:15%;} <br />.eight{width:8%;} <br /></style></head>
Die Suche brachte folgende Ergebnisse
Kategorie
Nummer
Verfasser
Titel
Verlag
Verlagsort
Erschienen
Seiten
<?php <br /> $abfrage = " <br /> SELECT <br /> Kategorie, Nummer, Verfasser, <br /> Titel, Verlag, Verlagsort, Jahr, Seiten <br /> FROM <br /> Tabelle1 <br /> WHERE <br /> Verfasser ='" . mysql_real_escape_string($_POST['searchterm'], $verbindung) . "' <br />"; <br /> <br />$ergebnis = mysql_query($abfrage, $verbindung) or die ("MySQL-Fehler: " . mysql_error()); <br /> <br />echo '<table width="530" border="1" class="contenttable">'; <br />while($row = mysql_fetch_object($ergebnis)) <br /> <br /> { <br /> <br /> <br /> echo "<tr>"; <br /> echo "<td class='five'>download'>" . $row->Kategorie . "</td>"; <br /> echo "<td class='five'>". $row->Nummer . "</td>"; <br /> echo "<td class='fifteen'>". $row->Verfasser . "</td>"; <br /> echo "<td class='fifteen'>". $row->Titel . "</td>"; <br /> echo "<td class='fifteen'>". $row->Verlag . "</td>"; <br /> echo "<td class='fifteen'>". $row->Verlagsort . "</td>"; <br /> echo "<td class='five'>". $row->Jahr . "</td>"; <br /> echo "<td class='five'>". $row->Seiten . "</td>"; <br /> echo "</tr>"; <br /> <br /> <br /> } <br />echo "</table>"; <br />mysql_free_result( $ergebnis ); <br />?>
Warum machst du nicht einfach alles in eine Tabelle und nicht in 2?
Wenn ich auf die Seite gehe kommen nur Fehlermeldungen.
Wenn du die Tabelle in Body und Head unterteilst sollte das mit dem Scrollen auch kein Problem sein.
Gruß Thomas
Hallo!
Danke erstmal für die Antwort.
Ich bin beim ausprobieren, desweghen kommen die Fehlermeldungen!
Hallo Marcus,
Möchtest Du dieses Skript denn in/neben der Joomla installation laufen lassen?
Nimmst Du die selbe Datenbank, in der auch Joomla gespeichert wird?
Hallo Marcus
Also erstmal würde ich für den Kopf der Tabelle th statt td verwenden.
Und dein Problem das der Kopf und der Körper eine unterschiedliche Breite haben kommt halt eben dadurch das du unterschiedliche Angaben der Breite vornimmst.
Gruß
Jörg
Hallo Roman, Hallo Joerg!
@Jörg: Danke für den Hinweis. Werde ich mal ändern. Das ist das erste \'Projekt\', was ich in Verbindung mit php programmiere.
@roman: Nein, das ist eine separate DB und auch nur auf der Domain, damit ich einen Platz habe, wo ich das ausprobieren kann.
Wenn das so läuft wie ich es mir vorstelle, geht das wie ich hoffe auf den Server des Sportvereins. Weil die die Bücher auch an Unis und Sportverbände verleihen wollen.
Gruß
Marcus
Hallo zusammen!
Ich habe das jetzt erst einmal tatsächlich fertig gebracht, die Tabelle in einem Stueck auszugeben. So hat man zumindest schon mal eine komplette Uebersicht.
Woran ich jetzt (trotz einer im Net gefundenen Vorlage) scheitere ist, nach einen Begriff - also Teil eines Autoren-Namens, eines Buchtitels oder Verlages - zu suchen.
Wenn man hier irgendeinen Begriff eingibt, haut er trotzdem die ganze Liste raus, und nicht nur das, wonach man gesucht hat.
Weiß da jemand Rat?
Danke und Gruß
Marcus
Quelltext Suchmaske:
[HTML]
<html>
<head>
<title>Das Buch-Archiv des MTV-Treubund Lüneburg v. 1848 e.V. durchsuchen</title>
</head>
<body>
Suchbegriff eingeben:
<input name="anf">
<input type="submit" value="Suchen">
<input type="reset" value="Abbrechen">
<html>
<head>
</head>
<body>
<?php
$db = mysql_connect("Ort","Datenbank","passwort");
$sqlab = "select Verfasser, Titel, Kategorie, Verlag, Verlagsort from Tabelle1";
$sqlab .= " where Verfasser like \'$anf%\' ";
$res = mysql_db_query("datenbank", "$sqlab");
$num = mysql_num_rows($res);
if ($num==0)
echo "keine passenden Datensätze gefunden";
// Tabellenbeginn
echo "";
// Überschrift
echo "lfd. Nr. ";
echo "Verfasser Titel ";
echo "Verlag Verlagsort ";
for ($i=0; $i$num; $i++)
{
$ka = mysql_result($res, $i, "Kategorie");
$au = mysql_result($res, $i, "Verfasser");
$ti = mysql_result($res, $i, "Titel");
$ve = mysql_result($res, $i, "Verlag");
$vo = mysql_result($res, $i, "Verlagsort");
$lf = $i + 1;
// Tabellenzeile mit -zellen
echo "$lf $au ";
echo "$ti $ve ";
echo "$vo ";
}
// Tabellenende
echo "
";
mysql_close($db);
?>
</body>
</html>
Hallo Markus
Das sollte wohl reichen.
Du brauchst eine Weiche die überprüft ob eine Abfrage vorgenommen worden ist.
Und wenn nicht wird halt eben eine Standardabfrage gemacht.
if (!isset($_Post[\'text\']))
{
$datenbank = \'\';
}
else
{
$datenbank = \' WHERE autor = % \'.$_Post[\'text\'].\'%\';
}
Und wenn du soviel Suchmöglichkeiten hast solltest du auch entsprechend viele Eingabefelder dann auch haben.
Und dann kommst du an den Punkt das du wiederum überprüfen musst ob bereits was in der Abfrage steht für die Mysql Datenbank. Und ab dem Punkt ist es sinnvoll sowas zu haben. function whereand ()
{
global $datenbank;
$whereand = \'\';
if (strpos($datenbank,"WHERE")===false)
{
$whereand = \' WHERE \';
}
else
{
$whereand = \' AND \';
}
return $whereand;
}
Und dann sieht das wiederum etwas komplexer danach aus.
if (isset( $_Post[\'title\']))
{
$datenbank .= \'\'.whereand().\' title = %\'.$_Post[\'titel\'].\'%\';
}
Du solltest mehr suchen und ausprobieren dann fällt dir das nächste Problem wiederum leichter zu lösen. So habe ich mir PHP auch angeeignet.
Jetzt ist der Nachteil da das du den Weg nicht richtig verstehst.
Macht jetzt 3 Euro 50.
Gruß
Jörg
Marcus schrieb:
Weiß da jemand Rat?
Hallo Jörg!
Danke für Deine Mühe, werd mir den Link mal anschauen.
Gruß
Marcus
Hallo Markus,
ein par Anmerkungen zu deinem Quellcode:
[quote="Marcus"] [/QUOTE]
<?php
$sqlab = "select Verfasser, Titel, Kategorie, Verlag, Verlagsort from Tabelle1";
$sqlab .= " where Verfasser like \'$anf%\' ";
Wo wird bei dir die Variable $anf gesetzt, holst du die explizit aus einer GET/POST Variablen?
Das Stichwort auf das ich hinausmöchte ist register_globals.
[QUOTE="Marcus"]<?php [/QUOTE]
$res = mysql_db_query("datenbank", "$sqlab");
mysql_db_query ist veraltet, du solltest stattdessen mysql_select_db und mysql_query nutzen. (siehe http://de.php.net/mysql_db_query.)
Das Umschließen von $sqlab ist unnötig, die Variable ist ja bereits vom Typ String.
[QUOTE="Marcus"]<?php [/QUOTE]
$ka = mysql_result($res, $i, "Kategorie");
$au = mysql_result($res, $i, "Verfasser");
$ti = mysql_result($res, $i, "Titel");
$ve = mysql_result($res, $i, "Verlag");
$vo = mysql_result($res, $i, "Verlagsort");
Ich empfehle dir dringen, von derartigen Abkürzungen Abstand zu nehmen.
Code wird immer nur einmal geschrieben, aber meist öfter gelesen. Die paar Sekunden, die du fürs Tippen längerer Variablen brauchst, die holst du locker wieder rein, wenn du irgendwann mal Änderungen vornehmen willst.
Das Tutorial was du angegeben hast, beruht noch auf PHP 4. Die aktuelle PHP Version ist 5.3, ich würde dir ein aktuelleres Tutorial empfehlen: http://tut.php-quake.net/de/
@Jörg:
Achtung, du hast eine schwere Sicherheitslücke in deinem Code!
Traue niemals den Eingaben der Benutzer (auch nicht in Beispielen). Alles was irgendwie von außen kommt, muss erst überprüft bzw. maskiert werden: <?php
if (!isset($_Post[\'text\'])) {
$datenbank = \'\';
} else {
$datenbank = " WHERE autor = \'%" . mysql_real_escape_string($_Post[\'text\'], $db) ."%\'";
}
Deine Funktion wäre wesentlich variabler einsetzbar, wenn du auf global verzichten würdest:
<?php
function whereAnd($actWhere)
{
if (striPos($actWhere,"WHERE") === false) {
return \' WHERE \';
}
return \' AND \';
}
Generell sind global und eval auf die man so oft wie möglich verzichten sollte.
Hallo Oskar!
Danke für deine Hinweise.
Die Variable $anf hab ich da noch aus dem Suchfeld geholt. Hab das jetzt in $_POST geändert
Den Rest inklusive Link führe ich mir noch zu gemüte.
Gruß
Marcus
Beitrag erstellen
EinloggenKostenlos registrieren