Danny2810: php/mySQL: Insert & gleichzeitig Mail-Versand

Hallo zusammen,

so langsam bin ich am verzweifeln :-( Ich habe ein Registrierungsformular mit php erstellt. Der User soll sich hier registrieren können (was auch klappt --> Eintrag in die Datenbank) und gleichzeitig soll eine an den Admin rausgehen, das sich wer registriert hat. Soweit so gut. Eintrag in die Datenbank klappt, Mail geht auch raus. Nur das Problem ist, das in der Mail nix drinsteht. :-( Ich würde mir die Mail gerne so gestalten, das ich nur gewisse Felder per Mail bekomme. Aber wie ich das auch drehe und wende, ich bekomme noch graue Haare. Könnt ihr mir vielleicht helfen?

Hier der PHP-Code für den Eintrag in die Datenbank:

<?php require_once('Connections/SQL.php'); ?> <?php if (!function_exists("GetSQLValueString")) { function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") {   if (PHP_VERSION < 6) {     $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;   }

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {     case "text":       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";       break;     case "long":     case "int":       $theValue = ($theValue != "") ? intval($theValue) : "NULL";       break;     case "double":       $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";       break;     case "date":       $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";       break;     case "defined":       $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;       break;   }   return $theValue; } }

$editFormAction = $_SERVER['PHP_SELF']; if (isset($_SERVER['QUERY_STRING'])) {   $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']); }

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "regist")) {    $insertSQL = sprintf("INSERT INTO users (id, autologin, ip, sessionid, username, password, email, country, age, hp, 1, 2, 3, 4, 5, 6) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",                        GetSQLValueString($_POST['id'], "int"),                        GetSQLValueString($_POST['autologin'], "text"),                        GetSQLValueString($_POST['ip'], "text"),                        GetSQLValueString($_POST['sessionid'], "text"),                        GetSQLValueString($_POST['username'], "text"),                        GetSQLValueString(md5($_POST['password']), "text"),                        GetSQLValueString($_POST['email'], "text"),                        GetSQLValueString($_POST['country'], "text"),                        GetSQLValueString($_POST['age'], "int"),                        GetSQLValueString($_POST['hp'], "text"),                        GetSQLValueString($_POST['1'], "text"),                        GetSQLValueString($_POST['2'], "text"),                        GetSQLValueString($_POST['3'], "text"),                        GetSQLValueString($_POST['4'], "text"),                        GetSQLValueString($_POST['5'], "text"),                        GetSQLValueString($_POST['6], "text")); mysql_select_db($database_SQL, $SQL); $Result1 = mysql_query($insertSQL, $SQL) or die(mysql_error());  } mysql_select_db($database_SQL, $SQL); $query_Recordset1 = "SELECT * FROM users"; $Recordset1 = mysql_query($query_Recordset1, $SQL) or die(mysql_error()); $row_Recordset1 = mysql_fetch_assoc($Recordset1); $totalRows_Recordset1 = mysql_num_rows($Recordset1);

?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) {   session_start(); }

$loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) {   $_SESSION['sessionid'] = $_GET['accesscheck']; }

if (isset($_POST['username'])) {   $loginUsername=$_POST['username'];   $password=md5($_POST['password']);   $MM_fldUserAuthorization = "";   $MM_redirectLoginSuccess = "mailer.php";   $MM_redirectLoginFailed = "reg-eng.html";   $MM_redirecttoReferrer = true;   mysql_select_db($database_SQL, $SQL);

$LoginRS__query=sprintf("SELECT nickname, password FROM users WHERE nickname=%s AND password=%s",     GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $SQL) or die(mysql_error());   $row = mysql_fetch_array($LoginRS);   $loginFoundUser = mysql_num_rows($LoginRS);    if($loginFoundUser>0){    $_SESSION['nickname']= $row['nickname'];

if (isset($_SESSION['sessionid']) && true) {       $MM_redirectLoginSuccess = $_SESSION['sessionid'];     }     header("Location: " . $MM_redirectLoginSuccess );   }   else {     header("Location: ". $MM_redirectLoginFailed );   } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) {   session_start(); }

$loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) {   $_SESSION['PrevUrl'] = $_GET['accesscheck']; }

if (isset($_POST['username'])) {   $loginUsername=$_POST['username'];   $password=md5($_POST['password']);   $MM_fldUserAuthorization = "";   $MM_redirectLoginSuccess = "mailer.php";   $MM_redirectLoginFailed = "reg-ger.html";   $MM_redirecttoReferrer = true;   mysql_select_db($database_SQL, $SQL);

$LoginRS__query=sprintf("SELECT nickname, password FROM users WHERE nickname=%s AND password=%s",     GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $SQL) or die(mysql_error());   $loginFoundUser = mysql_num_rows($LoginRS);   if ($loginFoundUser) {      $loginStrGroup = "";

if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}

//declare two session variables and assign them     $_SESSION['MM_Username'] = $loginUsername;     $_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && true) {       $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];     }     header("Location: " . $MM_redirectLoginSuccess );   }   else {     header("Location: ". $MM_redirectLoginFailed );   } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) {   session_start(); }

$loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) {   $_SESSION['PrevUrl'] = $_GET['accesscheck']; }

if (isset($_POST['username'])) {   $loginUsername=$_POST['username'];   $password=md5($_POST['password']);   $MM_fldUserAuthorization = "";   $MM_redirectLoginSuccess = "mailer.php";   $MM_redirectLoginFailed = "reg-eng.html";   $MM_redirecttoReferrer = false;   mysql_select_db($database_SQL, $SQL);

$LoginRS__query=sprintf("SELECT nickname, password FROM users WHERE nickname=%s AND password=%s",     GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $SQL) or die(mysql_error());   $loginFoundUser = mysql_num_rows($LoginRS);   if ($loginFoundUser) {      $loginStrGroup = "";

if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}

//declare two session variables and assign them     $_SESSION['MM_Username'] = $loginUsername;     $_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {       $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];     }     header("Location: " . $MM_redirectLoginSuccess );   }   else {     header("Location: ". $MM_redirectLoginFailed );   } } ?> <?php // *** Validate request to login to this site. if (!isset($_SESSION)) {   session_start(); }

$loginFormAction = $_SERVER['PHP_SELF']; if (isset($_GET['accesscheck'])) {   $_SESSION['PrevUrl'] = $_GET['accesscheck']; }

if (isset($_POST['username'])) {   $loginUsername=$_POST['username'];   $password=md5($_POST['password']);   $MM_fldUserAuthorization = "";   $MM_redirectLoginSuccess = "mailer.php";   $MM_redirectLoginFailed = "reg-eng.html";   $MM_redirecttoReferrer = false;   mysql_select_db($database_SQL, $SQL);

$LoginRS__query=sprintf("SELECT nickname, password FROM users WHERE nickname=%s AND password=%s",     GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $SQL) or die(mysql_error());   $loginFoundUser = mysql_num_rows($LoginRS);   if ($loginFoundUser) {      $loginStrGroup = "";

if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}

//declare two session variables and assign them     $_SESSION['MM_Username'] = $loginUsername;     $_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {       $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];     }     header("Location: " . $MM_redirectLoginSuccess );   }   else {     header("Location: ". $MM_redirectLoginFailed );   } } if (isset($_POST['nubeagree']) AND $_POST['nubeagree'] != 1)     {         echo "gesetzt";     } else if (isset($_POST['nubeagree']) != 0)     {         echo "nicht gesetzt";     } ?> <!doctype html>

Und hier mein Mailer dazu:

<?php  // ======= Konfiguration:

$mailTo = 'danny2810@outlook.de'; $mailFrom = '"FormMailer" xxx@outlook.de'; $mailSubject    = 'Neue Registration'; $returnPage = 'http://index.html'; $returnErrorPage = 'http://Testfehler.html'; $mailText = "";

// ======= Text der Mail aus den Formularfeldern erstellen:

// Wenn Daten mit method="post" versendet wurden: if(isset($_POST)) {    // alle Formularfelder der Reihe nach durchgehen:    while(list($strName,$value) = each($_POST)) {       // Wenn der Feldwert aus mehreren Werten besteht:       // (z.B. <select multiple>)       if(is_array($value)) {

$mailText .= $name . ":\n";

foreach($value as $value_array) {

$mailText .= "   " . $value . "\n";           } // ENDE: foreach       } // ENDE: if

else {

$mailText .= $name . ": " . $value . "\n";       } // ENDE: else    } // ENDE: foreach } // if

// ======= Korrekturen vor dem Mailversand

if(get_magic_quotes_gpc()) {      // eventuell eingefügte Backslashes entfernen      $mailtext = stripslashes($mailtext);  }

// ======= Mailversand

$mailSent = @mail($mailTo, $mailSubject, $mailText, "From: ".$mailFrom);

// ======= Return-Seite an den Browser senden

// Wenn der Mailversand erfolgreich war: if($mailSent == TRUE) {    // Seite "Formular verarbeitet" senden:    header("Location: " . $returnPage); } // Wenn die Mail nicht versendet werden konnte: else {    // Seite "Fehler aufgetreten" senden:    header("Location: " . $returnErrorPage); }

// ======= Ende

exit();

?>

Vielen Dank schonmal für eure Hilfe

  1. $mailText != $mailtext (case sensitive)

    Wobei es daran eigentlich nicht liegen kann dass gar nichts ankommt. Die Schreibweise betrifft nur dein stripslashes.
    $mailText "dumpen" würde helfen, hast du das mal versucht? Dann siehst du schnell was wirklich in deinen Variablen steht und was nicht.

    Hier der PHP-Code für den Eintrag in die Datenbank:

    Den hätte ich nicht gepostet, das funktioniert ja. Aber nachdem er schon mal da ist gibts jetzt ein paar ungeforderte Tips :-)

    GetSQLValueString($_POST['id'], "int")

    Warum den Umweg über die Funktion? Wenn die Daten nicht übergeben sind sollte dein Script einen Fehler bringen statt irgendwas einzutragen. Wenn es schon irgendwas einträgt, vielleicht eher einen Leerwert statt "text"?

    if(isset($_POST))

    Ist das wirklich nur im Fall von POST gesetzt? Ich hätte erwartet $_POST gibts auch bei GET, nur ist es dann eben leer?

    if(get_magic_quotes_gpc()) {
         // eventuell eingefügte Backslashes entfernen
         $mailtext = stripslashes($mailtext);

    Aber doch bitte nicht auf den fertigen Mailtext. Sowas wendet man auf die Einzelwerte an, noch bevor man sie verwendet.
    Ich würde gleich zu Beginn des Scripts alle $_POST Inhalte bearbeiten.

    1. Hallo Encoder,
      danke dir für dein Antwort. Ich muß dazu sagen, Ich bin ned der Profi vorm Herrn :D
      Eher der Anfänger vom Anfänger vom Anfänger. Aber sei es drum.

      Der Witz an der Sache ist, beides einzeln funktioniert ja ohne Probleme nur halt nicht im zusammenspiel. Und das ist es, was ich ned begreife.

      Viel Grüße
      Danny

      1. Ich habs mir nochmal durchgesehen.
        Ich ging davon aus dass du alle Felder schon so angibst wie sie wirklich heißen. Ist in der Fülle an Code etwas schwer nachzuvollziehen.

        Das hier
        $mailText .= $name . ": " . $value . "\n";
        nutzt $name das nirgends defniert ist. Meinst du hier $strName?
        Aber auch dann sollte nicht "nichts" in der Mail stehen sondern wenigstens der $value und der Doppelpunkt.

        Setz dir doch wirklich mal ein
        print $mailText . "\n\n";
        hinter jede Zuweisung und schau dir an was passiert.

        Der Witz an der Sache ist, beides einzeln funktioniert

        Das wundert mich jetzt aber wirklich.
        Steht in $_POST zum Zeitpunkt der Mailerstellung schon noch was drin? Auch das lässt sich mit einer Ausgabe zur Kontrolle nachprüfen.

        Du musst das von vorne her angehen. Wenn in einer Variablen nichts steht, prüfe nach warum nichts reingeschrieben wird. Das heißt prüfe nach ob das was reingeschrieben werden soll auch wirklich gefüllt ist. Prüfe ob eine Schleife überhaupt durchlaufen wird, oder ob sie vielleicht gar nie betreten wird, obwohl du denkst sie wird es... usw.
        Sieh dir an was der Reihe nach in deinem Mailtext landet und was tatsächlich verschickt wird.
        Kommt der Code überhaupt in if(isset($_POST))? Kommt er in das while, wenn ja wie oft und was tut er da genau?

        Lass dir das alles mit print ausgeben. Diese Infos bringen dich schneller zur Lösung als jedes Raten aufgrund deines Codes.

        1. Tach!

          Lass dir das alles mit print ausgeben. Diese Infos bringen dich schneller zur Lösung als jedes Raten aufgrund deines Codes.

          Noch besser ist var_dump(), damit hat man immer eine Ausgabe. print und echo geben bei einigen Werten Leerstrings aus, die sieht man ja nicht.

          dedlfix.

  2. Tach!

    Ich habe ein Registrierungsformular mit php erstellt. Der User soll sich hier registrieren können (was auch klappt --> Eintrag in die Datenbank) und gleichzeitig soll eine an den Admin rausgehen, das sich wer registriert hat. Soweit so gut. Eintrag in die Datenbank klappt, Mail geht auch raus. Nur das Problem ist, das in der Mail nix drinsteht. :-(

    Dann wirst du wohl nichts reingeschrieben haben. Kontrollier doch mal deine Variableninhalte mit var_dump(...).

    Ich würde mir die Mail gerne so gestalten, das ich nur gewisse Felder per Mail bekomme. Aber wie ich das auch drehe und wende, ich bekomme noch graue Haare.
    Könnt ihr mir vielleicht helfen?

    Ja, nee, aber nicht mit Tonnen von Code. Zum Programmieren gehört auch unweigerlich das Debuggen. Wenn du diese Fähigkeiten noch nicht hast, musst du sie dir erwerben. Du musst nachvollziehen können, was genau passiert (welche Code-Zweige abgearbeitet werden oder nicht) und warum (aufgrund welcher Werte). Wenn du dann genaue Werte hast und dir trotzdem nciht erklären kannst, warum etwas (nicht) passiert, dann frag nochmal. Oder aber auch, wenn dir beim Debuggen etwas unklar ist. Aber mir scheint, dass das nicht dein Code ist. Der kümmert sich ja noch um die normalerweise schon längst ausgestorbenen Magic Quotes.

    dedlfix.

  3. Nabend :-)

    wo meint ihr jetzt?
    im "mailer" oder in der "Datenbank-Einspielung?"

    1. Tach!

      wo meint ihr jetzt?
      im "mailer" oder in der "Datenbank-Einspielung?"

      Worauf genau beziehst du dich jetzt? Debugging jedenfalls fängt man da an, wo es nicht mehr funktioniert und arbeitet sich rückwärts zur Fehlerquelle durch. Zumindest ist das eine zielführende Vorgehensweise, wenn man wie üblicherweise in PHP keinen Debugger für das schrittweise Ausführen zur Verfügung hat.

      dedlfix.