Zur Navigation

captcha session einbinden [2]

11 andehrl

Zitat von Jörg
ich habe doch am anfang des codes "<?php"

Ja und genau deswegen ist das zweite "<?php" in Zeile 5 überflüssig - du befindest dich dort bereits im PHP-Modus.

dann müsste ich doch alle "<?php" und "?>" die dazwischen noch auftauchen löschen können. wenn ich das mache bekomme ich aber eine leere seite.


wenn ich nur "<?php" in zeile 5 lösche bekomme ich diese fehlermeldung:

Parse error: syntax error, unexpected $end in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 497

09.12.2010 23:26

12 Jörg Kruse

dann müsste ich doch alle "<?php" und "?>" die dazwischen noch auftauchen löschen können. wenn ich das mache bekomme ich aber eine leere seite.

Dann hast du möglicherweise welche gelöscht, die notwendig sind, um vom PHP- zum HTML-Modus und wieder zurückzuschalten. Löschen solltest du nur den "<?php", der falsch gesetzt war - du hast an der genannten Stelle ja nicht in den PHP-Modus wechseln müssen, weil du dich schon diesem befandest

Der Wechsel von HTML und PHP gehört schon zu den Grundlagen, die man verstehen sollte; auf dieser Seite ist dieser vielleicht etwas verständlicher erklärt:

http://www.php-kurs.info/tutorial-html_und_php_mischen.html

wenn ich nur "<?php" in zeile 5 lösche bekomme ich diese fehlermeldung:

Parse error: syntax error, unexpected $end in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 497

Ich weiß nicht, welche Zeile 497 ist, aber vor der vorletzten Zeile fehlt ein "<?php"

10.12.2010 00:07

13 andehrl

Ich weiß nicht, welche Zeile 497 ist, aber vor der vorletzten Zeile fehlt ein "<?php"

497 war die erste zeile nach der letzten, sorry.



ich habe jetzt den php teil zusammengefasst:

<?php
session_start();
if(isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam']){
unset($_SESSION['captcha_spam']);
require_once('Connections/Registrierung.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"] == "einfache registrierung")) {
$error = '';
mysql_select_db($database_Registrierung, $Registrierung);
$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
} else {
    $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
    }
	echo mysql_error();
}
echo mysql_error();

if ($error == "") {
    $insertSQL = sprintf("INSERT INTO login (vornachname, nutzername, passwort, mail, handy) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['vornachname'], "text"),
                       GetSQLValueString($_POST['nutzername'], "text"),
                       GetSQLValueString($_POST['passwort'], "text"),
                       GetSQLValueString($_POST['mail'], "text"),
                       GetSQLValueString($_POST['handy'], "text"));
  
  $Result1 = mysql_query($insertSQL, $Registrierung) or die(mysql_error());

  $insertGoTo = "8cSieSindEingeloggt.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  header(sprintf("Location: %s", $insertGoTo));
}
}



// *** 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['nutzername']) && empty($error)) {
  $loginUsername=$_POST['nutzername'];
  $password=$_POST['passwort'];
  $MM_fldUserAuthorization = "";
  $MM_redirectLoginSuccess = "8cSieSindEingeloggt.php";
  $MM_redirectLoginFailed = "8bMeinkontologinfehlgeschlagen.php";
  $MM_redirecttoReferrer = true;
  mysql_select_db($database_Registrierung, $Registrierung);
  
  $LoginRS__query=sprintf("SELECT nutzername, passwort FROM login WHERE nutzername=%s AND passwort=%s",
    GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
   
  $LoginRS = mysql_query($LoginRS__query, $Registrierung) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
     $loginStrGroup = "";
    
    //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 );
  }
}
?>

und zum schluss noch die klammer geschlossen:

<?php
}

?>

ich bekomme dann eine leere, weisse seite angeszeigt wenn ich die seite hochlade oder im netz den link anklicke.

10.12.2010 00:20

14 Jörg Kruse

Mit "Einbau ins Script" ist wohl nur die Seite gemeint, welche nach dem Absenden des Formulars aufgerufen wird - im Gegensatz zu "Einbau ins Formular". Bei dir ist das wohl eine einzelne Datei. Dann geht das so natürlich nicht.

