gelöschter Benutzer

Tabellenkopf und Tabelle bei php

am 22.09.2010, 09:52 Uhr eröffnete folgenden Thread
PHP & MySQL    10466 mal gelesen    28 Antwort(en).

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>

Was suchen Sie?


<form action="archiv.php" method="post">

Suchbegriff eingeben:




<input name="searchterm" type="text">
<input name="submit" type="submit" value="Suchen">



</form>
</body>
</html>
[/html]

Die Datei zur Ausgabe sieht so aus:

<?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

















$abfrage = "
SELECT
Kategorie, Nummer, Verfasser,
Titel, Verlag, Verlagsort, Jahr, Seiten
FROM
Tabelle1
WHERE
Verfasser ='" . mysql_real_escape_string($_POST['searchterm'], $verbindung) . "'
";

$ergebnis = mysql_query($abfrage, $verbindung) or die ("MySQL-Fehler: " . mysql_error());

echo '
KategorieNummerVerfasserTitelVerlagVerlagsortErschienenSeiten
';
while($row = mysql_fetch_object($ergebnis))

{


echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";
echo "";


}
echo "
download'>" . $row->Kategorie . "". $row->Nummer . "". $row->Verfasser . "". $row->Titel . "". $row->Verlag . "". $row->Verlagsort . "". $row->Jahr . "". $row->Seiten . "
";
mysql_free_result( $ergebnis );
?>



gelöschter Benutzer
am 22.09.2010, 11:00 Uhr schrieb

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



gelöschter Benutzer
am 22.09.2010, 11:03 Uhr schrieb

Hallo!

Danke erstmal für die Antwort.

Ich bin beim ausprobieren, desweghen kommen die Fehlermeldungen!


romacron
JDev Xer
Content Gott (1224 Beiträge)
am 22.09.2010, 11:05 Uhr schrieb romacron

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?


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 22.09.2010, 11:35 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 22.09.2010, 11:53 Uhr schrieb

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



gelöschter Benutzer
am 22.09.2010, 16:06 Uhr schrieb

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>

Hier haben Sie die Möglichkeit, das Archiv zu durchsuchen.
Geben Sie einfach einen Begriff ein, nach dem Sie suchen lassen möchten





Was suchen Sie?


<form action="suche.php" method="post">

Suchbegriff eingeben:



<input name="anf">


<input type="submit" value="Suchen">
<input type="reset" value="Abbrechen">


</form>
</body>
</html>[/HTML]

Quelltext Suchergebnis-Ausgabe

<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 " ";
echo "";
echo "";


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 "";
echo "";
echo "";
}

// Tabellenende
echo "
lfd. Nr.VerfasserTitelVerlagVerlagsort
$lf$au$ti$ve$vo

";


mysql_close($db);
?>
</body>
</html>


joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 22.09.2010, 16:39 Uhr schrieb joerg

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?



ca2.php.net


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools


gelöschter Benutzer
am 22.09.2010, 16:56 Uhr schrieb

Hallo Jörg!

Danke für Deine Mühe, werd mir den Link mal anschauen.

Gruß

Marcus


UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 22.09.2010, 17:38 Uhr schrieb UFOMelkor

Hallo Markus,

ein par Anmerkungen zu deinem Quellcode:
[quote="Marcus"]

<?php
$sqlab = "select Verfasser, Titel, Kategorie, Verlag, Verlagsort from Tabelle1";
$sqlab .= " where Verfasser like \'$anf%\' ";
[/QUOTE]
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
$res = mysql_db_query("datenbank", "$sqlab");
[/QUOTE]
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
$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");
[/QUOTE]

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.


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community


gelöschter Benutzer
am 22.09.2010, 18:25 Uhr schrieb

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




« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5276 Themen und 36110 Beiträge.
Insgesamt sind 48343 Mitglieder registriert.