Ein Wort in SQL suchen

Lerne am besten mit den Fehlermeldungen umzugehen, denn die sind eigentlich immer recht aussagekräftig:
unexpectet T-else , also, ein else steht da wo keins sein darf. Die Zeile gibt er auch mit an

Deine if's und else's passen so logisch nicht zusammen (es kommen 2 elses hintereinander). Ausserdem ist der Aufbau ungünstig: Wenn eine der oberen querys erfolgreiche ist, also mail oder nick schon vorhanden, ist es nicht mehr nötig noch das ganze script abzuarbeiten.

Am besten du schiebst die Weiterleitungen weiter nach oben, zB
PHP:
while($row = mysql_fetch_object($ergebnis))
   if ($row->nick == $nick) {
    $fehler = 1; 
   header("Location: ../index.php?nick_error=1");
} // dasselbe bei emailerror

so wie du das geschrieben hast, läufst du schnell Gefahr, dass das script unübersichtlich wird.
Nochwas: Du könntest statt der 2 queries auch eine machen:

PHP:
<?
    $sql="Select
                  tr_user.user_nick, benutzerdaten.email
              from
                  tr_user, benutzerdaten
              where
                 tr_user.id = benutzerdaten.id;";  // hier musst du die Spalten wählen, über die die Spalten miteinander verknüpft sind  
                                                               
$res=mysql_query ($sql) OR die();
while($row=mysql_fetch_assoc($res)) {
      if($row['email']==$email)
            header(location:"...");
      if($row['nick']==$nick)
            header(location:".....");
}
?>
}
 
Zuletzt bearbeitet:
In dieser Zeile muss noch irgendwo ein fehler sein. Ich weiß nur nich wo. Er überspringt diese Abfrage nämlich immer generell.

Code:
while($row = mysql_fetch_object($ergebnis)) 
if ($row->nick == $nick) { 
header("Location: ../index.php?nick_error=1"); 
}
elseif ($row->email == $email) { 
header("Location: ../index.php?email_error=1"); 
}

Hier der komplette Quelltext.
PHP:
<?php
$sex 	= $_REQUEST['sex'];
$zeit 	= time();
include '../include/db_connection.php';
$abfrage = "SELECT user_nick FROM tr_user";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) 
if ($row->nick == $nick) { 
	 header("Location: ../index.php?nick_error=1"); 
}
elseif ($row->email == $email) { 
	 header("Location: ../index.php?email_error=1"); 
}
else{
$abfrage = "SELECT email FROM tr_user";
	 $ergebnis = mysql_query($abfrage);
	 while($row = @mysql_fetch_object($ergebnis)) 
	 $String = "Dies ist der Text, der verschlüsselt wird, damit wir sichere Passwoerter generieren können.";
$Length = 8;
	$String = md5($String);
$StringLength = strlen($String);
srand ((double) microtime() * 1000000);
$Begin = rand(0,($StringLength-$Length-1));
$pw = substr($String, $Begin, $Length);
 
/* Empfänger */
$to = "$email";
 
/* Betreff */
$subject = "Deine Registrierung bei Tafelrunde";
 
/* Nachricht */
$message = ' Hallo ' .$nick. ',\n
			 Vielen Dank für deine Anmeldung!\n
	 \n
	Dein Username lautet: ' .$nick. ' \n
	Dein Passwort lautet: ' .$pw. '\n
	\n
	Bitte benutze folgenden Link um dich einzuloggen:\n
	\n
	http://florian-bloemker.de/\n
	\n
	Viel Spass beim Spielen wünscht Dir das \n
	\n
	Tafelrunde-Team\n
	 ';
 
/* Um eine HTML-Mail zu senden, können Sie den den "Content-type"-Header setzen */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
 
/* zusätzliche Header */
$headers .= "To: $nick <$email>\r\n";
$headers .= "From: Tafelrunde <info@florian-bloemker.de>\r\n";
 
	 /* Verschicken der Mail */
mail($to, $subject, $message, $headers);
$pwd = md5($pw);
 
// Daten eintragen
$sql = "INSERT INTO `tr_user` (`user_nick`,`user_password`,`user_email`,`user_sec_email`,`user_vorname`,`user_nachname`,`user_sex`,`user_bd_day`,`user_bd_month`,`user_bd_year`,`user_origin`,`user_icq`,`user_aim`,`user_yim`,`user_signatur`,`user_hobby`,`user_reg_date`,`user_lastlogin`,`user_status`,`user_avatar`,`user_posts`,`game_finance`) 
		VALUES ('$nick', '$pwd', '$email', '$sec_email', '$vorname', '$nachname', '$sex', '$bd_day', '$bd_month', '$bd_year', '$origin', '$icq', '$aim', '$yim', '$signatur', '$hobby', '$zeit', '$zeit', 'User', '$avatar', '0', '5000')";
	 mysql_query ($sql);
 
header("Location: ../index.php?angelegt=1");
} 
?>
 
