Seite 1 von 1

User aus externem Script zu PHPBB3 per user_add()

Verfasst: 25.01.2011 20:49
von pollmannsc
Hallo an alle.
Ich hoffe ich poste hier ins richtige Forum.

Ich bin dabei meine User aus einem anderen Script zu PHPBB3 zu konvertieren.
Hierzu habe ich mir ein Script mit Hilfe der user_add() Funktion gebastelt.

Der Code sieht folgendermaßen aus:

Code: Alles auswählen

<?php
//DB KONFIG
mysql_connect("localhost", "dbuser", "dbpasswort")
or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("dbname");


define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include('includes/functions_user.php');


$query = mysql_query("SELECT * FROM membersold ORDER BY USERID DESC");
$line = "0";
while ($array = mysql_fetch_array($query))
{
$line = $line + 1;
$username = $array['username'];
$password = $array['password'];
$email_address = $array['email'];
$group_id = '4';
$group_name = 'REGISTERED';
$timezone = '+2';
$language = 'en';
$user_type = USER_INACTIVE;
$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(8, 12));
$user_ip = $array['reg_ipaddress'];
$user_inactive_reason = INACTIVE_REGISTER;
$user_inactive_time = time();

$user_row = array(
    'username'              => $username,
    'user_password'         => phpbb_hash($password),
    'user_email'            => $email_address,
    'group_id'              => (int) $group_id,
    'user_timezone'         => (float) $timezone,
    'user_dst'              => $is_dst,
    'user_lang'             => $language,
    'user_type'             => $user_type,
    'user_actkey'           => $user_actkey,
    'user_ip'               => $user_ip,
    'user_inactive_reason'  => $user_inactive_reason,
    'user_inactive_time'    => $user_inactive_time,
);
 
$user_id = user_add($user_row);

## echo zum prüfen

echo "<pre>";
print_r($user_row);
echo "</pre>";
echo "<br>Zeile:&nbsp;".$line."<br>";
}

?>

Das klappt auch soweit gut. Bis zu einem bestimmten Punkt.
Dann erscheint diese Fehlermeldung:

Code: Alles auswählen

General Error
SQL ERROR [ mysqli ]

Incorrect string value: '\xDF' for column 'username' at row 1 [1366]

An sql error occurred while fetching this page. Please contact an administrator if this problem persists.
Ich habe jetzt herausgefunden, dass an der Stelle wo das Script den Fehler ausgibt, ein Username vorkommt der ein "ß" am Ende hat.

Ich habe nur leider überhaupt keine Ahnung mehr, wie ich das Problem lösen kann. Darf der Username kein "ß" haben?
Kann ich mir eigentlich schwer vorstellen. Aber woran liegt es dann?

Ich hoffe das jemand evtl. eine Lösung für mich hat, oder sonst einen Tip wo ich ansetzen kann.

Gruß,
Christian

Re: User aus externem Script zu PHPBB3 per user_add()

Verfasst: 26.01.2011 02:20
von Mahony
Hallo
Ursache ist die Zeichenkodierung dessen, was du eingelesen hast.
Wenn das nicht zu deiner zum speichern verwendeten Kodierung passt, dann knallt es eben.


P.S. Welchen Zeichensatz verwendet die Tabelle phpbb_users bei dir?
Das bekommst du durch Eingabe des SQL-Befehls

Code: Alles auswählen

SHOW VARIABLES LIKE 'character_set%';
heraus.

Ich würde vorschlagen, die Tabelle phpbb_users per SQL-Befehl auf UTF8 zu konvertieren.

Code: Alles auswählen

ALTER TABLE `phpbb_users` CONVERT  TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Grüße: Mahony