Tabellenkopf und Tabelle bei php

Verfasst am: 22. 09. 2010 [09:52]
Gelöschter Benutzer
Beitrag hilfreich?

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>
  <h1>Was suchen Sie?</h1>
  <form action="archiv.php" method="post">
      <p><strong>Suchbegriff eingeben:</strong></p>
      <p>
        <input name="searchterm" type="text">
        <input name="submit" type="submit" value="Suchen">
 
        </p>
  </form>
</body>
</html>


Die Datei zur Ausgabe sieht so aus:

PHP
<?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">
.five{width:5%;}
.ten{width:10%;}
.fifteen{width:15%;}
.eight{width:8%;}
</style></head>
<h1>Die Suche brachte folgende Ergebnisse</h1>
<table width="530" border="3">
<tr>
 
<td width="10">Kategorie</td>
<td width="20">Nummer</td>
<td width="30">Verfasser</td>
<td width="30">Titel</td>
<td width="30">Verlag</td>
<td width="10">Verlagsort</td>
<td width="10">Erschienen</td>
<td width="10">Seiten</td>
</tr>
 
 
 
<?php
   $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 '<table width="530" border="1">';
while($row = mysql_fetch_object($ergebnis))
 
 {
 
 
 echo "<tr>";
 echo "<td class='five'><a href='$row->download'>" . $row->Kategorie . "</a></td>";
 echo "<td class='five'>". $row->Nummer . "</td>";
 echo "<td class='fifteen'>". $row->Verfasser . "</td>";
 echo "<td class='fifteen'>". $row->Titel . "</td>";
 echo "<td class='fifteen'>". $row->Verlag . "</td>";
 echo "<td class='fifteen'>". $row->Verlagsort . "</td>";
 echo "<td class='five'>". $row->Jahr . "</td>";
 echo "<td class='five'>". $row->Seiten . "</td>";
 echo "</tr>";
 
 
   }
echo "</table>";
mysql_free_result( $ergebnis );
?>


[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 22.09.2010 um 09:54.]
 
Verfasst am: 22. 09. 2010 [11:00]
Ultima
Dabei seit: 09.07.2010

759 Beiträge
Beitrag hilfreich?

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

 
Verfasst am: 22. 09. 2010 [11:03]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo!

Danke erstmal für die Antwort.

Ich bin beim ausprobieren, desweghen kommen die Fehlermeldungen!
 
Verfasst am: 22. 09. 2010 [11:05]
romacron
Dabei seit: 01.11.2009

1143 Beiträge
Beitrag hilfreich?

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?
 
Verfasst am: 22. 09. 2010 [11:35]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

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

 
Verfasst am: 22. 09. 2010 [11:53]
Gelöschter Benutzer
Beitrag hilfreich?

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
 
Verfasst am: 22. 09. 2010 [16:06]
Gelöschter Benutzer
Beitrag hilfreich?

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>
<center><h2>Hier haben Sie die Möglichkeit, das Archiv zu durchsuchen. Geben Sie einfach einen Begriff ein, nach dem Sie suchen lassen möchten</h2></center>
 
<h3>Was suchen Sie?</h3>
  <form action="suche.php" method="post">
      <p><strong>Suchbegriff eingeben:</strong></p>
      <p>
        <input name="anf"><p>
		<input type="submit" value="Suchen">
		<input type="reset" value="Abbrechen">
 
        </p>
  </form>
</body>
</html>


Quelltext Suchergebnis-Ausgabe
PHP
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</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 "<table border>";
 
   // Überschrift
   echo "<tr> <td>lfd. Nr.</td> ";
   echo "<td>Verfasser</td> <td>Titel</td>";
   echo "<td>Verlag</td> <td>Verlagsort</td></tr>";
 
 
   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 "<tr> <td>$lf</td> <td>$au</td>";
      echo "<td>$ti</td> <td>$ve</td>";
      echo "<td>$vo</td>  </tr>";
   }
 
   // Tabellenende
   echo "</table>";
 
 
   mysql_close($db);
?>
</body>
</html>


[Dieser Beitrag wurde 3mal bearbeitet, zuletzt am 22.09.2010 um 16:36.]
 
Verfasst am: 22. 09. 2010 [16:39]
joerg
Dabei seit: 09.06.2009

1540 Beiträge
Beitrag hilfreich?

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.

PHP
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.

PHP
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.

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


http://ca2.php.net/

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 22.09.2010 um 16:51.]

 
Verfasst am: 22. 09. 2010 [16:56]
Gelöschter Benutzer
Beitrag hilfreich?

Hallo Jörg!

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

Gruß

Marcus
 
Verfasst am: 22. 09. 2010 [17:38]
UFOMelkor
Dabei seit: 20.10.2009

348 Beiträge
Beitrag hilfreich?

Hallo Markus,

ein par Anmerkungen zu deinem Quellcode:
Marcus schrieb:

PHP
<?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.
Marcus schrieb:
PHP
<?php
   $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.

Marcus schrieb:
PHP
<?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");


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

 




Du bist nicht eingeloggt. Bitte beachte, dass Du eingeloggt sein musst, um Themen zu erstellen oder auf Beiträge zu antworten.

RSS Feed abonnieren

Werde in Echtzeit über neue Foren-Beiträge informiert:



2 Mitglieder waren innerhalb der letzten 15 Minuten online (11 heute gesamt):
onkelschorsch, phpmix

Administratoren und Moderatoren:
[keine]

Seitenreport hat 18136 registrierte Mitglieder, 3002 Themen und 29106 Beiträge.
Der aktuelle Mitgliederzuwachs liegt bei durchschnittlich 12 bestätigten Neuregistrierungen pro Tag.
Pro Tag werden im Seitenreport Forum durchschnittlich 1 neues Thema und 8 Beiträge erstellt.
Die Durchschnittszahlen berechnen sich aus den letzten 7 Tagen.

Mehrfach empfohlen

Seitenreport ist einer der bekanntesten SEO und Website Analyse Dienste im deutschsprachigen Raum und wurde u.a. schon empfohlen:
von Mr. Wong im Wong Letter
vom Leserservice der Deutschen Post
vom Technik Blog SiN
und vielen anderen

Partnerprogramm

12% Lifetime Provision auf alle Buchungen von Dir geworbener Mitglieder sowie 0,50 € für jede Registrierung. Eines der besten deutschen Partnerprogramme laut den appCharts von 100partnerprogramme.de. Nimm jetzt teil am Seitenreport Partnerprogramm und verdiene gutes Geld dabei!

* = Partnerlinks