• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

$_POST[xxx] funzt net!?

T!P-TOP

Mitglied
Irgendwie klappt die übertragung der Daten bei einem Generator nicht.

Ab der ersten if Bedingung müsste der Code richtig sein. Er bringt auch keine Fehlermeldung sondern nur eine weiße seite. Ich denk mal das die Übergabe vom html Formular ans PHP Script nicht korrekt ist.

Hier das PHP script:

PHP:
<?php
$farbe = $_POST[Farbe]; //Farbe wird uebergeben
$art = $_POST[Schriftart]; //Schriftart wird uebergeben

if($farbe == "rot" AND $art == "Arial")//Beginn der Farbe Rot
   {
   echo 'Datumsfunktion in rot und Arial';
   }
   else if($farbe == "rot" AND $art == "Times New Roman")
   {
   echo 'Datumsfunktion in rot und Times New Roman';
   }
   else if($farbe == "rot" AND $art == "sans-serif")
   {
   echo 'Datumsfunktion in rot und Sans-Serif';
   }
   else if($farbe == "gruen" AND $art == "Arial") //Beginn der Farbe Gruen
   {
   echo 'Datumsfunktion in Gruen und Arial';
   }
   else if($farbe == "gruen" AND $art == "Times New Roman")
   {
   echo 'Datumsfunktion in gruen und Times New Roman';
   }
   else if($farbe == "gruen" AND $art == "sans-serif")
   {
   echo 'Datumsfunktion in gruen und Sans Serif';
   }
   else if($farbe == "blau" AND $art == "Arial") //Beginn der Farbe Blau
   {
   echo 'Datumsfunktion in blau und Arial';
   }
   else if($farbe == "blau" AND $art == "Times New Roman")
   {
   echo 'Datumsfunktion in blau und Times New Roman';
   }
   else if($farbe == "blau" AND $art == "sans-serif")
   {
   echo 'Datumsfunktion in blau und Sans Serif';
}   
?>


Und hier der HTML Code:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Datum</title>
</head>
<body>
<div>
<!---Farbe auswählen-->
<form method="post" action="datumsgenerator.php">
<p>Wählen sie eine Farbe aus:</p>
<select name="Farbe">
<option value="1">rot</option>
<option value="2">gruen</option>
<option value="3">blau</option>
</select>

<!---Schriftart auswählen-->
<p>Wählen sie eine Schriftart aus:</p>
<select name="Schriftart">
<option value="1">Arial</option>
<option value="2">Times New Roman</option>
<option value="3">sans-serif</option>
</select> 
<br />
<br />
<input type="submit" name="submit" value="Code ausgeben" />
</form>
</div>
</body>
</html>



Kann mir einer bitte weiterhelfen?

Grüße
T!P-TOP
 
1. Strings gehören immer in Anführungszeichen.
PHP:
$_POST['Farbe']

2. Sich die übergebenen Daten ausgeben zu lassen ist oft sehr hilfreich. Dann hättest du gesehen, dass nicht die Beschriftung des <option>-Tags übertragen wird, sondern der Wert (value). Es wird also jeweils 1,2 oder 3 übergeben. ;)
 
Ok nächstes Problem. Ich will mit echo html und php code ausgeben, dieser Code soll allerdings NICHT verarbeitet werden sondern nur als reiner Text ausgegeben werden.

zuerst hab ich s einfach so probiert: echo '//hier müsste der html und PHP Code rein';

Naja funzt nicht, er zeigte mir gar nix an.

Habs dann mit Doppelten Anführungszeichen und maskieren versucht, aber das klappt gar net!
PHP:
echo "\<?php print(date("d.m.Y")); ?>";

Also echo soll wie gesagt nur den PHP Code ausgeben, nicht mehr und nicht weniger.
 
Dazu musst du die spitzen Klammern maskieren.
< wird zu &lt; (steht für lower than)
> wird zu &gt; (steht für greater than)

