Zur Navigation

"Duplicate entry" in der Eingabeseite mit entsprechendem text anzeigen [2]

11 andehrl

die seite läd jetzt fehlerlos hoch. wenn ich eine registrierung abschicke bekomme ich allerdings diese fehlermeldungen über der ürsprünglich geladenen seite angezeigt:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 42

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 46

Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 68

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 75

Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 107


hab die klammer nach unten gesetzt (fett). zeile 42, 46, 68, 75 und 107 sind auch fett markiert:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM Registrierung WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM Registrierung WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
}
if ($error != '') {
    echo $error;
} else {
    $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"));

  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}
}
?>
<?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['nutzername'])) {
  $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 );
  }
}
?>

29.10.2010 21:52

12 Jörg Kruse

Bezüglich der ersten beiden Fehlermeldungen kannst du dir nach den Queries den genauen SQL-Fehler mit mysql_error() ausgeben lassen:

if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM Registrierung WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
    echo mysql_error();
}
echo mysql_error();

Die anderen Fehler sind wahrscheinlich Folgefehler

29.10.2010 22:05 | geändert: 29.10.2010 22:06

13 andehrl

bin etas überfordert und sehr unsicher ob ich dich richtig verstehe. ich hab den code jetzt so verändert:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM Registrierung WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM Registrierung WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
	echo mysql_error();
}
echo mysql_error();
} else {
    $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"));

  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}


ich bekomme jetzt wieder eine leere seite mit diesen fehlermeldungen. zeile 68 ist weggefallen.

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 42

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 46
No database selectedNo database selected
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 75

Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 107

29.10.2010 22:46

14 Jörg Kruse

Diese beiden Fehlermeldungen werden durch mysql_error() ausgegeben:

No database selectedNo database selected

Das heißt, es wurde noch keine Datenbank ausgewählt.

Das passiert in dieser Zeile:

mysql_select_db($database_Registrierung, $Registrierung);

Wenn du diese entsprechend nach oben schiebst, sollten die Fehlermeldungen verschwinden (oder andere auftreten ;))

29.10.2010 23:17

15 andehrl

ich muss peinlicher weise gestehen, dass ich die tabelle der datenbank im code falsch benannt habe. entschuldige bitte. nach der änderung erhalte ich jetzt nur noch diese fehlermeldung:

Column 'nutzername' cannot be null

der code schaut so aus:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
	echo mysql_error();
}
echo mysql_error();
} else {
    $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"));

  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}

?>
<?php

29.10.2010 23:31

16 Jörg Kruse

Das kommt aber wohl von diesem mysql_error():

$Result1 = mysql_query($insertSQL, $Registrierung) or die(mysql_error());

Das NULL wird von der von dir verwendeten Funktion GetSQLValueString() erzeugt:

GetSQLValueString($_POST['nutzername'], "text"),

Siehe Funktionsdefinition:

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

Wenn du deise Funktion in dieser Form weiter verwenden möchtest, musst du in den entsprechenden Datenfeldern NULL zulassen

30.10.2010 00:11 | geändert: 30.10.2010 00:12

17 andehrl

ich habe bei den entsprechenden felder in der datenbank den wert null zugelassen. jetzt ist es allerdings so, dass die registrierung übersprungen wird und der user gleich in den loginbereich weitergeleitet wird ohne irgendwelche angaben machen zu müssen oder konnen.

30.10.2010 00:26

18 Jörg Kruse

Dieser Codeabschnitt fehlt!

if ($error != '') {
    echo $error;

... und unten dann wieder die Klammer schließen...

30.10.2010 00:37

19 andehrl

da fehlt wieder die klammer zu. bekomme diese fehlermedung:

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

ich verstehe aber ehrlich gesagt nichtwo die klammer fehlt:

ich habe das fehlende segment hier in den code eingetragen und

echo mysql_error();

überschrieben. das ganze schaut jetzt so aus:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
}
if ($error != '') {
    echo $error;
} else {
    $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"));

  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}

?>
<?php

30.10.2010 01:03 | geändert: 30.10.2010 01:03

20 andehrl

ich habe die klammer unten am ende des wie ich es verstehe relevanten codes geschlossen und "echo mysql_error();" wieder eingefügt. sieht jetzt so aus:


if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
	echo mysql_error();
}
echo mysql_error();
if ($error != '') {
    echo $error;
} else {
    $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"));
}
  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}


die seite läd jetzt wieder fehlerlos hoch. gebe ich registrierungsdaten ein die noch nicht in der datenbank hinterlegt sind erhalte ich diese fehlermeldung über dem layout der registrierungsseite:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 42

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 46
No database selectedNo database selected
Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 70

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 77

Warning: Cannot modify header information - headers already sent by (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:42) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 109


gebe ich registrierungsdaten ein die in der datenbank bereits existieren bekomme ich diese meldung auf einer leeren seite:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 42

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 46
No database selectedNo database selectedDuplicate entry 'andehrl' for key 'nutzername'




zeile 42 & 46 beschreiben diesen code:
if (mysql_num_rows($result) > 0) {


in zeile 70 steht dieser code:
header(sprintf("Location: %s", $insertGoTo));


zeile 77 ist diese hier
session_start();


und 109 schreibt diesen code:
header("Location: " . $MM_redirectLoginSuccess );






insgesamt schaut der code so aus. ich habe die codezeilen der fehlermeldung nochmal fett markiert:

<?php require_once('Connections/Registrierung.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"] == "einfache registrierung")) {
$error = '';
$result = mysql_query("SELECT id FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");
if (mysql_num_rows($result) > 0) {
    $error = 'Dieser Name ist bereits vergeben.';
} else {
    $result = mysql_query("SELECT id FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");
    if (mysql_num_rows($result) > 0) {
        $error = 'Diese Emailadresse ist bereits vergeben.';
    }
	echo mysql_error();
}
echo mysql_error();
if ($error != '') {
    echo $error;
} else {
    $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"));
}
  mysql_select_db($database_Registrierung, $Registrierung);
  $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));
}

?>
<?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['nutzername'])) {
  $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 );
  }
}
?>

30.10.2010 12:18