php echo in html Tabelle schaffe ich nicht ...

mactrisha

mactrisha

Aktives Mitglied
Thread Starter
Dabei seit
27.11.2003
Beiträge
744
Reaktionspunkte
17
Hi all,

in meinem PHP Script (siehe Auszug aus dem Script) wird über eine show form Funktion ein Formular erstellt und Adressdaten von zwei Leuten eingegeben, diese Daten werden dann über echo wieder ausgegeben. Formlos allerdings mit nur Schrift <p>. Wie kann ich die Daten, die über echo ausgegeben werden in Tabellenzellen laden lassen, damit ich Kontrolle über das Aussehen habe? Wünschenswert sind zwei Spalten. Geht das?

PHP:
if($_SERVER['REQUEST_METHOD']!='POST') {
show_form();
} else {
if(empty($_POST['first01']) ||
empty($_POST['first02']) ||
empty($_POST['last01']) ||
empty($_POST['last02']) ||
empty($_POST['streetandnumber01']) ||
empty($_POST['streetandnumber02']) ||
empty($_POST['plzandlocation01']) ||
empty($_POST['plzandlocation02']) ||
empty($_POST['telephonenumber01']) ||
empty($_POST['telephonenumber02']) ||
empty($_POST['birthdaydate01']) ||
empty($_POST['birthdaydate02']) ||
empty($_POST['status01']) ||
empty($_POST['status02'])) {
echo "<p><b><font color=CCCCCC>!!! Da sind noch einige Zeilen leer!";
echo " Bitte f&uuml;lle diese unbedingt aus. !!!</b></font></p>\n";
show_form($_POST['first01'], $_POST['first02'], $_POST['last01'], $_POST['last02'], $_POST['streetandnumber01'], 
$_POST['streetandnumber02'], $_POST['plzandlocation01'], $_POST['plzandlocation02'], $_POST['telephonenumber01'], 
$_POST['telephonenumber02'], $_POST['birthdaydate01'], $_POST['birthdaydate02'], $_POST['status01'], $_POST['status02']);
} else {
echo "<p><b>Ausdruck f&uuml;r:</p></b> <p><b>$_POST[first01] $_POST[last01],</p></b>\n <p>$_POST[streetandnumber01],</p>\n 
<p>$_POST[plzandlocation01],</p>\n <p>Telefon $_POST[telephonenumber01],</p>\n <p>geboren am $_POST[birthdaydate01]</p>\n 
<p>und</p>
<p><b>$_POST[first02] $_POST[last02],</p></b>\n <p>$_POST[streetandnumber02],</p>\n <p>$_POST[plzandlocation02],</p>\n 
<p>Telefon $_POST[telephonenumber02],</p>\n <p>geboren am $_POST[birthdaydate02],</p>\n <p><b>Partner 1 ";
echo "ist ".
join(" bis ", $_POST['status01']);
echo ". <p></p>\n <p><b>Partner 2 ist ".
join(" bis ", $_POST['status02']);
echo ". </p></b> <p>Der Ausdruck ist nun fertig. Bitte jetzt drucken. </p>\n";
}
}
?>





Salü,
mactrisha.
 
Naja, Du ersetzt einfach die <p> Tags durch entsprechende Tabellen Tags (<tr> bzw.
<td>). Damit erreichst Du eine Ausgabe in einer Tabelle.

... ich hoffe, ich habe Dich jetzt nicht völlig falsch verstanden. :rolleyes:
 
Nein, du hast mich schon richtig verstanden.

Hi Delmar,

ich habe die <p> Tags immer durch komplette <table> Tags ersetzt und dabei ist es immer zu expected ";' Fehlern gekommen, kann es daran gelegen haben, vermutlich weil doppelte Anführungszeichen in der Tabelle drin sind ??? (<table width="738" border="0" cellspacing="0" cellpadding='0" height="50"> ...), reicht es, wenn es <td> und <tr> tags sind? Das probier ich gleich mal. Danke vorerst, ich melde mich wieder. Ich habe es bisher schon geschafft, die Tabelle komplett nach Wunsch darzustellen, aber ich habe es bisher nie geschafft, jedes echo in eine eigene Tabellenzelle einlesen zu lassen. I´ll try it harder ...

Salü,
mactrisha.
 
Re: Nein, du hast mich schon richtig verstanden.

