SQL SELECT Problem mit neuem MOD - Hilfe

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
sqlprob1

SQL SELECT Problem mit neuem MOD - Hilfe

Beitrag von sqlprob1 »

Hallo,
vielleicht ist hier jemand der mehr Ahnung von SQL hat ?

Habe einen Mod gefunden der sehr nützlich, bestimmt auch für Euch ist, allerdings hat er ein Problem:

Der MOD: http://www.lefkeo.info/viewtopic.php?t=6
Der User bekommt damit gleich angezeigt ob der Benutzername noch verfügbar ist, aber leider prüft die Abfrage nicht die Tabelle disallow_username.

Ich habe das Probiert:

hier der original code:

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// We check if the username exist or not
[b]$sql = 'SELECT username FROM  '.USERS_TABLE.' WHERE username = \''.$HTTP_GET_VARS['username'].'\'';[/b]if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) >= 1 )
{
   echo '1';
}
else
{
   echo '2';
}
$db->sql_freeresult($result);
hier mein abgänderter Code, der auch die tabelle disallow_username abfragen soll:

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// We check if the username exist or not
[b]$sql = 'SELECT username, disallow_username FROM  ' . USERS_TABLE . ' , ' . DISALLOW_TABLE .' WHERE username AND disallow_username = \''.$HTTP_GET_VARS['username'].'\'';[/b]	if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) >= 1 )
{
   echo '1';
}
else
{
   echo '2';
}
$db->sql_freeresult($result);
Leider klappt das nicht so ganz, disallow_usernames werden zwar angezeigt das der benutzername vergeben ist aber bereits vergebene benutzernamen wird manchmal als vergeben und manchmal als noch frei angezeigt ...

Bin kein SQL Experte aber vielleicht kann mir da jemand helfen ?

Gruss Jens
diegoriv
Mitglied
Beiträge: 115
Registriert: 09.08.2005 10:21
Kontaktdaten:

Re: SQL SELECT Problem mit neuem MOD - Hilfe

Beitrag von diegoriv »

bin auch kein experte, aber so ungefähr könnte es gehen

Code: Alles auswählen

// We check if the username exist or not
$sql = 'SELECT u.username, d.disallow_username 
FROM  '.USERS_TABLE.' u, '.DISALLOW_TABLE.' d 
WHERE u.username = \''.$HTTP_GET_VARS['username'].'\''
OR d.disallow_username = \''.$HTTP_GET_VARS['username'].'\'';
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) >= 1 )
{
   echo '1';
}
else
{
   echo '2';
}
$db->sql_freeresult($result);
****************************************
Alpinum.at - Forum für Bergsteiger
****************************************
sqlprob1

Beitrag von sqlprob1 »

Hi diegoriv,
danke für die Info, aber das funktioniert auch nicht. Habe folgendes probiert um es auch etwas sicherer zu machen :
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// We check if the username exist or not
$username = isset($_POST['username']) ? phpbb_clean_username($_POST['username']) : '';
$sql = 'SELECT username FROM '.USERS_TABLE.' WHERE username = \'' . str_replace("\\'", "''", $username) . '\'';
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) > 0 )
{
echo '1';
}
else
{
include($phpbb_root_path . 'includes/functions_validate.'.$phpEx);
$result2 = validate_username($username);
if ( $result2['error'] )
{
$error_msg = ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
echo '1'.$error_msg;
} else
{
echo '2';
}
}
$db->sql_freeresult($result);
Jetzt habe ich aber das Problem das alle Usernamen auch die noch verfügbaren ... angeblich schon vergeben sind ....

Weiss jetzt echt nicht mehr weiter, irgendein SQL Guru hier :cry:
sqlprob1

SQL SELECT Problem mit neuem MOD - Hilfe

Beitrag von sqlprob1 »

sqlprob1 hat geschrieben:Hi diegoriv,
danke für die Info, aber das funktioniert auch nicht. Habe folgendes probiert um es auch etwas sicherer zu machen :
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// We check if the username exist or not
$username = isset($_POST['username']) ? phpbb_clean_username($_POST['username']) : '';
$sql = 'SELECT username FROM '.USERS_TABLE.' WHERE username = \'' . str_replace("\\'", "''", $username) . '\'';
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) > 0 )
{
echo '1';
}
else
{
include($phpbb_root_path . 'includes/functions_validate.'.$phpEx);
$result2 = validate_username($username);
if ( $result2['error'] )
{
$error_msg = ( ( isset($error_msg) ) ? '<br />' : '' ) . $result['error_msg'];
echo '1'.$error_msg;
} else
{
echo '2';
}
}
$db->sql_freeresult($result);
Jetzt habe ich aber das Problem das alle Usernamen auch die noch verfügbaren ... angeblich schon vergeben sind ....

Weiss jetzt echt nicht mehr weiter, irgendein SQL Guru hier :cry:
Ich habe schon alles mögliche probiert aber es klappt nicht. Im Grunde ist die Abfrage einfach ...dachte ich zumindestens ..

Zuerst sollen alle usernamen abgerufen werden, ist ein usernmae vorhanden dann sieht der user eine meldung: username existiert bereits ..

ausserdem sollen alle disallow_usernamen abgrufen werden und fals der user ein name eingibt der verboten ist erhält er die gleiche meldung; username existiert bereits ..

aber irgendwie ist der Wurm drin ...
diegoriv
Mitglied
Beiträge: 115
Registriert: 09.08.2005 10:21
Kontaktdaten:

Beitrag von diegoriv »

ich habs jetzt selbst probiert und bin draufgekommen, dass ich ein ' zuviel hatte (letztes Zeichen der WHERE-Zeile). so gehts bei mir:

Code: Alles auswählen

// We check if the username exist or not
$sql = 'SELECT u.username, d.disallow_username
FROM  '.USERS_TABLE.' u, '.DISALLOW_TABLE.' d
WHERE u.username = \''.$HTTP_GET_VARS['username'].'\'
OR d.disallow_username = \''.$HTTP_GET_VARS['username'].'\'';
if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Could not query username list', '', __LINE__, __FILE__, $sql);
}

if( $db->sql_numrows($result) >= 1 )
{
   echo '1';
}
else
{
   echo '2';
}
$db->sql_freeresult($result);
****************************************
Alpinum.at - Forum für Bergsteiger
****************************************
Antworten

Zurück zu „phpBB 2.0: Mod Support“