User per Skript registrieren -> SQL Fehler...
Verfasst: 07.12.2009 21:51
Hallo zusammen,
nach langem Suchen wende ich mich nun an die Community, in der Hoffnung, hier eine Antwort zu bekommen:
Ich versuche, per Skript (s.u.) Benutzer zu registrieren.
Folgende Testausgaben habe ich bei funcions.php, function "set_config" eingebaut:
Und hier die zugehörigen Ausgaben:
Nun habe ich schon herumprobiert, den Vorgang nachvollzogen, gegoogelt und was weiß ich noch was...
Ich hoffe, jemand von euch kann mir helfen und sagen, wie dieser Fehler zustande kommt und wie man ihn ausmerzen kann.
Viele Grüße,
CrazyBread
nach langem Suchen wende ich mich nun an die Community, in der Hoffnung, hier eine Antwort zu bekommen:
Ich versuche, per Skript (s.u.) Benutzer zu registrieren.
Code: Alles auswählen
<?php
define('PHPBB_ROOT_PATH', $_SERVER['DOCUMENT_ROOT'].'/studienarbeit/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
define('IN_PHPBB', true);
require_once (PHPBB_ROOT_PATH.'config.php');
require_once (PHPBB_ROOT_PATH.'includes/functions_user.php');
require_once (PHPBB_ROOT_PATH.'includes/session.php');
require_once (PHPBB_ROOT_PATH.'includes/utf/utf_tools.php');
require_once (PHPBB_ROOT_PATH.'includes/functions.php');
require_once (PHPBB_ROOT_PATH.'includes/auth.php');
require_once (PHPBB_ROOT_PATH.'includes/constants.php');
require_once (PHPBB_ROOT_PATH.'includes/acm/acm_'.$acm_type.'.'.$phpEx);
require_once (PHPBB_ROOT_PATH.'includes/cache.php');
$dbms = 'mysqli';
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
$cache = new Cache();
$db = new $sql_db();
$config = $cache->obtain_config();
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);
//print_r ($config);
//echo $sql_db; // $sql_db => 'dbal_'+$dbms ( wird in dbal gesetzt)
//@define('DEBUG', true);
//@define('DEBUG_EXTRA', true);
$group_name = 'REGISTERED';
$sql = 'SELECT group_id
FROM ' . GROUPS_TABLE . "
WHERE group_name = '" . $db->sql_escape($group_name) . "'
AND group_type = " . GROUP_SPECIAL;
$result = $db->sql_query($sql, 0);
$row = $db->sql_fetchrow($result);
$group_id = $row['group_id'];
echo ("Group ID: ".$group_id."<br />"); //Richtige Schreibweise -> EXTREM Wichtig
//Das sind die Muss - Angaben für einen neuen User
$name = md5(time());
$newUser = array(
'username' => $name,
'user_password' => phpbb_hash("passwort"),
'user_email' => $name.'@gmx.de',
'group_id' => $group_id,
'user_type' => USER_NORMAL,
);
// tables affected: users table, profile_fields_data table, groups table, and config table.
$id = user_add($newUser);
echo("Eingefügt! User ID: $id");
$name = md5(time()+1);
$newUser = array(
'username' => $name,
'user_password' => phpbb_hash("passwort"),
'user_email' => $name.'@gmx.de',
'group_id' => $group_id,
'user_type' => USER_NORMAL,
//regdate ist optional
'user_regdate' => time(),
);
$id2 = user_add($newUser);
echo("Eingefügt! User ID: $id2");
?>
Code: Alles auswählen
function set_config($config_name, $config_value, $is_dynamic = false)
{
global $db, $cache, $config;
$sql = 'UPDATE ' . CONFIG_TABLE . "
SET config_value = '" . $db->sql_escape($config_value) . "'
WHERE config_name = '" . $db->sql_escape($config_name) . "'";
$db->sql_query($sql);
echo ($config_name."<br />".$config_value."<br />".$is_dynamic."<br />".$sql);
echo ('<br />affectedrows:'.$db->sql_affectedrows().'<br />config(isset):'.isset($config[$config_name]));
if (!($db->sql_affectedrows() || isset($config[$config_name])))
{
$sql = 'INSERT INTO ' . CONFIG_TABLE . ' ' . $db->sql_build_array('INSERT', array(
'config_name' => $config_name,
'config_value' => $config_value,
'is_dynamic' => ($is_dynamic) ? 1 : 0));
echo ("<br />".$sql);
$db->sql_query($sql);
}
$config[$config_name] = $config_value;
if (!$is_dynamic)
{
$cache->destroy('config');
}
echo "<hr />";
}
Man sieht, dass es seltsamerweise nur bei newest_user_colur einen Insert Befehl gibt, der dann natürlich einen Fehler wirft.rand_seed
1015e7db148662c2b17e835515326498
1
UPDATE phpbb_config SET config_value = '1015e7db148662c2b17e835515326498' WHERE config_name = 'rand_seed'
affectedrows:1
config(isset):1rand_seed_last_update
1260218349
1
UPDATE phpbb_config SET config_value = '1260218349' WHERE config_name = 'rand_seed_last_update'
affectedrows:1
config(isset):newest_user_id
92
1
UPDATE phpbb_config SET config_value = '92' WHERE config_name = 'newest_user_id'
affectedrows:1
config(isset):newest_username
0e2097f12d106b632248b2924442ad66
1
UPDATE phpbb_config SET config_value = '0e2097f12d106b632248b2924442ad66' WHERE config_name = 'newest_username'
affectedrows:1
config(isset):newest_user_colour
000000
1
UPDATE phpbb_config SET config_value = '000000' WHERE config_name = 'newest_user_colour'
affectedrows:0
config(isset):
INSERT INTO phpbb_config (config_name, config_value, is_dynamic) VALUES ('newest_user_colour', '000000', 1)
Fatal error: SQL ERROR [ mysqli ]
Duplicate entry 'newest_user_colour' for key 'PRIMARY' [1062]
An sql error occurred while fetching this page. Please contact an administrator if this problem persists. in D:\Programme\xampp\htdocs\studienarbeit\includes\db\dbal.php on line 678
Nun habe ich schon herumprobiert, den Vorgang nachvollzogen, gegoogelt und was weiß ich noch was...
Ich hoffe, jemand von euch kann mir helfen und sagen, wie dieser Fehler zustande kommt und wie man ihn ausmerzen kann.
Viele Grüße,
CrazyBread