Original geschrieben von mactrisha
... kann es daran gelegen haben, vermutlich weil doppelte Anführungszeichen in der Tabelle drin sind ??? (<table width="738" border="0" cellspacing="0" cellpadding='0" height="50"> ...
&nbsp;

Jupp, das ist wohl so. Ein String beginnt und endet in PHP - aber auch
vielen anderen Sprachen - mit Anführungszeichen. Wenn Du innerhalb
eines String diese benutzt, "denkt" der PHP Parser, dass der String zu
Ende und sucht als nächstes nach dem Semikolon als Abschluss des
Befehls. Aber Pustekuchen, denn es geht ja munter weiter mit dem
String.

Was also tun? Du musst dem PHP Parser deutlich machen, dass es
sich bei den Anführungszeichen nicht um das Ende des Strings,
sondern um gewünschte Zeichen innerhalb des Strings handelt. Diese
bezeichnet man als Sonderzeichen. Dies machst Du, in dem Du vor
jedes Anführungszeichen einen Backslash setzt.

PHP:
echo "<table border\"1\"> ...";


Gleiches gilt auch bei anderen Sonderzeichen, die in PHP sonst eine
eigene Bedeutung haben, wie z.B. das $-Zeichen für Variablen. Dies
müsste ebenfalls als Sonderzeichen kenntlich gemacht werden.
 
Irgendwie peile ich das nicht ...

Hi Delmar,

also irgendwie peile ich das nicht. Solange zwischen den <p> Tags:

PHP:
echo "<p><b>$_POST[first01]</p></b>\n";

steht, wird auch der im Formular:

PHP:
<input type="text" name="first01" value="<?echo $first01?>">

eingegebene Text zurückgegeben, wenn ich jetzt in die mit Backslashes versehene Tabelle das $_POST['first01'] und alle anderen $_POST eingebe ...:

PHP:
echo "<table width=\"738\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" height=\"240\">
				<tr height=\"50\">
					<td width=\"148\" height=\"50\"></td>
					<td width=\"147\" height=\"50\">Partner 1:</td>
					<td width=\"148\" height=\"50\"></td>
					<td width=\"147\" height=\"50\">Partner 2:</td>
					<td width=\"148\" height=\"50\"></td>
				</tr>
				<tr>
					<td width=\"148\"></td>
					<td valign=\"top\" width=\"147\">$_POST['first01'],
						<p>$_POST['last01'],</p>
						<p>$_POST['streetandnumber01'],</p>
						<p>$_POST['plzandlocation01'],</p>
						<p>$_POST['telephonenumber01'],</p>
						<p>$_POST['birthdaydate01']</p>
					</td>
					<td width=\"148\"></td>
					<td valign=\"top\" width=\"147\">$_POST['first02'],
						<p>$_POST['last02'],</p>
						<p>$_POST['streetandnumber02'],</p>
						<p>$_POST['plzandlocation02'],</p>
						<p>$_POST['telephonenumber02'],</p>
						<p>$_POST['birthdaydate02']</p>
					</td>
					<td width=\"148\"></td>
				</tr>
			</table>";

... dann bekomme ich diese Meldung:

Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in /Library/WebServer/Documents/seite/seite/datei.php on line 224

Und Line 224 ist genau diese:

PHP:
<td valign=\"top\" width=\"147\">$_POST['first01'],

Was mache ich denn da falsch? Entschuldige bitte.

Salü,
mactrisha.
 
:D

PHP kommt mit den einfachen Anführungszeichen, die Du innerhalb der
Variablen verwendest durcheinander. Entweder, due lässt sie weg
und schreibst stattdessen

PHP:
$_POST[first01]

, oder Du bindest sie mit dem Verkettungsoperator "." in den String
ein, dann kannst Du die Anführungszeichen drin lassen. Das würde
dann so aussehen:

PHP:
echo "<td valign=\"top\" width=\"147\">" . $_POST['first01'] . "</td>";
 
Hunderttausendmillionengigatrilliardenmal Danke.

Hi Delmar,

jetzt habe ich es, Danke:

PHP:
echo "<table width=\"738\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" height=\"240\">
				<tr height=\"50\">
					<td width=\"148\" height=\"50\"></td>
					<td width=\"147\" height=\"50\">Partner 1:</td>
					<td width=\"148\" height=\"50\"></td>
					<td width=\"147\" height=\"50\">Partner 2:</td>
					<td width=\"148\" height=\"50\"></td>
				</tr>
				<tr>
					<td width=\"148\"></td>
					<td valign=\"top\" width=\"147\"><p>$_POST[first01]</p>
						<p>$_POST[last01]</p>
						<p>$_POST[streetandnumber01]</p>
						<p>$_POST[plzandlocation01]</p>
						<p>$_POST[telephonenumber01]</p>
						<p>$_POST[birthdaydate01]</p>
					</td>
					<td width=\"148\"></td>
					<td valign=\"top\" width=\"147\"><p>$_POST[first02]</p>
						<p>$_POST[last02]</p>
						<p>$_POST[streetandnumber02]</p>
						<p>$_POST[plzandlocation02]</p>
						<p>$_POST[telephonenumber02]</p>
						<p>$_POST[birthdaydate02]</p>
					</td>
					<td width=\"148\"></td>
				</tr>
			</table>";

Salü,
mactrisha.
 
Dafür nicht! ;)
 