Du kannst versuchen die Bedingung so abzuändern, dass entweder der übertragene Sicherheitscode mit dem Wert übereinstimmt oder kein Formular abgesendet wurde

if (! isset($_POST["MM_insert"]) OR (isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])) {

10.12.2010 00:39

15 andehrl

if (! isset($_POST["MM_insert"]) OR (isset($_SESSION['captcha_spam']) AND $_POST["sicherheitscode"] == $_SESSION['captcha_spam'])) {
[/quote]

das funktioniert wenn die generierten zeichen richtig in das eingabefeld gegeben werden. wenn die zeichen nicht übereinstimmen bekomme ich wieder eine leere seite angezeigt. wie kann ich das so ändern, dass die ürsprüngliche registrierungsseite angezeigt wird und dem nutzer ein schriftzug mitteilt, dass die eingabe nicht übereingestimmt hat mit den angezeigten zeichen.

10.12.2010 00:58

16 Jörg Kruse

das funktioniert wenn die generierten zeichen richtig in das eingabefeld gegeben werden. wenn die zeichen nicht übereinstimmen bekomme ich wieder eine leere seite angezeigt.

Ja, mehr leistet dieses Script auch nicht.

wie kann ich das so ändern, dass die ürsprüngliche registrierungsseite angezeigt wird und dem nutzer ein schriftzug mitteilt, dass die eingabe nicht übereingestimmt hat mit den angezeigten zeichen.

Dazu müsstest du das ganze an die Logik deines Scriptes anpassen. Wenn es dort einen Fehler gibt, der die Registrierung verhindert, weist du ja der Variable $error eine Fehlermeldung zu. Wenn $error leer ist, erfolgt dann die Registrierung, andernfalls werden der Fehler und das Formular angezeigt. Dementsprechend brauchst du $error auch nur eine passende Fehlermeldung zuweisen, wenn ein falscher Sicherheitscode übermittelt wurde.

10.12.2010 10:12 | geändert: 10.12.2010 10:13

17 andehrl

das ist ähnlich wie weiter unten in meinem script:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
mysql_select_db($database_Registrierung, $Registrierung);
$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
} else {
    $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
    }
	echo mysql_error();
}
echo mysql_error();


if ($error == "") {

allerdings gibt es bei dem captcha keinen datanbankvergleich. hast du vieleicht eine entsprechende vorlage an der ich mich orientieren kann. aus eigenen stücken bin ich nicht in der lage das zu schreiben.

10.12.2010 14:33 | geändert: 10.12.2010 14:49

18 Jörg Kruse

Du benötigst dafür keine Datenbankabfrage - du musst nur den per POST übermittelten Wert mit dem in der Session gespeicherten Wert vergleichen - so wie das das Script im Prinzip ja schon macht

So in etwa würde ich vorgehen:

$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error = 'Der Sicherheitscode ist falsch';
} else {
    mysql_select_db($database_Registrierung, $Registrierung);
    $result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
    } else {
        $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
        if (mysql_num_rows($result) > 0) {
            $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
        }
    }
}

10.12.2010 16:03 | geändert: 10.12.2010 16:04

19 andehrl

das funktioniert, allerdings wird mir beim hochladen oder aufrufen der seite ohne ausgefüllte felder sofort die fehlermeldung angezeigt:

$error = 'Der Sicherheitscode ist falsch';

10.12.2010 17:14

20 Jörg Kruse

Probier's mal so:

$error = '';
if (isset($_POST['nutzername']) && ! isset($_SESSION['captcha_spam'], $_POST["sicherheitscode"])) {
    $error = 'Sicherheitscode wurde nicht übertragen';
} else {
    if (isset($_SESSION['captcha_spam'], $_POST["sicherheitscode"]) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
        $error = 'Der Sicherheitscode ist falsch';
    } else {
        mysql_select_db($database_Registrierung, $Registrierung);
        $result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
        if (mysql_num_rows($result) > 0) {
            $error = 'Dieser Nutzername ist bereits vergeben. Bitte versuchen Sie es mit einem anderen Namen.';
        } else {
            $result = mysql_query("SELECT mail FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
            if (mysql_num_rows($result) > 0) {
                $error = 'Diese Emailadresse ist bereits vergeben. Bitte versuchen Sie es mit einer anderen E-Mail.';
            }
        }
    }
}

10.12.2010 18:06