benutzer registrieren

Code:
<?php  

$benutzer[1]["Nickname"] =$nick ; 
$benutzer[1]["Kennwort"] =$pass ; 
$benutzer[1]["Nachname"] =$vorname ; 
$benutzer[1]["Vorname"] = $nachname ;
  
$connectionid  = mysql_connect("localhost","***","***"); 
if (!mysql_select_db ("***", $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 


while (list ($key, $value) = each ($benutzer)) 
{   $sql = "INSERT INTO ".
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ".
  "VALUES ('".$value["Nickname"]."', '".
                       md5 ($value["Kennwort"])."', '".
                       $value["Nachname"]."', '".
                       $value["Vorname"]."')"; 
  mysql_query ($sql); 

  if (mysql_affected_rows ($connectionid) > 0) 
  { 
    echo "Benutzer erfolgreich angelegt.<br>\n"; 
  } 
  else 
  { 
   echo "Fehler beim Anlegen der Benutzer.<br>\n"; 
  } 
} 
?>

hallo,
ich habe mal wieder en problem und zwar folgendes,
ich versuche ein script in php zu schreiben mit welchem sich ein benutzer registrieren kann, und nun habe ich folgendes probelm und zwar will ich dass eben ein name nur einmal vorkommen kann....
wie könnte ich das machen??
 
Du kannst ja abfragen, ob der Name schon in der Tabelle existiert?

Code:
select ID from tblUser where name = 'Fritz'

Wenn hier was zurück kommt, gibs ihn, sonst nicht...
 
Du kannst ja abfragen, ob der Name schon in der Tabelle existiert?

Code:
select ID from tblUser where name = 'Fritz'


Wenn hier was zurück kommt, gibs ihn, sonst nicht...

ich brings immer noch net hin...
also bei mir sieht des ganze so aus
$sql = "select ID from benutzerdaten where Nickname = $nick INSERT INTO ".
"benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ".
aber es geht net?!?
was mach ich falsch
 
PHP:
<?php

if(mysql_num_rows(mysql_query("select id from benutzerdaten where Nickname = '".$value['nickname']."'"))>0){
echo "sry, schon vergeben.";
}
else {
INSERT INTO ".
    "benutzerdaten (Nickname, Kennwort, Nachname, Vorname) ".
  "VALUES ('".$value["Nickname"]."', '".
                       md5 ($value["Kennwort"])."', '".
                       $value["Nachname"]."', '".
                       $value["Vorname"]."')"; 
  mysql_query ($sql); 
}
?>

is eifnach so dahingeklatscht und kann man glaub noch intelligenter lösen, aber dass ist glaub der ansatz, den IsNull meinte.
 
Du kannst auch den Namen in der Tabelle als primary key oder als unique definieren, dann lässt die Datenbank in dieser Spalte keine 2 gleichen Werte zu. In dem Fall musst du dann halt noch den Fehler richtig abfangen...
Aber einfach prüfen ob der Name schon existiert is wohl besser
 
ThX habs hinbekommen danke...
hab allerdings nochmal ne frage,
und zwar will ich in einem chat (php),
es möglich machen dass man user kicken, bannen, muten kann.
Wie könnt man sowas machen
also ich bin soweit:
Die operatoren werden in der mysql datenbank mit einer 1 markiert und dies wird ausgelesen
jedoch habe ich keine ahnung wie ich die session von jmd beenden kann oder ihn eben kicken kann?

gruß virus
PS: nochma danke ohne des habo wär ich vollkommen aufgeschmissen...
 
also ich hab eigentlich nicht viel Ahnung von PHP, aber falls niemand ne bessere Antwort gibt:

in der Tabelle mit den Zugriffsrechten könnte man auch Spalten für die SessionID und die IP des Benutzers einführen. Bei einem Kick wird dann die Session ID des Users in der Datenbank gelöscht, d.h. sein Aufenthalt im Chatroom ist nicht länger gültig. Man muss dann halt auf "Client(User) Seite" immer schauen, ob der Benutzer überhaupt das Recht für den Chat hat.
Ich vermute mal dass du nen Datenbankbasierenden Chat bastelst (?) und da kann man das dann ja beim Abschicken/ Empfangen der Nachrichten gleich mitprüfen.

keine gültige Session = kick
keine gültige IP = ban
mehrmals gleiche IP von Benutzern (mehrere Nutzer hinter einem Router), kA wie man dann nen Ban realisieren kann. (Edit)Glaube eigentlich gar nicht..


Edit: achja Thread abhaken nicht vergessen gell :D
 
du machst einfach ein Tabelle in der Datenbank, die nennst du meinetwegen user_banned.

diese Tabelle hat folgende Felder:
ban_id (int, auto_increment)
user_id (int)
banned_since (int) (da speicherst du den Timestamp, wenn der User gebannt wurde)
banned_time (int) (Zeit, wie lange der User gebannt ist, Angabe in Sekunden)

bei jedem erneuern der Seite (um den aktuellen Text anzuzeigen) und bei jedem Senden einer Nachricht wird zuerst diese Tabelle überprüft:

folgendes musst du nun noch in deinem Script einbauen:
  • mit dem Auswählen der Option "banned" für den User, kommt der User in diese Tabelle
  • wenn ein User in der Bann-Liste steht, wird er auf jeden Fall ausgeloggt.)
  • Wenn sich ein User einloggen will, der in der Bann-Liste steht und banned_since+banned_time < mktime(), wird der Eintrag aus der Datenbank gelöscht
  • Wenn sich ein User einloggen will, der in der Bann-Liste steht und banned_since+banned_time > mktime(), kommt eine Fehlermeldung "du bist geblockt!"

Ein Kick ist demzufolge ein Bann mit banned_time=0 - er wird auf jeden Fall ausgeloggt, kann sich aber sofort wieder einloggen.


edit: wenn du natürlich auch User zulassen willst, die nicht direkt registriert sind, sondern einfach so nen Benutzernamen eingeben, dann müsstest du zum Bannen natürlich, wie im Post vor mir beschrieben, mit IP-Sperre arbeiten
 
thx gute idee,
jedoch hab ich schon wieder en problem wenn ich aus der datenbank lesen will ob ein user
operator ist funzt das net...
das is mein code
PHP:
$sql = "SELECT operator FROM benutzerdaten";
$result = mysql_query($sql); 
if ($result == 1) {
echo "Du bist operator"; 
} else {
echo "Du bist kein operator";
}
also hier soll es aus der tabelle benutzerdaten den wert operator lesen und mit 1 vergleichen jedoch funzts net wie erwartet
bin am probieren doch kp brings einfach net hin...
gruß virus
 
$result ist ein MySQL-Resultset. Das musst du aber erst mit mysql_fetch_*() in ein vernünftiges Format bringen, um damit Vergleiche anstellen zu können.
 
ay also die while bedingung hab ich gleich nach em abschicken noch hinzugefügt, ich hab das "MySQL-Resultset" jetzt auch in das richtige format gebracht, jedoch ist das ergebnis immer nur "0"
PHP:
$sql = "SELECT operator FROM benutzerdaten WHERE Nickname like $nick";
$result = "mysql_query($sql)"; 
$op = mysql_fetch_*($result);
if ($op == 1) {
echo "Du bist operator"; 
} else {
echo "Du bist kein operator";
}
echo "$op";
stimmt denn die anweisung $sql?
 
1. LIKE ist auch ein MySQL-Statement solltest du laut Konvention also auch groß schreiben.
2. Warum steht mysql_query() unter "? Die solltest weglassen.
3. Der * von mysql_fetch_* ist lediglich ein Platzhalter für mysql_fetch_array oder ähnliches.
 
scheint so, als wäre das dein erster Versuch, mit MySQL zu arbeiten?!
bevor du weiterhin wild, planlos drauf los probierst und wegen jeder kleinen Kleinigkeit hier rein postest, lies doch bitte erstmal ein paar Zeilen im PHP-Manual!
http://de.php.net/manual/de/ref.mysql.php

Dann sollten sich so grundlegende Dinge wie Syntax und Rückgabewerte bestimmter Funktionen von ganz allein klären...
 
Original von Virus
ay also die while bedingung hab ich gleich nach em abschicken noch hinzugefügt, ich hab das "MySQL-Resultset" jetzt auch in das richtige format gebracht, jedoch ist das ergebnis immer nur "0"
PHP:
$sql = "SELECT operator FROM benutzerdaten WHERE Nickname like $nick";
$result = "mysql_query($sql)"; 
$op = mysql_fetch_*($result);
if ($op == 1) {
echo "Du bist operator"; 
} else {
echo "Du bist kein operator";
}
echo "$op";
stimmt denn die anweisung $sql?

1. LIKE ist an dieser Stelle etwas unangebracht. *grübel (jacky, jackychan, jackycola)*
2. Der Stern bei der mysql_fetch_*() Funktion steht für assoc oder array - mysql_fetch_assoc() o. mysql_fetch_array()
 
Original von BasicAvid
2. Der Stern bei der mysql_fetch_*() Funktion steht für assoc oder array - mysql_fetch_assoc() o. mysql_fetch_array()
... oder mysql_fetch_object() oder mysql_fetch_row() oder oder oder...
daher --> php.net --> schlau lesen!
 
Original von beavisbee
Original von BasicAvid
2. Der Stern bei der mysql_fetch_*() Funktion steht für assoc oder array - mysql_fetch_assoc() o. mysql_fetch_array()
... oder mysql_fetch_object() oder mysql_fetch_row() oder oder oder...
daher --> php.net --> schlau lesen!

X( :D Mir ist klar dass es noch mehr solcher Funktionen gibt, ich hab nur die zwei am häufigst verwendeten genannt. Das nächste mal schreib ich dann halt usw.
 
also funzt jetzt. nochmal danke
bis auf ein problem bei dem ich wiklich gar nicht weiter komme,
und zwar zeigt er mir dass irgendetwas mit der if anweisung nicht stimmt also:
"Parse error: syntax error, unexpected T_IF"
an was könnte das liegen also so wie ich das sehe ist die if anweisung korrekt oder?
ich hab auch schon http://de.php.net/ durchsucht jedoch weiß ich nicht an was
es liegen könnte
gruß virus
 
Original von Virus
also funzt jetzt. nochmal danke
bis auf ein problem bei dem ich wiklich gar nicht weiter komme,
und zwar zeigt er mir dass irgendetwas mit der if anweisung nicht stimmt also:
"Parse error: syntax error, unexpected T_IF"
an was könnte das liegen also so wie ich das sehe ist die if anweisung korrekt oder?
ich hab auch schon http://de.php.net/ durchsucht jedoch weiß ich nicht an was
es liegen könnte
gruß virus

http://php.net/if

da schonmal geschaut wenn du probleme hast mit irgendwelchen funktioen ruf

http://php.net/FUNKTIONSNAME auf

;)

ansonsten zeig mal code schnipsel.... die fehlermeldung kann evtl auf ein vergesen ";" hindeuten
 
if ($op == 1) {
echo "Du bist operator";
} else {
echo "Du bist kein operator";
}

so siehts aus und ich wüsste net was ich vergessen hab
 
Zurück
Oben