Seite 1 von 1

SQL SELECT Problem mit neuem MOD - Hilfe

Verfasst: 25.07.2006 19:58
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

Re: SQL SELECT Problem mit neuem MOD - Hilfe

Verfasst: 26.07.2006 07:33
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);

Verfasst: 26.07.2006 15:15
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:

SQL SELECT Problem mit neuem MOD - Hilfe

Verfasst: 26.07.2006 20:46
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 ...

Verfasst: 28.07.2006 07:34
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);