Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
include in echo verboten? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
include in echo verboten?


 
jmc
10-05-2006, 22:05 
 
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?

 
wahsaga
10-05-2006, 22:13 
 
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)

 
jmc
11-05-2006, 16:32 
 
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.

 
jmc
11-05-2006, 16:54 
 
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

 
jmc
11-05-2006, 17:15 
 
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

 
jmc
11-05-2006, 17:40 
 
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.

 
Koala
11-05-2006, 17:42 
 
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.

 
jmc
11-05-2006, 17:44 
 
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.

 
Koala
11-05-2006, 18:15 
 
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";

 
jmc
11-05-2006, 18:22 
 
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!

 
Koala
11-05-2006, 18:24 
 
wieso außerhalb der Tabelle?
der Code wird im Source genau da eingefügt
wo Dein include steht.

 
jmc
11-05-2006, 18:30 
 
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';
?>

 
jmc
12-05-2006, 08:15 
 
Mit den Klammern klappt es jetzt endlich.

Danke für den Tipp.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:52 Uhr.