Archiv verlassen und diese Seite im Standarddesign anzeigen : include in echo verboten?
Wenn ich folgenden Text ausgeben lasse:
echo "
<br>
<form method='post' action='?action=check'><table>
<tr><td>Benutzername:</td><td><input type='text' name='username'></td></tr>
<tr><td>Passwort:</td><td><input type='password' name='password'></td></tr>
<tr><td>Passwort bestätigen:</td><td><input type='password' name='passwordc'></td></tr>
<tr><td></td><td><input type='submit' value='Absenden'></td></tr>
<tr><td rowspan='2'>" . include('errors.php') . "</td></tr>
</table></form>";
fehlt der ganze letzte Teil mit dem include.
Ausgabe:
<br>
<form method='post' action='?action=check'><table>
<tr><td>Benutzername:</td><td><input type='text' name='username'></td></tr>
<tr><td>Passwort:</td><td><input type='password' name='password'></td></tr>
<tr><td>Passwort bestätigen:</td><td><input type='password' name='passwordc'></td></tr>
<tr><td></td><td><input type='submit' value='Absenden'></td></tr>
<tr><td rowspan='2'>
Darf man in echo kein include benutzen? und wenn doch wie?
Original geschrieben von jmc
Darf man in echo kein include benutzen?
Doch - aber es wird dann natürlich nur der Rückgabewert von include an der Stelle ausgegeben.
Und der ist idR. nur true (1) oder false - sofern du nicht explizit dafür sorgst, dass aus dem Code im include-File heraus etwas zurückgegeben wird.
Herr Kaiser 11-05-2006, 08:24 ich weiss, es ist nicht die galanteste lösung, aber eval() sollte das lösen....
versuchs mal damit:
$CODE = 'echo "
<br>
<form method=\'post\' action=\'?action=check\'><table>
<tr><td>Benutzername:</td><td><input type=\'text\' name=\'username\'></td></tr>
<tr><td>Passwort:</td><td><input type=\'password\' name=\'password\'></td></tr>
<tr><td>Passwort bestätigen:</td><td><input type=\'password\' name=\'passwordc\'></td></tr>
<tr><td></td><td><input type=\'submit\' value=\'Absenden\'></td></tr>
<tr><td rowspan=\'2\'>".include(\'errors.php\')."</td></tr>
</table></form>";';
eval($CODE);
Manni_the_Dark 11-05-2006, 13:55 Original geschrieben von Herr Kaiser
ich weiss, es ist nicht die galanteste lösung, aber eval() sollte das lösen....
versuchs mal damit:
$CODE = 'echo "
<br>
<form method=\'post\' action=\'?action=check\'><table>
<tr><td>Benutzername:</td><td><input type=\'text\' name=\'username\'></td></tr>
<tr><td>Passwort:</td><td><input type=\'password\' name=\'password\'></td></tr>
<tr><td>Passwort bestätigen:</td><td><input type=\'password\' name=\'passwordc\'></td></tr>
<tr><td></td><td><input type=\'submit\' value=\'Absenden\'></td></tr>
<tr><td rowspan=\'2\'>".include(\'errors.php\')."</td></tr>
</table></form>";';
eval($CODE);
Öhm, nein? Afaik geht das nicht.
Entweder macht man das über ein return in der eingebundenen Datei oder man verwendet den Output-Buffer. Link (http://de.php.net/manual/en/ref.outcontrol.php)
also das mit eveal() hat erstmals nicht geklappt.
echo "
<br>
<form method='post' action='?action=check'><table>
<tr><td>Benutzername:</td><td><input type='text' name='username'></td></tr>
<tr><td>Passwort:</td><td><input type='password' name='password'></td></tr>
<tr><td>Passwort bestätigen:</td><td><input type='password' name='passwordc'></td></tr>
<tr><td></td><td><input type='submit' value='Absenden'></td></tr>
<tr><td rowspan='2'>" . include('errors.php') . "</td></tr>
</table></form>";
und errors.php :
<?
switch($errornr){
case '':
echo '';
break;
case '1':
echo '<span>Wrong user or password</span>';
break;
case '2':
echo '<span>You are out of the sistem</span>';
break;
case '3':
echo '<span>Error please authentificate</span>';
break;}
return;
?>
wie meinst du das genau mit return?
Manni_the_Dark 11-05-2006, 16:45 Wenn in der eingebundenen Datei zB return "foo" steht, gibt include("die_datei.php") halt "foo" zurück.
Das Problem ist die datei errors.php wird gar nicht erst eingefügt. nach <td rowspan='2'> wird alles andere im Script ausgelassen.
ghostgambler 11-05-2006, 17:07 Original geschrieben von jmc
Das Problem ist die datei errors.php wird gar nicht erst eingefügt. nach <td rowspan='2'> wird alles andere im Script ausgelassen.
error_reporting(E_ALL);
an den Anfang des Skriptes ... wahrscheinlich wird sie nicht eingefügt, weil sie nicht gefunden wird
Vielen dank! Jetzt weiss ich was falsch ist kann aber immer noch nichts damit anfangen...
Warning: main(errors.php ): failed to open stream: No such file or directory in /htdocs/trial/login2/signup.php on line 49
Warning: main(): Failed opening 'errors.php</td></tr> </table></form>' for inclusion (include_path='.:/data/apache/php/mmp_lib') in /htdocs/trial/login2/signup.php on line 49
Linie 49 ist die mit include und wenn ich aber das Formular nicht mit PHP sondern mit HTML ausgeben lasse und dann <? include('errors.php') ?> einfüge funktioniert es. Deswegen nimmt es mich wunder wie man mit echo include verwendet.
ghostgambler 11-05-2006, 17:28 befindet sich errors.php in /htdocs/trial/login2/ ?
Wenn ja probiere mal
include('./errors.php');
wenn nicht passe den Pfad gefälligst an
das einzige was passiert ist, dass noch ./ hinzugefügt wird in der Fehlermeldung. Auch der ganz ausgeschriebene Pfad nützt nichts.
komisch ist, dass
Warning: main(): Failed opening 'errors.php</td></tr> </table></form>' for inclusion (include_path='.:/data/apache/php/mmp_lib') in /htdocs/trial/login2/signup.php on line 49
rauskommt also nicht nur errors.php in den Anführungszeichen liegt. Da liegt wahrscheinlich der Fehler, aber ich weiss nicht wie man ihn beheben kann.
mach doch ein echo, dann include mit dem richtigen Pfad
und dann wieder ein echo.
Oder laß das echo ganz weg, Du kannst in einer php-Datei
ja auch so html-Code schreiben.
jo ohne php klappt es aber ich möchte wissen wo der Fehler liegt wenn ich sowas wieder mal antreffe.
Wenn ich ein echo dann das Include und dann wieder ein echo mache wird das include nicht in die Tabelle gesetzt.
in beiden von Dir geposteten Sources fehlt aber das zweite echo.
Du machst ja:
echo "xxxx".include."yyy";
richtig wäre:
echo "xxxx";
include ("dsfsadf.php");
echo "yyyy";
ja das ist mir klar ich habe das nur nicht nochmals gepostet, aber das include ist dann ausserhalb der Tabelle. Ich denke ich mache es jetzt einfach mit HTML.
Vielen Dank euch allen!
wieso außerhalb der Tabelle?
der Code wird im Source genau da eingefügt
wo Dein include steht.
ja dachte ich auch aber irgendwas funktioniert da bei mir nicht und deshalb habe ich es mit dem geposteten script versucht...
Das Resultat waren noch mehr Fehler...
onemorenerd 11-05-2006, 19:05 include|require[_one] sind keine Funktionen sondern Sprachkonstrukte. Die Klammern sind nur syntaktischer Zucker, sie können weggelassen werden.include 'file.inc'; Wenn man in deinem Versuch die Klammern wegläßt, ergibt sich echo "...." . include 'file.inc' . "blabla"; was der Interpreter so versteht echo "..." . include 'file.incblabla'; was man eigentlich auch an der Fehlermeldung sehen konnte.
Das war die Erklärung, hier kommt die Lösung:
Du mußt dem Interpreter mitteilen, wie er das verstehen soll - das geschieht üblicherweise mit Klammern.
So funktioniert es:
<?php
echo 'foo'.(include('bar.inc.php')).'baz';
echo 'foo'.(include 'bar.inc.php').'baz';
?>
bar.inc.php
<?php
return 'bar';
?>
Mit den Klammern klappt es jetzt endlich.
Danke für den Tipp.
|