Antwortseite eines Formulares in Tabelle XY ausgeben?
Sascha
- php
Hallo!
Ich habe da folgendes Problem! Beschäftige mich seit kurzem mit der Sprache PHP, und mache langsam immer mehr damit ...
Nun habe ich bei meinem neuesten Webprojekt komplett auf ein Frameset/Frames verzichtet und eine Webseite aufgebaut, welche aus einen Tabellengerüst besteht. Nun habe ich aber unter anderem auch verschiedene Formulare, die eingebunden werden müssen, z.B. ein Suchformular, das Daten in einer MySQL-Datenbank sucht. Nun soweit alles kein Problem, doch erhalte ich derzeit immer die Antwortseite, welche nach dem absenden des Formulares erscheint, immer in einem eigenen Browserfenster, statt in einer meiner Tabellen da.
Mein Wunsch ist es aber, das z.B. die Antwort auf das absenden des Formulares z.B. in der Tabelle ausgegeben wird, in welcher z.B. folgende Definition (Befehl) steht:
<?php include ("/homepages//htdocs/cb/".$HTTP_GET_VARS["m_id"]); ?>
Wer kann mir verraten, wie ich das anstellen muß, das ich die Antworten auf ein Formularabsenden in einer gewünschten Tabelle ausgeben kann? Ich bin natürlich jetzt nicht umbedingt auf die obrige Definition angewiesen! Bin auch für andere Lösungsvorschläge offen, soweit ich nach wie vor eine framelose Webseite hinterher habe!
Bei Frameseiten arbeitet man ja mit target="..." doch wie ist das bei PHP-Seiten, wo man ohne Frames arbeitet? Gibts da nen vergleichbaren Befehl oder so?
Ich würde mich sehr über eine Hilfe freuen.
Im voraus besten Dank.
Mfg.
Sascha
Hallo Sascha,
ich weiss nicht, ob ich dich richtig verstanden hab, aber hier ist ein Lösungsversuch:
wenn du auf mysql zugreifst, solltest du immer einen Wert (z.B. Zeiger auf einen Datensatz) zurückbekommen. Du könntest schauen, ob dieser Wert schon gesetzt, d.h. nicht leer ist, und darauf reagieren. Zum Beispiel so:
<?
if (strcmp($variable,"")!=0)
{
echo "
<table>
<tr><td>
...dein Code
</td></tr></table>
";
}
?>
oder
<?
if (strcmp($variable,"")!=0)
{
?>
<table>
<tr><td>
...Code
</td></tr>
</table>
<?
}
else
{
...Code
}
?>
Hallo Sascha,
Wenn ich dich richtig verstanden habe, hast du _eine_ PHP-Seite die alles macht.
Wenn diese Seite index.php heisst, sehen die Links (z.B.) so aus:
<a href="index.php?m_id=text_eins.htm">zum Inhalt eins</a>
<a href="index.php?m_id=text_zwei.htm">zum Inhalt zwei</a>
Die PHP-Seite (die index.php mit der Tabelle) muss jetzt auch die Formularauswertung machen.
Das Formular, das ebenfalls aus index.php kommt (es kann also in index.php oder in einer der includeten Dateien stehen!) sieht so aus:
<form action="index.php" method="post">
<input type=hidden name="m_id" value="suchen.php">
<input type=text name="query">
... Rest vom Formular...
Jetzt brauchst du nur noch eine Datei 'suchen.php' die auf $query die
gewünschte Antwort liefert: Beispielsweise:
<?php
echo "Die Eingabe: <b>$query</b> enthält ".strlen($query)." Zeichen";
?>
SICHERHEITSHINWEIS:
Die hier gewählte Methode $m_id direkt als Dateinamen zu benutzen ist für öffentliche Webserver untauglich. Damit kann man sich nämlich auch Dateien ausserhalb von htdocs/ anzeigen lassen!
(http://deine.domain.de/index.php?index.php?m_id=../../../etc/passwd )
Entweder filterst du alle .. aus, oder du machst ein Array mit allen Dateinamen und übergibst nur einen symbolischen Namen darauf:
$seitenurls=array ("ueber" => "about.html",
"neu" => "news.html",
"suchen" => "suchen.php" );
Ein Link sieht dann so aus: <a href="index.php?m_id=neu">....
und das include:
<?php include ("/homepages//htdocs/cb/".$seitenurls[$m_id]); ?>
Anmerkung:
Variablen die per URL (gleichwertig <form ... method=GET> ) oder per <form ....method=POST> übergeben werden stehen in PHP automatisch zur Verfügung. Die Schreibweise mit $HTTP_GET_VARS[..] ist nur nötig, wenn man eine Methode erzwingen möchte.
Gruss,
Carsten
Hallo Carsten,
erstmal vielen Dank für die sehr gute und ausführliche Antwort!
Aus deiner Antwort kann man einiges lernen finde ich.
Nun also du hast mich schon fast ganz richtig verstanden. Nur meine index.php macht nicht alles, sondern habe das schon so wie du es schon gesagt:
Wenn diese Seite index.php heisst, sehen die Links (z.B.) so aus:
<a href="index.php?m_id=text_eins.htm">zum Inhalt eins</a>
<a href="index.php?m_id=text_zwei.htm">zum Inhalt zwei</a>
wobei meine index.php praktisch so aussieht, das mit Hilfe von Tabellen als Frameersatz sozusagen diese nachgebildet werden, so ist z.B. links eine Tabelle, wo ein Menue includet wird, dann rechts daneben wird in einer anderen Tabelle der entsprechende Inhalt dazu geliefert! Die Links sehen genau so aus, wie du meintest. Wobei halt da logischerweise halt dann statt index.php z.B. guestbook.php oder download.php oder oder steht ...
So nun zu meinem Formular, dieses entsteht wiederum nicht aus der Hauptwebseite index.php, sondern sozusagen aus einer zweiten index.php Datei, wobei die einen anderen Namen hat, nennen wir sie einfach mal test-index.php, diese wurde per Klick im Menue in meine Tabelle m_id geladen, so nun kann man in dieser Tabelle einige Actionen ausführen, die immer wieder in dieser Tabelle auch erscheinen, soweit habe ich das auch schon mal hinbekommen. Bis halt auf das Formular da! Habe mal das ausprobiert, was du geschrieben hast, was allerdings leider noch nicht funktioniert hat! Der Fehler liegt wohl anscheinend in meiner Suchformularseite. Wenn ich mal in den nächsten Tagen etwas mehr Zeit habe, werde ich diese Seite wohl am besten von Grund auf neu programmieren.
Hatte es mit:
<form action="search.php3" method="post">
<input type="hidden" name="m_id" value="search.php3">
ausprobiert, weil die Formularseite heißt search.php3 und da die Antwort auch von der search.php3 kommt, bin ich davon ausgegangen, das es so heißen müste. Aber anscheinend steckt wohl irgendwo ein größerer Fehler im kompletten Search-Script!
Nun gut, soviel dazu.
Ich hätte da noch einmal eine Nachfrage zu folgendem:
Entweder filterst du alle .. aus, oder du machst ein Array mit allen Dateinamen und übergibst nur einen symbolischen Namen darauf:
$seitenurls=array ("ueber" => "about.html",
"neu" => "news.html",
"suchen" => "suchen.php" );
Ein Link sieht dann so aus: <a href="index.php?m_id=neu">....
und das include:
<?php include ("/homepages//htdocs/cb/".$seitenurls[$m_id]); ?>
Ich wollte das nun mal ausprobieren an einem anderen Projekt, da ich die Idee sehr gut fande und schon vor einiger Zeit schon an soetwas gedacht habe. Nur irgendwie funktioniert das bei mir nicht!
Und zwar habe ich folgendes ins Script geschrieben:
$seitenurls=array ( "download" => "download.php4",
"neuzugang" => "neueingang.php4",
"anmelden" => "prog_add.php4",
"forum" => "forum.html",
"partner" => "partnersite.php4",
"feedback" => "feedback.php4",
"kontakt" => "kontakt.php4",
"impressum" => "impressum.php4"
);
dann in meiner Tabelle steht folgendes:
<? include ("/homepages/htdocs/beta-version/".$seitenurls["a_id"]); ?>
Und in meinem Menue stehen dann Links, die dieses Format:
index.php?a_id=partner
Nur ich bekomme ständig folgende Fehlermeldung in meiner Tabelle a_id:
Fatal error: input in flex scanner failed in /homepages/beta-version on line 1
Kannst du mir vielleicht sagen, was ich da falsch mache?
Ich würde mich über eine Antwort sehr freuen.
Im voraus besten Dank.
Mfg.
Sascha
Hallo Sascha,
Wenn ich dich richtig verstanden habe, hast du _eine_ PHP-Seite die alles macht.
Wenn diese Seite index.php heisst, sehen die Links (z.B.) so aus:
<a href="index.php?m_id=text_eins.htm">zum Inhalt eins</a>
<a href="index.php?m_id=text_zwei.htm">zum Inhalt zwei</a>
Die PHP-Seite (die index.php mit der Tabelle) muss jetzt auch die Formularauswertung machen.
Das Formular, das ebenfalls aus index.php kommt (es kann also in index.php oder in einer der includeten Dateien stehen!) sieht so aus:
<form action="index.php" method="post">
<input type=hidden name="m_id" value="suchen.php">
<input type=text name="query">
... Rest vom Formular...
Jetzt brauchst du nur noch eine Datei 'suchen.php' die auf $query die
gewünschte Antwort liefert: Beispielsweise:
<?php
echo "Die Eingabe: <b>$query</b> enthält ".strlen($query)." Zeichen";
?>
SICHERHEITSHINWEIS:
Die hier gewählte Methode $m_id direkt als Dateinamen zu benutzen ist für öffentliche Webserver untauglich. Damit kann man sich nämlich auch Dateien ausserhalb von htdocs/ anzeigen lassen!
(http://deine.domain.de/index.php?index.php?m_id=../../../etc/passwd )
Entweder filterst du alle .. aus, oder du machst ein Array mit allen Dateinamen und übergibst nur einen symbolischen Namen darauf:
$seitenurls=array ("ueber" => "about.html",
"neu" => "news.html",
"suchen" => "suchen.php" );
Ein Link sieht dann so aus: <a href="index.php?m_id=neu">....
und das include:
<?php include ("/homepages//htdocs/cb/".$seitenurls[$m_id]); ?>
Anmerkung:
Variablen die per URL (gleichwertig <form ... method=GET> ) oder per <form ....method=POST> übergeben werden stehen in PHP automatisch zur Verfügung. Die Schreibweise mit $HTTP_GET_VARS[..] ist nur nötig, wenn man eine Methode erzwingen möchte.
Gruss,
Carsten