Zuletzt bearbeitet:
PHP:
while($row = mysql_fetch_object($ergebnis)) {
   if ($row->nick == $nick) {
      header("Location: ../index.php?nick_error=1");
   }
   elseif ($row->email == $email) {
      header("Location: ../index.php?email_error=1");
   }
}

?>

Ausserdem musst du die query umformulieren, du musst, wenn es sich um 2 Tabellen handelt, in denen du die Werte ausliest, auch beide Tabellen in deine Abfrage mit einbauen, also:
PHP:
<?php
$sex     = $_REQUEST['sex'];
$zeit     = time();
include '../include/db_connection.php';
$abfrage = "Select
                  tr_user.user_nick, benutzerdaten.email
                 FROM
                  tr_user, benutzerdaten
                 WHERE
                 tr_user.id = benutzerdaten.id;"; // hier die Spalte, mit denen die Tabellen verknüpft sind

$ergebnis = @mysql_query($abfrage);
while($row =@ mysql_fetch_object($ergebnis)) {
  if ($row->nick == $nick) {
     header("Location: ../index.php?nick_error=1");
     exit();
  }

  if ($row->email == $email) {
     header("Location: ../index.php?email_error=1");
     exit();
  }
}

     $String = "Dies ist der Text, der verschlüsselt wird, damit wir sichere Passwoerter generieren können.";
$Length = 8;
    $String = md5($String);
$StringLength = strlen($String);
srand ((double) microtime() * 1000000);
$Begin = rand(0,($StringLength-$Length-1));
$pw = substr($String, $Begin, $Length);

/* Empfänger */
$to = "$email";

/* Betreff */
$subject = "Deine Registrierung bei Tafelrunde";

/* Nachricht */
$message = ' Hallo ' .$nick. ',\n
             Vielen Dank für deine Anmeldung!\n
     \n
    Dein Username lautet: ' .$nick. ' \n
    Dein Passwort lautet: ' .$pw. '\n
    \n
    Bitte benutze folgenden Link um dich einzuloggen:\n
    \n
    http://florian-bloemker.de/\n
    \n
    Viel Spass beim Spielen wünscht Dir das \n
    \n
    Tafelrunde-Team\n 
     ';

/* Um eine HTML-Mail zu senden, können Sie den den "Content-type"-Header setzen */
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* zusätzliche Header */
$headers .= "To: $nick <$email>\r\n";
$headers .= "From: Tafelrunde <info@florian-bloemker.de>\r\n";

     /* Verschicken der Mail */
mail($to, $subject, $message, $headers);
$pwd = md5($pw);

// Daten eintragen
$sql = "INSERT INTO `tr_user` (`user_nick`,`user_password`,`user_email`,`user_sec_email`,`user_vorname`,`user_nachname`,`user_sex`  ,`user_bd_day`,`user_bd_month`,`user_bd_year`,`user_origin`,`user_icq`,`user_aim`,`user_yim`,`user_s  ignatur`,`user_hobby`,`user_reg_date`,`user_lastlogin`,`user_status`,`user_avatar`,`user_posts`,`gam  e_finance`)
        VALUES ('$nick', '$pwd', '$email', '$sec_email', '$vorname', '$nachname', '$sex', '$bd_day', '$bd_month', '$bd_year', '$origin', '$icq', '$aim', '$yim', '$signatur', '$hobby', '$zeit', '$zeit', 'User', '$avatar', '0', '5000')";
     mysql_query ($sql);

header("Location: ../index.php?angelegt=1");
}
?>

Den Unteren Teil brauchst du nicht in ein else zu packen, wenn oben ein Fehler auftritt, wird der untere sowieso nicht ausgeführt. Aber ich würde am Anfang überprüfen, ob das script richtig aufgerufen wurde, also, ob der submit- Button auch geklickt wurde
 
Zuletzt bearbeitet:
Also so langsam check ich hier gar nix mehr, es einfach nich so wie ich will. Das ganze soll ein Registrier-Script werden, habe einmal die Datei inder die Formulare alle sind. Die sieht so aus

PHP:
<?php
echo ("<form action=\"reg_do.php\" method=\"POST\" name=\"user\">");
echo ("<table>\n");

