PHP/MySQL reg.-script -> gibt immer fehler aus

Bl4dE

Mitglied
Hi, ich ham mal ein einfaches Registrationsscript geschrieben.
Habs aber anders gemacht, als überall beschrieben, deswegen komm ich da nicht wirklich weiter. Er sagt mir immer, dass der nickname schon vergeben is, bringt mich aber auch nich weiter, weil ich nich weis wo ich den Fehler suchen soll.
Code
PHP:
<?
$host = "localhost";
$user = "***";
$db = "***";
$pwd = "***";
?>
<form name="form1" method="post" action="">
  <table width="278" border="0">
    <tr>
      <td><div align="right">Nickname*:
          <input name="nick" type="text" id="nick">
          <br>
Passwort*:
<input name="pw" type="text" id="pw">
<br>
e-Mail*:
<input name="mail" type="text" id="mail">
<br>
Name:
<input name="name" type="text" id="name">
<br>
City: 
<input name="city" type="text" id="city">
<br>
Country: 
<input name="country" type="text" id="country">
<br>
<br>
<input type="submit" name="Submit" value="Register">
<input type="reset" name="Submit2" value="Reset">
<br>
<br>
<span class="style1">alle mit * gekennzeichneten Felder sind auszuf&uuml;llen! </span>
</div></td>
    </tr>
  </table>
</form>
<?
##reg##

$nick = $_POST['nick'];
$pw = $_POST['pw'];
$mail = $_POST['mail'];
$name = $_POST['name'];
$city = $_POST['city'];
$country = $_POST['country'];
###############################
if(!empty($_POST['nick']) or !empty($_POST['pw']) or !empty($_POST['mail'])){
@mysql_connect($host,$user,$pwd) or die(mysql_error());
@mysql_select_db($db);
$SQL = "SELECT * FROM benutzerdaten WHERE Nickname = $nick ";
if($SQL == FALSE) {
unset($SQL);
$SQL = "INSERT INTO benutzerdaten (
ID,
Nickname,
Kennwort,
Email,
name,
city,
land ) Values (
''
'$nick',
'$pw',
'$mail',
'$name',
'$city',
'$country'
)";
$mailtext = 'Hallo '.$nick.'\n 
Du hast dich soeben erfolgreich bei <a href="http://www.*********.info">*********.info</a> registriert. \n 
Daten: \n 
'.$nick.' und deinem Passwort '.$pw.' . \n 
Wir wünschen dir viel Spass auf unserer Homepage.';
mail($mail,'Registration auf pGeh.info',$mailtext);
echo 'Deine Registrierung war erfolgreich. Du wirst in wenigen Minuten eine e-Mail bekommen \n
In dieser Mail stehen nocheinmal deine angegebenen Daten (Nickname, Passwort). \n
Absofort kannst du dich Einloggen und alle Funktionen nutzen. Vielen Dank.';
mysql_close();
} else {
echo 'Der gewünschte Nickname ist leider schon vergeben.';
}
} else {
echo 'Bitte alle benötigten Felder ausfüllen (*)';
}

?>

Wär nice, wenn mir jemand dabei weiter helfen könnte.
 
PHP:
$SQL = "SELECT * FROM benutzerdaten WHERE Nickname = $nick ";
if($SQL == FALSE) {

Du machst ja keine Abfrage, also ist es immer true, weil $SQL einen Inhalt hat.

Lösung:
PHP:
$SQL = "SELECT * FROM benutzerdaten WHERE Nickname = $nick ";
$result = mysql_query($SQL);
if(mysql_num_rows($result == 0)) {
 
An sich hast du ja recht, stimmt auch, ich hatte ja was vergessen ;) danke.
aber nun bekomm ich jedoch noch eine richtige fehlermeldung
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/www/web6/html/side/php/reg.php on line 65

weis allerdings nich wie ich diese beheben sollte
 
Füg mal kurz noch das ein:
PHP:
if (!$result) {
   die('Ungültige Abfrage: ' . mysql_error());
}
nach
PHP:
$result = mysql_query($SQL);
 
@fanste:
Das sollte eigentlich keinen Unterschied machen.
Bis auf die einfachen Anführungszeichen.
 
Probier mal Folgendes:
PHP:
<?php

	if( !empty($_POST['nick']) || !empty($_POST['pw']) || !empty($_POST['mail']) ) {

		mysql_connect($host, $user, $pwd)
			or die(mysql_error());
		mysql_select_db($db);
		$query = '
			SELECT
			        *
			  FROM
			        `benutzerdaten`
			  WHERE
			        `Nickname` = "'.mysql_real_escape_string($_POST['nick']).'"
			';
		$result = mysql_query($query)
			or die(mysql_error().'<pre>'.htmlspecialchars($query).'</pre>');
		if( mysql_num_rows($result) <= 0 ) {
			$query = '
				INSERT INTO
				        `benutzerdaten`
				  SET
				        `Nickname` = "'.mysql_real_escape_string($_POST['nick']).'",
				        `Kennwort` = "'.mysql_real_escape_string($_POST['pw']).'",
				        `Email`    = "'.mysql_real_escape_string($_POST['mail']).'",
				        `name`     = "'.mysql_real_escape_string($_POST['name']).'",
				        `city`     = "'.mysql_real_escape_string($_POST['city']).'",
				        `land`     = "'.mysql_real_escape_string($_POST['country']).'"
				';
			mysql_query($query)
				or die(mysql_error().'<pre>'.htmlspecialchars($query).'</pre>');
			$mailtext = "Hallo ".$nick."\n
Du hast dich soeben erfolgreich bei <a href=\"http://www.*********.info\">*********.info</a> registriert.\n
Daten:\n
".$_POST['nick']." und deinem Passwort ".$_POST['pw'].".\n
Wir wünschen dir viel Spaß auf unserer Website.";
			mail($_POST['mail'], 'Registration auf pGeh.info', $mailtext);
			echo '<p>Deine Registrierung war erfolgreich. Du wirst in wenigen Minuten eine e-Mail bekommen</p>';
			echo '<p>In dieser Mail stehen nocheinmal deine angegebenen Daten (Nickname, Passwort).</p>';
			echo '<p>Absofort kannst du dich Einloggen und alle Funktionen nutzen. Vielen Dank.</p>';
			mysql_close();
		} else {
			echo 'Der gewünschte Nickname ist leider schon vergeben.';
		}
	} else {
		echo 'Bitte alle benötigten Felder ausfüllen (*)';
	}

?>
Ich empfehle dir übrigens noch soetwas wie eine Registrierungsbestätigung in Erwägung zu ziehen, da sonst bei einem Tippfehler womöglich der Flasche das Passwort zugeschickt bekommt.
 
Herzlichsten dank, Problem gelöst, danke an alle und besonders an Gumbo
und die registrierungsbestätigung mach ich auch noch später rein, wollte nur erstmal das script so zum laufen bringen.
big tHx

mfg Bl4dE
 
Am besten lässt du den Benutzer neben einem vorher bestimmten Bestätigungscode das Passwort noch einmal eingeben.
 
Zurück