Ist Return mit einem Limit versehen?

Alex_T

Erfahrenes Mitglied
Hallöle,

Nachdem ich mir nun eine Funktion geschrieben habe, die mir einen Quellcode je nach Sachverhalt generiert, möchte ich das Ergebnis per "return $Code;" zurückgeben.
Die Variable "Code" ist wie folgt verarbeitet:

PHP:
<?php
function GENERATE() {
$Code = "<table border='0'>";
$Code.= "<tr><td><br>";
$Code.= "</td></tr>";
$Code.= "</table>";

return $Code;
}
?>
...nur um es zu veranschaulichen.

Nun ist der Code natürlich um einiges größer. In meinem Fall 41 Zeilen. Wenn ich die Funktion nun wie folgt aufrufe:

PHP:
<?php
$text = GENERATE();
echo"$text";
?>
und Sie dann mit dem echo-Befehl ausgeben lasse, dann ist ein großer Teil des Quellcodes einfach verschwunden.
Da tat sich bei mir der Verdacht auf, das return nur eine bestimmt "Menge" zurückgeben kann - wenn es mehr ist, dann wird überschrieben.

Nun meine Frage:
Ist jemandem etwas derartiges bekannt (das return ein Limit besitzt)?
Wenn ja - kann man das irgendwie umgehen (an ein paar Parametern in der ini drehen)?

Danke schon jetzt für Eure Bemühungen.
 
PHP:
<?php
function testReturn()
{
    $str = '';
    for($i = 0; $i < 1000; $i++)
    {
        $str .= 'abcdefghijklmnopqrstuvwxyz';
    }
    return $str;
}

echo strlen(testReturn());
?>

1000 mal das Alphabet, also 26.000 Zeichen... Erscheint mir eher unwahrscheinlich.
Eventuell hast du einen Fehler im Code?
 
OK - damit wäre das dann schon mal geklärt.
Werd mich mal weiter mit dem Problem auseinandersetzen.
Falls sich was in die positive Richtung bewegt, dann werd ich es euch hier natürlich mitteilen.

Danke erstmal soweit und noch 'n schönen Abend.
 
Erscheint der Erste oder der Letzte Teil des gewünschten Textes? Im Zweiten Fall hast du irgendwo ein . vergessen

PHP:
$Code = 'a';
$Code .= 'b';
Hier geht der Punkt vergessen
$Code = 'c';
$Code .= 'd';
//Ausgabe: 'cd'
 
Grüße Yaslaw,

ich hab das mit dem vergessenen Punkt mal geprüft, leider ohne Erfolg (waren alle korrekt gesetzt). Aus diesem Grunde mal mein Code:

