Hallo !
Ich habe mich bei
http://tut.php-quake.net weiter durchgearbeitet. Das Tutorial ist echt super. Schön einfach beschrieben. Aber leider habe ich ein kleines Problem das ich mir nicht erklären kann. Es geht um folgendes.
Ich übergebe an ein Script Werte über die URL. (Über GET). Da ich aber nun jedes mal
schreiben muss, dachte ich mir, ich vereinfache das Ganze etwas und wandle alle _GET Werte in "normale" Variablen um, und arbeite dann mit diesen weiter. Ich das das man mit folgendem Script getestet.
<?php
error_reporting(E_ALL);
$Titel = $_GET[autor];
$Inhalt = $_GET[inhalt];
$Autor = $_GET[autor];
echo $Titel;
echo "<br />";
echo $Inhalt;
echo "<br />";
echo $Autor;
?>
Aufgerufen habe ich die Seite mit folgender URL: http://localhost/php_test/index.php?titel=Testeintrag&inhalt=Das_ist_ein_Testeintrag&autor=SamFisher
Wenn ich das mache, wird das Script zwar ausgeführt und es funktioniert auch, aber ich erhalte eine Fehlermeldung. Das liegt an dem error_reporting. Wenn ich das auskommentiere, habe ich keine Fehlermeldung. Aber dass kann ja wohl nich richtig sein.
Ich bekomme folgende Fehlermeldung:
Notice: Use of undefined constant autor - assumed 'autor' in C:\xampp\htdocs\php_test\index.php on line 4
Notice: Use of undefined constant inhalt - assumed 'inhalt' in C:\xampp\htdocs\php_test\index.php on line 5
Notice: Use of undefined constant autor - assumed 'autor' in C:\xampp\htdocs\php_test\index.php on line 6
Ich habe die Meldung mal gegooglet und so wie ich das verstehe, sagt mir PHP, dass ich eine Konstante verwende, die ich noch nicht definiert habe. Jedoch verwende ich in diesem Schript nur eine Konstante. Und das ist die vom E_ALL. Deshalb verstehe ich das nicht. Zumal das Script ja richtig ausgeführt wird.
Weiß wer von euch woran das liegt?
Vielen Dank im Vorraus.
Grüße
Sam[/quote]
Diese Meldung kommt daher, falls in der URL keine Variablen übergeben werden würden, hättest du ein Problem da die Variablen $Titel, $Inhalt und $Autor leer wären. Die Meldung sagt dir also, es wäre irgendwann möglich, dass diese 3 Variablen (oder nur eine davon) keinen Wert haben und du daher damit nicht arbeiten könntest. Dies ist also keine Fehlermeldung, da das Script ja läuft, daher wirds nur angezeigt wenn du error_reporting(E_ALL); hinschreibst.
Schreibe also das Script so, wenn die Variablen titel, inhalt und autor in der URL nicht übergeben wurden, dass die entsprechenden Variablen dazu eine leere Zeichenkette bekommen, dann dürfte es funzen.
PS: Du übergibst 2mal die Variable $_GET[autor]
Hallo !
Danke für die schnelle Antwort. Ich habe mir die Function empty rausgesucht und versuche jetzt ein paar Prüfungen vorher einzubauen.
Wenn ich fertig bin poste ich den Code, damit ihr mir sagen könnt, ob das so in Ordnung ist oder nicht.
Vielen Dank im Voraus.
Grüße
Sam
PS: @2 mal Autor: Sorry, sollte Titel heißen :-)
dein Fehler ist ganz einfach, wenn du eine Variable aus dem globalen $_GET array entnehmen willst, musst du den Namen zur identifizierung als string übergeben, wenn man jetzt, so wie du $_GET[autor] schreibt, geht php davon aus, das autor eine konstante ist und versucht den Inhalt zu verwenden, da es aber keine Konstante mit diesem namen gibt, gibt PHP nun eine warnung aus.
Der korrekte aufruf würde folgendermaßen aussehen:
$autor = $_GET['autor']; //alternativ auch mit doppeltem Hochkommata "autor"
Ich kenne das so, dass man die Variable in den Klammern mit einfachen Hochkommata, mit doppelten Hochkommata oder auch ohne Hochkommata schreiben kann. Mir ist so als hätte Fresh seine Scripte immer ohne Hochkommata geschrieben und da lief alles prima. Kann mich aber auch täuschen.
Ich kenne es nur mit Hochkommata oder doppeltem Hochkommata, aber ich will natürlich nicht ausschließen das es nicht auch anders geht, aber evtl. auch nur mit einer bestimmten PHP-Konfiguration, die XAMP nicht standartmäßig aktiviert hat. Hab mich damit aber auch noch nie auseinandergesetzt.
Naja aber mit den Hochkommata sollte es auf jedenfall funktionieren, evtl. gewöhnst du es dir so an, falls es wirklich von einer Konfigurationseinstellung abhängig ist.
Ansonsten noch zu deinem Script, es gibt eine PHP einstellung die nennt sich "register_globals", diese macht im prinzip genau das was du in deinem Script manuell machst, alle übergebenen Variablen in lokale umwandeln, die den Namen des übergebenen Parameters benutzt.
Auf gemieteten webspaces ist diese Funktion meist aber deaktiviert und ab PHP 6 wird es das auch nicht mehr geben, dann kann man über die übergebenen Parameter nur noch über die superglobalen array's $_POST, $_GET, $_SESSION, $_COOKIE, $_SERVER etc, da man recht viele schädliche Dinge anstellen kann, wenn die PHP-Anwendung nicht "sauber" mit den übergebenen Werten umgehen kann.
Aber um die Funktionsweise zu verstehen oder sich zusätzliches Hintergrundwissen anzueignen, wollte ich "register_globals" einfach mal erwähnt haben.
Hallo !
Vielen Dank für die Antworten. Damit konnte ich was anfangen und habe den Fehler verstanden. Sollte mir in zukunft nicht mehr passieren.
Vielen Dank
Grüße
Sam