Zur Navigation

captcha session einbinden [3]

21 andehrl

ich bekomme jetzt diese mitteilung auf einer leeren seite angezeigt

No database selected


mein code schaut so aus

session_start();
$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 {

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();
   }
}

10.12.2010 18:51

22 Jörg

Ja, diese SQL-Fehlermeldung besagt, dass du vorher noch eine Datenbank auswählen musst. Das sollte wohl hier geschehen:

mysql_select_db($database_Registrierung, $Registrierung);

Möglicherweise sind die dort angegebenen Variablen nicht (richtig) definiert.

Mal davon ab überschreibst du mit dem zweiten
$error = '';
die vorangegangenen Fehlermeldungen.

11.12.2010 00:15

23 andehrl

Zitat von Jörg
Ja, diese SQL-Fehlermeldung besagt, dass du vorher noch eine Datenbank auswählen musst. Das sollte wohl hier geschehen:

mysql_select_db($database_Registrierung, $Registrierung);

Möglicherweise sind die dort angegebenen Variablen nicht (richtig) definiert.

aber vorher hat es doch funktionoert, mit denselben variablen?



Mal davon ab überschreibst du mit dem zweiten
$error = '';
die vorangegangenen Fehlermeldungen.

dann muss ich das zweite $error löschen?

11.12.2010 02:03

24 Jörg

Zitat von andehrl
Zitat von Jörg
Ja, diese SQL-Fehlermeldung besagt, dass du vorher noch eine Datenbank auswählen musst. Das sollte wohl hier geschehen:

mysql_select_db($database_Registrierung, $Registrierung);

Möglicherweise sind die dort angegebenen Variablen nicht (richtig) definiert.

aber vorher hat es doch funktionoert, mit denselben variablen?

In dem letzten von dir geposteten Codeabschnitt ist nicht ersichtlich, ob bzw. wie diese Variablen definiert sind.

Vorger hattest du mal so ein Include drin:

require_once('Connections/Registrierung.php');

... dort sind diese vermutlich definiert. Ist diese Zeile denn noch vorhanden?


Mal davon ab überschreibst du mit dem zweiten
$error = '';
die vorangegangenen Fehlermeldungen.

dann muss ich das zweite $error löschen?

Die zweite Initialisierung von $error mit einem leeren String solltest du löschen, ja - sonst sind die Fehler-Prüfungen vorher für die Katz.

11.12.2010 12:14

25 andehrl


In dem letzten von dir geposteten Codeabschnitt ist nicht ersichtlich, ob bzw. wie diese Variablen definiert sind.

Vorger hattest du mal so ein Include drin:

require_once('Connections/Registrierung.php');

... dort sind diese vermutlich definiert. Ist diese Zeile denn noch vorhanden?


ja, ganz am anfang des php-codes:

<?php
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']);
}
session_start();
$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 {

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();
   }
}

11.12.2010 12:55

26 Jörg

Dann musst du eben überprüfen, ob der Datenbankaufbau in Connections/Registrierung.php korrekt ist (wie die Fehlermeldung nahelegt, ist das nicht der Fall) und diesen gegebenenfalls korrigieren.

11.12.2010 13:14

27 andehrl

Zitat von Jörg
Dann musst du eben überprüfen, ob der Datenbankaufbau in Connections/Registrierung.php korrekt ist (wie die Fehlermeldung nahelegt, ist das nicht der Fall) und diesen gegebenenfalls korrigieren.

wenn ich diesen code anwende bekomme ich zwar immer die fehlermeldung 'Der Sicherheitscode ist falsch' auf der seite angezeigt aber insgesamt funktioniert es und die datenbankanbindung für die nachfolgende abfrage ist gegeben. das müsste doch bedeuten, dass der Datenbankaufbau in Connections/Registrierung.php korrekt ist?

$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error = 'Der Sicherheitscode ist falsch';
} else {



wenn ich den code dann in diesen ändere:

$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 {

bekomme ich die fehlermeldung der fehlenden datenbankanbindung???

11.12.2010 15:06 | geändert: 11.12.2010 15:07

28 Jörg

Wenn du mal deinen Code sauber einrückst, siehst du, dass da noch eine Klammer fehlt. Möglicherweise sieht der Parser das letzte mysql_error() dadurch irgendwie außerhalb der Klammer, in welcher die Datenbank ausgewählt wird.

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 {
        if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
            // LÖSCHEN:
            $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();
        // hier fehlt eine Klammer!
    }
}

Irgenwo hast du die Klammer dann wohl später oder vorher (an unpassender Stelle) geschlossen, sonst hätte PHP einen Fatal Error ausgeworfen. Die Klammern solltest du deswegen mal durch gehen und korrekt setzen (Einrücken von Code kann dabei wie gesagt helfen)

Solange du nur eine Datenbank verwendest, wäre es auch keine schlechte Idee, mysql_select_db() gleich nach dem Include der Registrierung.php aufzurufen, dann kommt es nicht zu solchen Problemen

11.12.2010 16:41 | geändert: 11.12.2010 16:44

29 andehrl

also ich hab es jetzt auf diese weise gemacht. ist aus deiner sicht warscheinlich sehr globig, aber so bekomme ich beim aufrufen der seite keine fehlermeldung angezeigt:


session_start();
$error = '';
if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] == $_SESSION['']) {
    $error = '';
} else {
     if (isset($_SESSION['captcha_spam']) && $_POST["sicherheitscode"] != $_SESSION['captcha_spam']) {
    $error = 'Der Sicherheitscode ist falsch';
} else {

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {

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();



das eingabefeld zum abgleich habe dann als erforderlich angegeben, dass ich das formular nicht ohne eintrag im feld abschicken kann.

<span id="sprytextfield3">
            <input type="text" name="sicherheitscode" size="19" />
            <span class="textfieldRequiredMsg">Es muss ein Wert angegeben werden.</span></span>

den hinweistext ändere ich natürlich noch.

11.12.2010 16:46

Beitrag schreiben (als Gast)

Beim Verfassen des Beitrages bitte die Forenregeln beachten.





[BBCode-Hilfe]