PHP:
function DB_NEW() {
$Code='<?php';
$Code.='@$db = new mysqli(\'$Hostname\', \'Benutzername\', \'$Passwort\');';
$Code.='//Verbindungsprüfung';
$Code.='if(mysqli_connect_errno()) {';
$Code.='printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());';
$Code.='exit();';
$Code.='}';

$Code.='//Datenbank anlegen';
$Code.='$CREATE_DATABASE = mysqli_query($db, "CREATE DATABASE IF NOT EXISTS $Datenbankname");';
$Code.='if($CREATE_DATABASE) { echo"Datenbank wurde erfolgreich angelegt.<br>";} else { echo"Datenbank konnte nicht angelegt werden.<br>"; }';

$Code.='//Datenbanktabellen anlegen';
$Code.='$CREATE_TABLE_USER = mysqli_query($db, "CREATE TABLE IF NOT EXISTS Forum_User';
$Code.='								  id int(11) NOT NULL AUTO_INCREMENT,';
$Code.='								  Username VARCHAR(40) NOT NULL,';
$Code.='								  Passwort VARCHAR(32) NOT NULL,';
$Code.='								  Beiträge int(10),';
$Code.='								  Reg_Date TIMESTAMP,';
$Code.='								  Ort VARCHAR(50),';
$Code.='								  Userpic LONGBLOB,';
$Code.='								  Typ VARCHAR(40) NOT NULL,';
$Code.='								  PRIMARY KEY(id)';
$Code.='								  ")";';

$Code.='if($CREATE_TABLE_USER) { echo"Datenbanktabelle Forum_User erfolgreich angelegt.<br>"; } else { echo"Datenbanktabelle konnte nicht angelegt werden.<br>"; }';

$Code.='$CREATE_TABLE_ADMIN = mysqli_query($db, "CREATE TABLE IF NOT EXISTS Admin';
$Code.='								   id int(10) NOT NULL AUTO_INCREMENT,';
$Code.='								   Adminname VARCHAR(40) NOT NULL,';
$Code.='								   Adminpasswort VARCHAR(32) NOT NULL,';
$Code.='								   Typ VARCHAR(20) NOT NULL,';
$Code.='								   PRIMARY KEY(id)';
$Code.='								   ")";';

$Code.='if($CREATE_TABLE_ADMIN) {';
$Code.='	$INSERT_ADMIN = mysqli_query($db, "INSERT INTO Admin (id, Adminname, Adminpasswort, Typ) VALUES (\'\', \'\$Adminname\', \'\$Adminpasswort\', \'Superadmin\')");';
$Code.='	echo"Datenbanktabelle Admin erfolgreich angelegt<br>";';
$Code.='	if($INSERT_ADMIN) { echo"Admin wurde erfolgreich in die Datenbanktabelle geschrieben.";} else { echo"Admin konnte nicht in die Datenbanktabelle geschrieben werden.";}';
	
$Code.='} else { echo"Datenbanktabelle Admin konnte nicht angelegt werden. Alle weiteren Prozesse wurden abgebrochen.";}';
$Code.='?>';

return $Code;
}

Das ganze wird dann über den Zuweisungsteil einer Variablen aufgerufen und soll letztendlich in eine textarea rein. Momentan habe ich das so gelöst:

PHP:
<?php
$Quellcode = DB_NEW();
?>

<textarea name='Quellcode_1' cols='110' rows='30' value='<?php echo"$Quellcode";?>'></textarea>

Was er mir verschweigt ist der folgende Teil:
Code:
$Code='<?php';
$Code.='@$db = new mysqli(\'$Hostname\', \'Benutzername\', \'$Passwort\');';
$Code.='//Verbindungsprüfung';
$Code.='if(mysqli_connect_errno()) {';
$Code.='printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());';
$Code.='exit();';
$Code.='}';

$Code.='//Datenbank anlegen';
$Code.='$CREATE_DATABASE = mysqli_query($db, "CREATE DATABASE IF NOT EXISTS $Datenbankname");';
$Code.='if($CREATE_DATABASE) { echo"Datenbank wurde erfolgreich angelegt.

...alles danach wird ausgegeben.

P.S. Keine Ahnung warum der BB die ersten 2 Zeilen hier so komisch highlightet - ist bei mir lokal nicht der Fall.
 
Hallo,

mal ne Frage am Rande:
Warum speicherst du das ganze umständlich Stück für Stück in einem String?
Schau dir mal die Funktionen ob_start(), ob_get_contents(), ob_flush() und ob_clean() an ;)


// Edit: Ausserdem
PHP:
$Code.='@$db = new mysqli('$Hostname...
Du vergisst ein Hochkomma zu escapen (nach der öffnenden Klammer).

Gruß
BK
 
Zuletzt bearbeitet:
Grüße,

beim kopieren muss da was abhanden gekommen sein :p.
Ja so könnte man das auch machen, jedoch stellt mich das nicht ruhig :D.
Der Fehler tritt ja immer noch auf, auch wenn man das Problem anders lösen könnte.
Mich interessiert in dem Zusammenhang trotzdem was da falsch läuft.
 
