Seite 1 von 1

Fehler bei user_add() Funktion

Verfasst: 12.04.2008 20:57
von Yast
Hi,

hoffe mal das mir jemand helfen kann!
Folgendes: Ich wollte die Funktion user_add() auf meiner Seite verwenden um Benutzer im Forum gelichzeitig zu registrieren! Klappt soweit mal ganz gut! Es werden Benutzer im forum angelegt aber es wird immer folgende Fehlermeldung ausgegeben:
General Error

SQL ERROR [ mysql4 ]

Duplicate entry 'num_users' for key 1 [1062]

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.

Hier meine Funktion:

Code: Alles auswählen

function forum_useradd($username,$passwd1,$email1)
{ 
  define('IN_PHPBB', true);
  global $phpbb_root_path;
  global $phpEx;
  global $db;
  global $config;
  global $user;
  global $auth;
  global $cache;
  global $template;
  $phpbb_root_path = 'forum/';

  $phpEx = substr(strrchr(__FILE__, '.'), 1);
  include($phpbb_root_path . 'common.php');
  include($phpbb_root_path . 'includes/functions_user.php');
  include($phpbb_root_path . 'includes/ucp/ucp_register.php');

  $forumpassword=$passwd1;
  $forumusername=$username;
  $username_clean=strtolower($forumusername);
  $user_email=$email1;

  $sql_ary = array(
  		'user_id'           => $db->sql_nextid(),
        'username'          => $forumusername,
        'username_clean'    => $username_clean,
        'user_password'     => phpbb_hash($forumpassword),
        'user_pass_convert' => 0,
        'user_email'        => $user_email,
        'user_email_hash'   => crc32(strtolower($user_email)) . strlen($user_email),
        'group_id'          => 2,
        'user_type'         => 0,
	     'user_timezone' 	=> '1.00',
	     'user_regdate' 		=> time(),
	     'user_lang' 		=> 'de',
	     'user_dateformat' 	=> 'd M Y H:i',
	     'user_style' 		=> 3,
    );
	
  user_add($sql_ary);
}
EDIT: Es muss irgendwas mit "'user_type' => 0" zu tun haben! Weiss einer genau was man da angeben muss? wenn ich den Wert auf 2 setze, kommt zwar kein Fehler mehr aber der User ist inaktiv!

MFG
Yast

Verfasst: 14.04.2008 22:18
von phillip
das sagt ja schon alles:
Duplicate entry 'num_users' for key 1 [1062]
Das heisst, dass dieser Eintrag schon vorhanden ist... ;-)

Verfasst: 14.04.2008 22:30
von gn#36
IMHO der Übeltäter:

Code: Alles auswählen

'user_id'           => $db->sql_nextid(), 
Woher soll das System denn vorher wissen, welche ID die nächste sein soll (wenn noch nicht einmal die Tabelle angegeben wird). Ich denke du brauchst diese Zeile nicht.

Verfasst: 15.04.2008 07:30
von Dr.Death
Korrekt.

Das Feld user_id ist autoinkrementel und muss somit nicht angegeben werden.

Das Feld user_type muss auch nicht angegeben werden, da der Standard Wert 0 ist. ( Ausser Du möchtest einen anderen Type eintragen )

Wegen dem "inaktiven" User könntest Du noch die Funktion:

Code: Alles auswählen

/**
* Flips user_type from active to inactive and vice versa, handles group membership updates
*
* @param string $mode can be flip for flipping from active/inactive, activate or deactivate
*/
function user_active_flip($mode, $user_id_ary, $reason = INACTIVE_MANUAL)
aus der includes/functions_user.php verwenden.