Mit dem Backslash kannst du nur geschützte Zeichen wie " oder ' (je nach String) und den Backslash maskieren.
 
Was is daran Falsch?

<html>
<head>
<title>Datum</title>
</head>
<body>
<div style="color: #C40006">
<? print(date("d.m.Y")); ?>
</div>
</body>
</html>

Der zeigt mir nur eine weiße seite an.
 
das mit den Shorttag funktioniert nicht überall.
schreib mal <?php anstatt <?
Hast du die Seite als php Seite gespeichert?
<?php echo date("d.mY"); ?> funktioniert nicht?

--

Edit: Hab mich vertan.
Hast es auf den Beitrag davor bezogen
damit er es nicht interpretiert musst du wie kruschimappel es schon gesgat hat die lower than und greater than in html Schreibweise schreiben.
also &lt; für < und &gt; für >
also sähe es dann so aus

HTML:
..
<p>
&lt;?php echo date("d.m.Y"); ?&gt;
</p>
..
 
So jetzt funzt das. Allerdings will ich keinen Seitenwechsel, also ich will, dass die Ausgabe unter dem Formular stattfindet. Hier mein neuer Code.

test.htm

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Datum</title>
</head>
<body>
<div>
<!---Farbe auswählen-->
<form action="<?PHP $PHP_SELF = $_SERVER['PHP_SELF'];?>" method="post">
<p>Wählen sie eine Farbe aus:</p>
<select name="Farbe">
<option value="rot">rot</option>
<option value="gruen">gruen</option>
<option value="blau">blau</option>
</select>
 
<!---Schriftart auswählen-->
<p>Wählen sie eine Schriftart aus:</p>
<select name="Schriftart">
<option value="Arial">Arial</option>
<option value="TimesNewRoman">Times New Roman</option>
<option value="sansserif">sans-serif</option>
<option value="comic">Comic</option>
</select> 
<br />
<br />
<input type="submit" name="submit" value="Code ausgeben" />
</form>
<p>
<?php
$farbe = $_POST['Farbe']; //Farbe wird uebergeben
$art = $_POST['Schriftart']; //Schriftart wird uebergeben
//......
?>
</p>
</div>
</body>
</html>

Naja, funktionier leider nicht - also die method beim form funzt net. kommt die 404 Fehlermeldung sobald ich das Formular absende!?
 
Du musst $_SERVER['PHP_SELF'] schon ausgeben und nicht in einer Variablen speichern ;)

HTML:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
Außerdem solltest du vorher noch prüfen, ob das Formular gesendet wurde:

PHP:
if(isset($_POST['Farbe']) && isset($_POST['Schriftart']))
{
//anweisungen für ausgabe...
}
Im übrigen ist die Abfrage der Werte total umständlich und schreibaufwändig. Das lässt sich so viel besser lösen.
Außerdem ist das font-Tag veraltet. Mach das mit CSS.

PHP:
if(isset($_POST['Farbe']) && isset($_POST['Schriftart']))
{
   
$farbe = $_POST['Farbe']; //Farbe wird uebergeben
$art = $_POST['Schriftart']; //Schriftart wird uebergeben
echo '&lt;?php $datum = date("d.m.Y"); echo "&lt;span style="color:'.$farbe.';font-family:'.$art.'"&gt;$datum&lt;/span&gt;"; ?&gt;';
 }
Das ist doch schon viel kürzer. Entsprechend musst du natürlich die Werte im option-Tag anpassen. Interessiert schließlich keinen, ob das dort auf Deutsch oder Englisch steht, weil es keiner sieht...
 
Zuletzt bearbeitet:
hm ok. Das heißt ich kann bei den Select Feldern bei value einfach den englischen Namen für Farben angeben und der fügt mit dann die ausgewählte Farbe bei der echo ausgabe ein?
Wie sieht das ganze zB mit #C40006 aus? Kann man das in einer Variable übergeben oder kommt es da zu einer Fehlermeldung?
 
