Zur Navigation

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

21 Jörg Kruse

Diese durch mysql_error() ausgegebenen Fehler hatten wir ja schon in Beitrag 14:

No database selectedNo database selectedDuplicate entry 'andehrl' for key 'nutzername'

Hier wird die Datenbank ausgewählt:

mysql_select_db($database_Registrierung, $Registrierung);

Das muss vor der ersten Query erfolgen. Die befindet sich hier:

$result = mysql_query("SELECT id FROM login WHERE nutzername = '" . mysql_real_escape_string($_POST['nutzername']) . "'");

Also die Datenbankauswahl nach oben verschieben, dann verschwinden diese Fehler.

30.10.2010 12:59 | geändert: 30.10.2010 12:59

22 andehrl

ich habe die datenbankauswahl nach oben verschoben. sieht jetzt so aus:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
mysql_select_db($database_Registrierung, $Registrierung);
$Result1 = mysql_query($insertSQL, $Registrierung) or die(mysql_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"));
}
  
  

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

?>


wenn ich jetzt versuche mich zu registrieren bekomme ich angezeigt, dass die query leer ist:

Query was empty

30.10.2010 22:40

23 Jörg Kruse

Nur das mysql_select_db() nach oben!

Es geht doch nur darum, dass schon für die Query $result eine Datenbank ausgewählt sein muss. Und das geschieht mit mysql_select_db() für alle weiteren Queries. Bevor irgendeine Query gestellt werden kann, muss eine Datenbankverbindung hergestellt und eine Datenbank ausgewählt werden.

Die Query $Result1 muss aber an Ort und Stelle bleiben - die macht doch nur dort nach der Definition von $insertSQL Sinn.

30.10.2010 22:54 | geändert: 30.10.2010 22:54

24 andehrl

wenn ich nur mysql_select_db() nach oben schiebe bekomme ich wieder diese fehlermeldung:

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

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 47
Unknown column 'id' in 'field list'Unknown column 'id' in 'field list'Duplicate entry 'andehrl' for key 'nutzername'


der code schaut jetzt so aus:

f ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "einfache registrierung")) {
$error = '';
mysql_select_db($database_Registrierung, $Registrierung);
$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"));
}
  
  $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));
}

zeile 43 und 47 sind fett markiert.

30.10.2010 23:14

25 Jörg Kruse

wenn ich nur mysql_select_db() nach oben schiebe bekomme ich wieder diese fehlermeldung:

Das ist eine neue Fehlermeldung:

Unknown column 'id' in 'field list'Unknown column 'id' in 'field list'

Die Datenbank konnte nun ausgewählt werden :) - aber das Datenfeld `id`gibt es nicht in der Tabelle login. Im Prinzip kannst du da ein beliebiges nehmen (ich kenne die Struktur der Tabelle nicht). Das sollte auf jeden Fall funktionieren:

$result = mysql_query("SELECT nutzername 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 nutzername FROM login WHERE mail = '" . mysql_real_escape_string($_POST['mail']) . "'");

30.10.2010 23:21 | geändert: 30.10.2010 23:23

26 andehrl

ich habe in diesem code "id" in "nutzername" und "mail" umgeändert


$result = mysql_query("SELECT id FROM login WHERE nutzername = '" 
 
$result = mysql_query("SELECT id FROM login WHERE mail = '" . 


$result = mysql_query("SELECT nutzername FROM login WHERE nutzername = '" 
 
$result = mysql_query("SELECT mail FROM login WHERE mail = '" . 

ich bekomme jetzt bei einer eingabe eines schon vorhandenen namens auf einer leeren seite diesen text angezeigt:

Dieser Name ist bereits vergeben.Query was empty

wenn bei der registrierung kein duplikat vorliegt werde ich wie gewünscht in den loginbereich weitergeleitet. es funktioniert also.

wie kann ich bei der textanzeige den teil "Query was empty" weglassen? und eigentlich wollte ich dass der hinweistext auf der registrierungsseite angezeigt wird auf der der user seine angaben macht. ist das sehr umständlich?

30.10.2010 23:29

27 Jörg Kruse

Query was empty

Das kommt durch die Query $Result1 - die Schleifen unten sind noch falsch angeordnet. Die Query und die anschließende Weiterleitung mit header() muss alles noch in den else Abschnitt rein:

} 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"));
  
  $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));
}
}

und eigentlich wollte ich dass der hinweistext auf der registrierungsseite angezeigt wird auf der der user seine angaben macht. ist das sehr umständlich?

Ist das der HTML-Teil der unterhalb angezeigt wird?

30.10.2010 23:50

28 andehrl

Ist das der HTML-Teil der unterhalb angezeigt wird?

ja genau


ich hab die klammern umgesetzt und bekomme jetzt wieder fehlermeldungen:

Dieser Name ist bereits vergeben.
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php:54) in /is/htdocs/wp10548565_XUUKREW8G9/www/99aRegistrierungEinfach.php on line 78

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


mein code schaut jetzt so aus, ich habe zeile 54, 78 und 113 fett markiert:

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 Name ist bereits vergeben.';
} 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.';
    }
	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"));
  
  $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 );
  }
}
?>

31.10.2010 00:12

29 Jörg Kruse

Dann ersetze diesen Abschnitt mal ...:
if ($error != '') {
    echo $error;
} else {
... durch diese Zeile:
if ($error == "") {

Die Fehlermeldung kannst du dann an beliebiger Stelle im HTML-Code unten ausgeben:

<?php
if ($error != '') { 
    echo '<p>' . $error . '</p>';
}
?>

Dann sollten auch die session und header Fehlermeldungen wegfallen

31.10.2010 00:30

30 andehrl

ich habe
if ($error != '') {
    echo $error;
} else {
... durch
if ($error == "") {
ersetzt.

sieht jetzt also so aus:
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));
}
}

?>
<?php

jetzt passiert gar nichts mehr. ich werde nur weitergeleitet auf die seite des fehlgeschlagenen logins:
$MM_redirectLoginFailed = "8bMeinkontologinfehlgeschlagen.php";

31.10.2010 00:55