Mit register_globals = off arbeiten

lenaMQ

Mitglied
Guten Morgen


Ich habe für eine Firma ein relativ simples Mailformular gebastelt und nun musste ich feststellen, dass es auf dem Webserver des Kunden nicht funktioniert. Auf Anfrage beim Webserver-Anbieter bekam ich die Antwort: Wir arbeiten nur mit register_globals=off.:confused:

Mmh tja aus http://de.php.net/register_globals werde ich nicht schlau. Kann mir jemand helfen, wie ich folgenden Quelltext abändern kann?

PHP:
<?
 
/*Hier werden alle Daten eingegeben*/
/*An wen soll die Anfrage gerichtet sein?*/
 
$webmaster = "info@webmaster.de";
/*Welche E-Mail-Adresse soll als Absender eingegeben werden?*/
 
$absender = "info@webmaster.de";
$kopie = "ja";
 
/*Betreff*/ $betreffwebmaster = "Anfrage auf ***";
/*Textkörper*/  $koerperwebmaster = "Über *** wurde folgende Nachricht hinterlassen:
  \n
                 ANREDE:   $anrede \n
                 NAME:   $name \n
                 VORNAME:   $vorname \n
                 EMAIL:   $email \n
                 BETREFF:   $betreff \n
                 \n\n
 -- NACHRICHT --  \n\n
 $mailer_email";
/*Betreff*/ $betreffabsender = "Ihre anfrage auf ***";
/*Textkörper*/  $koerperabsender = "Herzlichen Dank für Ihre Nachricht an *** \nSie haben folgende Nachricht gesendet\n\n\n $mailer_email\n";
 
$mailfalsch = "<p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'> -- Fehler --</p><p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'>Leider ist die E-Mail-Adresse falsch</p><p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'>Bitte kontrollieren Sie noch einmal die Eingabe und senden Sie das Formular erneut ab.";
 
$felderleer = "<p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'> -- Fehler -- </p><p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'>Die Nachricht konnte nicht versandt werden, <br>da nicht alle notwendigen Felder (Name, Email, Nachricht) ausgefüllt wurden</p>";
 
$abgesandt = "<p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'> -- Danke --</p><p style='font-family: Arial, Tahoma; color:#666633;font-size:10pt;'>Die Nachricht wurde erfolgreich versandt.<br> Sie erhalten bald Auskunft von uns.</p>";
 
if ($name == "" || $email =="" || $mailer_email =="" )
 {
 echo "$felderleer";
 }
  else
   {
   if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$", $email))
    {
    mail("$webmaster","$betreffwebmaster","$koerperwebmaster\n","FROM: $absender\n");
 
   if ($kopie == "ja")
     {
     mail("$email","$betreffabsender","$koerperabsender","FROM: $absender\n");
     echo "$abgesandt";
     }
    else
     {
     echo "$abgesandt";
     }
    }
    else
    {
     echo "$mailfalsch";
    }
       }
?>


Bin dankbar für jeden Hinweis!
Lena
 
Das ist eigentlich garnicht so schwer.
Alle Daten die per GET uebertragen werden, also Daten die an den URL angehaengt (also inklusive Daten die von einem Formular mit der Method GET kommen), holst Du die Daten aus dem Array $_GET.
Entsprechend sieht es mit Daten aus die per POST uebertragen wurden, also Daten die aus Formularen mit der Method POST kommen (was fuer Formulare die Regel ist). Diese holst Du aus dem Array $_POST.
 
Muss ich nun zu Beginn meines Scripts ein Array auslesen? Ich habe mit arrays noch nicht viel oder NICHTS gemacht. Wie kann ich nun mein Script am einfachsten ändern?

:suspekt:

Bzw wäre ein gutes Beispiel prima, an dem ich es nachvollziehen kann...
 
Du musst nur auf die Arrays zugreifen wenn es auch noetig ist, und am Anfang des Scripts ist es z.B. nicht noetig.

Uebrigens solltest Du am Anfang des Scripts <? durch <?php ersetzen, da es ansonsten eventuell zu Problemen kommen kann wenn mal die PHP-Konfiguration geaendert wird oder in PHP der Support fuer <? irgendwann mal rausfliegt.