*g* Ich kann das nachvollziehen. Die Ausgabe sieht bei mir so aus
Code:
";} else { echo"Datenbank konnte nicht angelegt werden.
"; }//Datenbanktabellen anlegen$CREATE_TABLE_USER = mysqli_query($db, "CREATE TABLE IF NOT EXISTS Forum_User id int(11) NOT NULL AUTO_INCREMENT, Username VARCHAR(40) NOT NULL, Passwort VARCHAR(32) NOT NULL, Beiträge int(10), Reg_Date TIMESTAMP, Ort VARCHAR(50), Userpic LONGBLOB, Typ VARCHAR(40) NOT NULL, PRIMARY KEY(id) ")";if($CREATE_TABLE_USER) { echo"Datenbanktabelle Forum_User erfolgreich angelegt.
"; } else { echo"Datenbanktabelle konnte nicht angelegt werden.
"; }

Jedoch den Sourcecode der Ausgabe sieht ganz anderst aus Da steht alles drin
Die Anzeige beginnt it dem ersten <br>, da HTML nicht weiss wie sie das ganze parsen soll.
Nimm mal die erste Zeile raus (<?php) und du siehst viel mehr....

Nachtrag:
Noch besser, einfach alle HTML-Spiezalzeichen umwandeln...
PHP:
echo htmlspecialchars($Code);
 
Zuletzt bearbeitet:
Ja,
es funktioniert soweit, dass ich jetzt alles angezeigt bekomme. Problem an der ganzen Geschichte ist, wenn ich die HTML-Spezialzeichen umwandle, dann wird mir zwar der korrekte String ausgegeben, jedoch schreibt er nun nichts mehr in die textarea (wenn ich die Zeichen nicht umwandeln lasse, dann schreibt er zwar etwas rein - das ist dann aber nicht vollständig :eek: .)
 
Bei meinem Test funktioniert das aber
PHP:
<textarea cols="80", rows="40">
<?php
$Code='<?php ';
$Code.='$db = new mysqli(\'$Hostname\', \'Benutzername\', \'$Passwort\');';
$Code.='//Verbindungsprüfung';
$Code.='if(mysqli_connect_errno()) {';
$Code.='printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());';
$Code.='exit();';
$Code.='}';

$Code.='//Datenbank anlegen';
$Code.='$CREATE_DATABASE = mysqli_query($db, "CREATE DATABASE IF NOT EXISTS $Datenbankname");';
$Code.='if($CREATE_DATABASE) { echo"Datenbank wurde erfolgreich angelegt.";} else { echo"Datenbank konnte nicht angelegt werden.<br>"; }';

$Code.='//Datenbanktabellen anlegen';
$Code.='$CREATE_TABLE_USER = mysqli_query($db, "CREATE TABLE IF NOT EXISTS Forum_User';
$Code.='                                  id int(11) NOT NULL AUTO_INCREMENT,';
$Code.='                                  Username VARCHAR(40) NOT NULL,';
$Code.='                                  Passwort VARCHAR(32) NOT NULL,';
$Code.='                                  Beiträge int(10),';
$Code.='                                  Reg_Date TIMESTAMP,';
$Code.='                                  Ort VARCHAR(50),';
$Code.='                                  Userpic LONGBLOB,';
$Code.='                                  Typ VARCHAR(40) NOT NULL,';
$Code.='                                  PRIMARY KEY(id)';
$Code.='                                  ")";';

$Code.='if($CREATE_TABLE_USER) { echo"Datenbanktabelle Forum_User erfolgreich angelegt.<br>"; } else { echo"Datenbanktabelle konnte nicht angelegt werden.<br>"; }'; 

echo htmlspecialchars($Code);
?>
</textarea>

Aber du soltest am Ende der Zeilen jeweils noch einen Zeilenumbruch anghängen, damit es lesbar wird.
 
Zurück