echo ("<tr><td width=\"100\">Nick:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"nick\" value=\"$tnick\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">1. E-Mail:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"email\" value=\"$temail\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">2. E-Mail:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"sec_email\" value=\"$sec_email\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Vorname:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"vorname\" value=\"$vorname\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Nachname:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"nachname\" value=\"$nachname\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Geschlecht:</td>\n");
echo ("<td width=\"300\">Männlein: <input type=\"radio\" name=\"sex\" value=\"male\"></input>\n");
echo ("Weiblein: <input type=\"radio\" name=\"sex\" value=\"female\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Geburtsdatum</td>\n");
echo ("<td width=\"300\">\n");
echo ("<select name=\"bd_day\" size=\"1\">\n");
echo ("<option>1</option>\n<option>2</option>\n<option>3</option>\n<option>4</option>\n<option>5</option>\n<option>6</option>\n<option>7</option>\n<option>8</option>\n<option>9</option>\n<option>10</option>\n<option>11</option>\n<option>12</option>\n<option>13</option>\n<option>14</option>\n<option>15</option>\n<option>16</option>\n<option>17</option>\n<option>18</option>\n<option>19</option>\n<option>20</option>\n<option>21</option>\n<option>22</option>\n<option>23</option>\n<option>24</option>\n<option>25</option>\n<option>26</option>\n<option>27</option>\n<option>28</option>\n<option>29</option>\n<option>30</option>\n<option>31</option>\n");
echo ("</select></input>\n");
echo ("<select name=\"bd_month\" size=\"1\">\n");
echo ("<option>1</option>\n<option>2</option>\n<option>3</option>\n<option>4</option>\n<option>5</option>\n<option>6</option>\n<option>7</option>\n<option>8</option>\n<option>9</option>\n<option>10</option>\n<option>11</option>\n<option>12</option>\n");
echo ("</select></input>\n");
echo ("<select name=\"bd_year\" size=\"1\">\n");
echo ("<option>1945</option>\n<option>1946</option>\n<option>1947</option>\n<option>1948</option>\n<option>1949</option>\n<option>1950</option>\n<option>1951</option>\n<option>1952</option>\n<option>1953</option>\n<option>1954</option>\n<option>1955</option>\n<option>1956</option>\n<option>1957</option>\n<option>1958</option>\n<option>1959</option>\n<option>1960</option>\n<option>1961</option>\n<option>1962</option>\n<option>1963</option>\n<option>1964</option>\n<option>1965</option>\n<option>1966</option>\n<option>1967</option>\n<option>1968</option>\n<option>1969</option>\n<option>1970</option>\n<option>1971</option>\n<option>1972</option>\n<option>1973</option>\n<option>1974</option>\n<option>1975</option>\n<option>1976</option>\n<option>1977</option>\n<option>1978</option>\n<option>1979</option>\n<option>1980</option>\n<option>1981</option>\n<option>1982</option>\n<option>1983</option>\n<option>1984</option>\n<option>1985</option>\n<option>1986</option>\n<option>1987</option>\n<option>1988</option>\n<option>1989</option>\n<option>1990</option>\n<option>1991</option>\n<option>1992</option>\n<option>1993</option>\n<option>1994</option>\n<option>1995</option>\n<option>1996</option>\n<option>1997</option>\n<option>1998</option>\n<option>1999</option>\n<option>2000</option>\n");
echo ("</select></input>\n");
echo ("</td></tr>\n");

echo ("<tr><td width=\"100\">Herkunft:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"origin\" value=\"$origin\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">ICQ:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"icq\" value=\"$icq\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">AIM:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"aim\" value=\"$aim\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">YIM:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"yim\" value=\"$yim\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Signatur:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"signatur\" value=\"$signatur\"></input></td></tr>\n");

echo ("<tr><td width=\"100\">Hobbys:</td>\n");
echo ("<td width=\"300\"><input type=\"text\" name=\"hobby\" value=\"$hobby\"></input></td></tr>\n");

echo ("</table>\n");
echo ("<input type=\"submit\" value=\"Anlegen\">\n");
echo ("</form>\n");
?>

Und dann hab ich einmal die Datei die die Registrierung macht, die sieht so aus. Natürlich soll vorher geguckt werden ob der User schon besteht, zur Zeit macht er das aber nicht, er erstellt immer neue, obwohl Email-Adresse und Nick doppelt sind.

PHP:
<?php
$sex     = $_REQUEST['sex']; 
$zeit     = time(); 
include '../include/db_connection.php'; 
$abfrage = "Select 
                  tr_user.user_nick, benutzerdaten.email 
                 FROM 
                  tr_user, benutzerdaten 
                 WHERE 
                 tr_user.id = benutzerdaten.id;"; // hier die Spalte, mit denen die Tabellen verknüpft sind 