Nun wieder zu Deinem Problem.
Am Anfang des Scripts setzt Du ja erstmal einen Haufen Variablen.
Anschliessend kommt eine IF-Abfrage, und dort musst Du eben die Variablen aus den Arrays holen und nicht direkt ansprechen.
Welches Array das ist kann ich Dir nicht genau sagen, da ich nicht weiss woher die Daten kommen, aber ich tippe mal auf ein Formular und somit auf $_POST.
Entsprechend sieht die Zeile
PHP:
if ($name == "" || $email =="" || $mailer_email =="" )
wie folgt aussehen:
PHP:
if ($_POST['name'] == "" || $_POST['email'] =="" || $_POST['mailer_email'] =="" )

Und natuerlich auch spaeter wo Du auf diese Variablen zugreifst musst Du das wie hier gezeigt anpassen.
 
Ach so sieht das aus :)
He ich danke dir... Hoffe das funktioniert so. Muss ich das bei den Darauffolgenden if-Anweisungen auch so machen?
 
Ja, ueberall wo Du mit uebergebenen Daten arbeitest musst Du so vorgehen.
So hast Du im Script auch den Vorteil immer erkennen zu koennen ob es sich um eine uebergebene Variable handelt oder um eine selbst erstellte, denn die uebergebenen holst Du dann ja alle aus den Arrays.
 
mmh nun hab ich das Problem, dass ich der ankommenden Mail nichts drin steht:

"----
Über *** wurde folgende Nachricht hinterlassen:


ANREDE:

NAME:

VORNAME:

EMAIL:

BETREFF:





-- NACHRICHT -- ""

Woran liegt das nun?
 
Hab uebersehen, dass Du auch vor dem IF schon mit den Variablen arbeitest.
Und zwar hier:
PHP:
/*Textkörper*/  $koerperwebmaster = "Über *** wurde folgende Nachricht hinterlassen:
  \n
                 ANREDE:   $anrede \n
                 NAME:   $name \n
                 VORNAME:   $vorname \n
                 EMAIL:   $email \n
                 BETREFF:   $betreff \n
                 \n\n
 -- NACHRICHT --  \n\n
 $mailer_email";
Wie gesagt, ueberall wo Du auf uebergebene Werte zugreifst musst Du eben mit den genannten Arrays arbeiten.
 
Hab nun Folgendes geändert:

PHP:
/*Textkörper*/  $koerperwebmaster = "Über *** wurde folgende Nachricht hinterlassen:
  \n
                 ANREDE:   $_POST['anrede'] \n
                 NAME:   $_POST['name'] \n
                 VORNAME:   $_POST['vorname'] \n
                 EMAIL:   $_POST['email'] \n
                 BETREFF:   $_POST['betreff'] \n
                 \n\n
 -- NACHRICHT --  \n\n
 $_POST['mailer_email']";
 
 
------------------[...]-------------------
 
if ($_POST['name'] == "" || $_POST['email'] =="" || $_POST['mailer_email'] =="" )
 {
 echo "$felderleer";
 }
  else
   {
   if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,3})$_",$_POST['email']))
    {
    mail("$webmaster","$betreffwebmaster","$koerperwebmaster\n","FROM: $absender\n");

   if ($kopie == "ja")
     {
     mail($_POST['email'],"$betreffabsender","$koerperabsender","FROM: $absender\n");
     echo "$abgesandt";
     }
    else
     {
     echo "$abgesandt";
     }
    }
    else
    {
     echo "$mailfalsch";
    }
       }
?>


Nun kommt nach dem Absenden nur noch eine weiße Seite und eine Mail wird nicht versendet... muss ich im oberen Bereich ein ; nach jedem Post einsetzen? Was hab ich vergessen oder zu viel?
 
Eine Variable kann man einfach in den Text setzten, Ein Array mußt Du sozusagen einbinden.

Code:
/*Textkörper*/  $koerperwebmaster = "Über *** wurde folgende Nachricht hinterlassen:
  \n
                 ANREDE:   ".$_POST['anrede']." \n
                 NAME:   ".$_POST['name']." \n
                 VORNAME:   ".$_POST['vorname']." \n
                 EMAIL:   ".$_POST['email']." \n
                 BETREFF:  ". $_POST['betreff']." \n
                 \n\n
 -- NACHRICHT --  \n\n
 ".$_POST['mailer_email'];
 
Zurück