Im value musst du dann die Farben oder Schriftarten angeben, die hier eingebaut werden:

HTML:
<span style="color: FARBE; font-family: SCHRIFTART;">Datum</span>
folglich auch HEX- und RGB-Farben.
Offenbar hast du dich noch nicht mit CSS beschäftigt. Ich würde dir raten, das unbedingt nachzuholen.
Auf CSS 4 You - The Finest in Stylesheets gibt es eine gute Einleitung und eine umfangreiche Dokumentation zu allen CSS-Regeln.
 
Eine Frage hät ich noch:

<?php
$datum = date("d.m.Y");
echo "<span style="color: red; font-family: Arial; font-size: 8px;">$datum</span>";
?>

Im Echo Befehl stimmt was nicht! Zeile 3. Das is der generierte Code.
 
Ist doch vollkommen richtig. Du wolltest doch nicht, dass PHP-Code ausgeführt wird. Oder wolltest du das aktuelle Datum generieren lassen? Dann musst du das auch sagen.
Switch lässt sich dadurch vermeiden, dass die richtigen Angaben gleich im value der Auswahlliste gemacht werden. Aber als Ersatz für if-elseif-...-else ist das sinnvoller.
Quakenet/#php Tutorial - de - Switch-Abfragen


Hm ich hab mir da zB das Layout Workshop angesehen, die haben im Quelltext bei den Layout Bespielen einige Fehler drin, was die Semantik angeht...

Ich habe ja auch nur die Einleitung und die Dokumentation empfohlen :)
 
Ich will, das der Code generiert und unverarbeitet ausgegeben wird - das klappt auch prima. Doch wenn ich den Code testen will, ob der auch funktioniert, kommt eine Fehlermeldung.
 
Was macht man mit der Fehlermeldung, damit wir helfen können? Posten.

Code:
[B]Parse error[/B]:  syntax error, unexpected T_STRING, expecting ',' or ';' in [B]...[/B][B]/test.php[/B] on line [B]3[/B]
Das kommt, weil du Anführungszeichen nicht maskiert hast in deinem Code (den du von mir kopiert hast, wo ich leider den Fehler eingebaut hatte). PHP denkt, dass der String hier

PHP:
"<span style="
zu Ende ist. Deshalb musst du die Anführungszeichen im String per Backslash \ maskieren oder du verwendest einfache Anführungszeichen für den String, um nicht maskieren zu müssen.
Allerdings habe ich das bei deinem Post oben übersehen. Dafür postet man das in Code-Tags. Durch die farbliche Hervorhebung würde man sofort sehen, dass etwas nicht stimmt.

PHP:
//falsch
echo "<span style="color: red; font-family: Arial; font-size: 8px;">$datum</span>"; 

//richtig
echo "<span style=\"color: red; font-family: Arial; font-size: 8px;\">$datum</span>";

//auch richtig, aber Variablen müssen außerhalb des Strings sein,
//weil sie in einfachen Anf. nicht interpretiert werden
echo '<span style="color: red; font-family: Arial; font-size: 8px;">'.$datum.'</span>';


//vollst. code
echo '&lt;?php $datum = date("d.m.Y"); echo "&lt;span  style=\"color:'.$farbe.';font-family:'.$art.'\"&gt;$datum&lt;/span&gt;";  ?&gt;';
 
Zuletzt bearbeitet:
Ok danke dir. Ich hab da zwar ein PHP Buch, da wird das maskieren aber nur am Rande erwähnt und auch nur, das man da variablen makieren kann :/
Kennst du eine Seite wo die Maskierungen alle angeführt sind?
 
<?php
$datum = date("d.m.Y");
echo "<span style=\"color: red;font-family: sans-serif; font-size: 8px\">$datum</span>";
?>

Da ändert er nur die Farbe. Schiftart ist nachwievor Arial und schriftgröße 12px. Wieso ändert sich bis auf die Farbe nichts?
 
Zurück
Oben