Vielleicht dafür?

Hi Delmar,

jetzt dachte ich, dass ich es kann, aber jetzt muss noch ein

PHP:
join(" bis ", $_POST['fitstatus02']);

in eine Tabelle, doch hier kann man die doppelten und einfachen Anführungszeichen nicht weglassen oder?

Salü,
mactrisha.
 
Die einfachen Anführungszeichen in der Variable kannst Du weglassen. Die doppelten um
das bis nicht! Hierbei handelt es sich nämlich um einen String (Zeichenkette).
Diese müssen von doppelten Anführungszeichen eingeschlossen sein. Alternativ
könntest Du aber auch schreiben:

PHP:
$glue = " bis ";
join($glue, $_POST['fitstatus02'])

Hier gibt es viele Möglichkeiten - welche man im Endeffekt benutzt ist wie so oft Ge-
schmackssache. ;)

Du kannst z.B. das $glue = " bis "; auch wie folgt schreiben $glue = ' bis '; - aber nicht
$glue = bis;! Weiterhin kann man $_POST[fitstatus02] oder $_POST["fitstatus02"] oder
$_POST['fitstatus02'] benutzen. Alles ziemlich verwirrend, aber mit der Zeit hat man
heraus, was bzgl. Anführungszeichen geht und was nicht - dann entwickelt man auch
nach und nach seinen eigenen Stil!
 
Juhu ...

hi Delmar,

kann es sein, dass das einfügen des join ohne das $glue funzt? Tut es nähmlich jetzt bei mir. Danke!

PHP:
echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
			<tr align=\"left\" valign=\"top\" height=\"50\">
				<td align=\"left\" valign=\"top\" height=\"50\">
					<div align=\"left\">
						Duo-Partner 1:</div>
				</td>
				<td align=\"left\" valign=\"top\" height=\"50\">
					<div align=\"left\">
						Duo-Partner 2:</div>
				</td>
			</tr>
			<tr align=\"left\" valign=\"top\">
				<td align=\"left\" valign=\"top\">
					<div align=\"left\"><p>$_POST[first01]</p>
						<p>$_POST[last01]</p>
						<p>$_POST[streetandnumber01]</p>
						<p>$_POST[plzandlocation01]</p>
						<p>$_POST[telephonenumber01]</p>
						<p>$_POST[birthdaydate01]</p>
						<p>$_POST[first01] ist ". join(" bis ", $_POST[fitstatus01]); echo ".</p>
					</div>
				</td>
				<td align=\"left\" valign=\"top\">
					<div align=\"left\"><p>$_POST[first02]</p>
						<p>$_POST[last02]</p>
						<p>$_POST[streetandnumber02]</p>
						<p>$_POST[plzandlocation02]</p>
						<p>$_POST[telephonenumber02]</p>
						<p>$_POST[birthdaydate02]</p>
						<p>$_POST[first02] ist ". join(" bis ", $_POST[fitstatus02]); echo ".</p>
					</div>
				</td>
			</tr>
		</table>";

Salü,
mactrisha.
 
Hach, hab ich mich wieder zu kompliziert ausgedrückt. *selberohrfeig*

Das Beispiel mit $glue war eine alternative Schreibweise zu dem, wie Du es benutzt. Es
funktionieren beide Versionen ohne Probleme. Sorry für den Verwirrer! :)

Generell kann man nämlich die Strings in Funktionen durch eigene Variablen ersetzen,
die zuvor definiert und mit dem entsprechenden String "befüllt" werden. Wie z.B. ein
MySQL Statement.

PHP:
mysql_query("SELECT * FROM tabelle");

ist genauso richtig, wie

PHP:
$sql = "SELECT * FROM tabelle";
mysql_query($sql);

Ich hoffe, so ist es verständlicher! ;)
 
Hi Delmar,

ja Danke, das habe ich schon verstanden, aber ausprobiert habe ich eben nur die erste Variante ohne die neue Variable, weil ich das mit der neuen Variable nicht auf Anhieb konnte und ich noch nicht so viel Zeit hatte, mich durchzubeißen. Du bist schon ein fabelhafter Erklärer, nur ich bin halt ein Beginner.

Salü,
mactrisha.
 
Zurück
Oben Unten