$ergebnis = @mysql_query($abfrage); 
while($row = @mysql_fetch_object($ergebnis)) { 
  if ($row->nick == $nick) { 
     header("Location: ../index.php?nick_error=1"); 
     exit(); 
  } 

  if ($row->email == $email) { 
     header("Location: ../index.php?email_error=1"); 
     exit(); 
  } 
} 

     $String = "Dies ist der Text, der verschlüsselt wird, damit wir sichere Passwoerter generieren können."; 
$Length = 8; 
    $String = md5($String); 
$StringLength = strlen($String); 
srand ((double) microtime() * 1000000); 
$Begin = rand(0,($StringLength-$Length-1)); 
$pw = substr($String, $Begin, $Length); 

/* Empfänger */ 
$to = "$email"; 

/* Betreff */ 
$subject = "Deine Registrierung bei Tafelrunde"; 

/* Nachricht */ 
$message = ' Hallo ' .$nick. ',\n 
             Vielen Dank für deine Anmeldung!\n 
     \n 
    Dein Username lautet: ' .$nick. ' \n 
    Dein Passwort lautet: ' .$pw. '\n 
    \n 
    Bitte benutze folgenden Link um dich einzuloggen:\n 
    \n 
    http://florian-bloemker.de/\n 
    \n 
    Viel Spass beim Spielen wünscht Dir das \n 
    \n 
    Tafelrunde-Team\n 
     '; 

/* Um eine HTML-Mail zu senden, können Sie den den "Content-type"-Header setzen */ 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 

/* zusätzliche Header */ 
$headers .= "To: $nick <$email>\r\n"; 
$headers .= "From: Tafelrunde <info@florian-bloemker.de>\r\n"; 

     /* Verschicken der Mail */ 
mail($to, $subject, $message, $headers); 
$pwd = md5($pw); 

// Daten eintragen 
$sql = "INSERT INTO `tr_user` (`user_nick`,`user_password`,`user_email`,`user_sec_email`,`user_vorname`,`user_nachname`,`user_sex`    ,`user_bd_day`,`user_bd_month`,`user_bd_year`,`user_origin`,`user_icq`,`user_aim`,`user_yim`,`user_s    ignatur`,`user_hobby`,`user_reg_date`,`user_lastlogin`,`user_status`,`user_avatar`,`user_posts`,`gam    e_finance`) 
        VALUES ('$nick', '$pwd', '$email', '$sec_email', '$vorname', '$nachname', '$sex', '$bd_day', '$bd_month', '$bd_year', '$origin', '$icq', '$aim', '$yim', '$signatur', '$hobby', '$zeit', '$zeit', 'User', '$avatar', '0', '5000')"; 
     mysql_query ($sql); 

header("Location: ../index.php?angelegt=1"); 
?>

Ich hoffe Ihr könnt mein Problem lösen, Danke
 
was gibt er denn bei print_r($row) aus?

Ich weiss nicht, ob du das mit der Abfrage so verstanden hast wie ich es meine, da du die sql so übernommen hast.
PHP:
$abfrage = "Select
               //  ....
                 WHERE
                 tr_user.id = benutzerdaten.id;"; // hier die Spalte, mit denen die Tabellen verknüpft sind

Du hast 2 Tabellen, einmal tr_user und eimal benutzerdaten. Eine Spalte muss ja in beiden Tabellen vorkommen, ich weiss natürlich nicht, welche das ist, und habe id genommen um es zu veranschaulichen. Vermutlich heisst sie bei dir aber anders. Hast du zB in beiden Tabellen die Spalte user_nick (du musst ja wissen, welche Daten zu wem gehören), dann würde der where-Teil lauten:
PHP:
WHERE tr_user.user_nick = benutzerdaten.user_nick
wenn du in tr_user die Spalten
id
user_nick
datum
hättest, in benutzerdaten die Spalten
id
user_id
email
vorname
nachname

und die Spalte 'id' der Tabelle tr_user der Spalte 'user_id' in benutzerdaten entspräche, wäre die Abfrage:
PHP:
where tr_iser.id = benutzerdaten.user_id
da ich wie gesagt die Spaltennamen nicht kenne, kann ich das für deine Abfrage so icht sagen, ich hoffe das aber nun verständlich erklärt zu haben

die Jahreszahlen könntest du auch in eine for-Schleife schreiben, dann müsstest du nicht jede Jahreszahl zwischen 1945 und heute hinschreiben, nur so als Tip
 
Zuletzt bearbeitet:
Zurück