PHP ověření zdali je uživatel v databázi

Od: Datum: 30.12.12 16:39 odpovědí: 6 změna: 31.12.12 19:40

Ahoj mám stránku kde se registrují uživatelé registrace.php:
include('chat/lib/data/users.php';);
//check existing users

if ($_POST['username'])
{
//if user entered a name
}
//collect information from users.php
$user_amount = count($users);
for ($i=0; $i <=$user_amount;$i++);
{
//check usage of name
if (strtolower($_POST['username']) == strtolower($users[$i]['userName']))
$username_used = 1;
}
//make sure user chose a password
if (!$_POST['password'])
$password_error = 1;
//ensure username avalible and password chosen
if (!$username_used and!$password_error)
{
//present user id accepted message
print '
Účet '.$_POST['username'].' byl vytvořen...

Můžete se přihlásit





';
$next_user = $user_amount++;
$new_user_information = '
//remote created from '.$_SERVER['REMOTE_ADDR'].'
$users['.$next_user.'] = array();
$users['.$next_user.']['userRole'] = AJAX_CHAT_USER;
$users['.$next_user.']['userName'] = ''.$_POST['username'].'';
$users['.$next_user.']['password'] = ''.$_POST['password'].'';
$users['.$next_user.']['channels'] = array(0,1);
?>';
$file_edit = fopen('chat/lib/data/users.php', 'r+';);
fseek($file_edit, -3,SEEK_END);
fwrite($file_edit, $new_user_information);
fclose($file_edit);
}
//end of php
?>









Registrace




Uživatelské jméno:
Max. 16 znaků

Heslo:





A stránku kde se zapisují data registrace, users.php:
/*
* @package AJAX_Chat
* @author Sebastian Tschan
* @copyright (c) Sebastian Tschan
* @license GNU Affero General Public License
* @link https://blueimp.net/ajax/
*/

// List containing the registered chat users:
$users = array();

// Default guest user (don't delete this one):
$users[0] = array();
$users[0]['userRole'] = AJAX_CHAT_GUEST;
$users[0]['userName'] = null;
$users[0]['password'] = null;
$users[0]['channels'] = array(0);

// Sample admin user:
$users[1] = array();
$users[1]['userRole'] = AJAX_CHAT_ADMIN;
$users[1]['userName'] = 'admin';
$users[1]['password'] = 'admin';
$users[1]['channels'] = array(0,1);

// Sample moderator user:
$users[2] = array();
$users[2]['userRole'] = AJAX_CHAT_MODERATOR;
$users[2]['userName'] = 'moderator';
$users[2]['password'] = 'moderator';
$users[2]['channels'] = array(0,1);

// Sample registered user:
$users[3] = array();
$users[3]['userRole'] = AJAX_CHAT_USER;
$users[3]['userName'] = 'user';
$users[3]['password'] = 'user';
$users[3]['channels'] = array(0,1);
//remote created from 89.202.224.76
$users[4] = array();
$users[4]['userRole'] = AJAX_CHAT_USER;
$users[4]['userName'] = 'Luky123';
$users[4]['password'] = 'aaaaaaaa';
$users[4]['channels'] = array(0,1);

//remote created from 89.202.224.76
$users[5] = array();
$users[5]['userRole'] = AJAX_CHAT_USER;
$users[5]['userName'] = 'Lukccaa';
$users[5]['password'] = 'aaaaaaaa';
$users[5]['channels'] = array(0,1);

//remote created from 89.202.224.76
$users[6] = array();
$users[6]['userRole'] = AJAX_CHAT_USER;
$users[6]['userName'] = 'Lukccaa';
$users[6]['password'] = 'bbbbbbbb';
$users[6]['channels'] = array(0,1);

//remote created from 89.202.224.76
?>

Problém je že když se zaregistruji 2x se stejnou přezdívkou a dám jiné heslo tak se mohu přihlašovat obouma účtama. Co mám doplnit aby se při registraci pokud je jméno již zaregistrované oběvilo "Tato přezdívka je obsazena" . Případné info ještě doplním. Snad jsem to napsal srozumitelně. Děkuji Vám za odpověď


Seznam odpovědí:
 
moment čekejte prosím, probíhá přenos dat...
Zobrazení struktury odpovědí v otázce
Skrytí struktury odpovědí v otázce
Zobrazení struktury odpovědí v otázce

 

Odpovědi na otázku:
Datum: 30.12.12 17:05
avatar

Duplicitní jména uživatelů by se ale už měla kontrolovat zde:

//check usage of name

if (strtolower($_POST['username']) == strtolower($users[$i]['userName']))
Dokonce lucka a LuCkA to taky nepovolí, není to case sensitive. Jelikož php rozumím jak koza petrželi (ňam ňam), tipnul bych si, že to v této podmínce správně zkontroluje, pak to správně nastaví $username_used = 1; a pak to selže na podmínce if (!$username_used and!$password_error). (Podle googlu to sice takhle fungovat má, všechno nenulové/nenull je true, ale kdo ví.. radši bych tam dal normální booleany.)
Případně můžete do těch špatných větví hodit nějaký print nebo echo, nejlépe i s hodnotou řídicí proměnné, aby se poznalo, kdy to kam vleze.

Ohodnoceno: 0x
 
Od: lukik444
Datum: 30.12.12 17:08

Děkuji za odpověď. Nemohl by jste mi někdo prosím ten kód upravit? Nějak nevím co s tím. Prosím

Datum: 31.12.12 11:33
avatar

No jak říkám, doplňte si tam párkrát obyčejný print (nebo echo), "vzor" tam už někde máte. Typu: "jsem před podmínkou, proměnná je: ...", "jsem uvnitř true větve", "jsem uvnitř false" a pak pomalu dojdeme k tomu, kam se to dostane při dvojité registraci.

Ohodnoceno: 0x
 
Od: luky444
Datum: 31.12.12 17:44

Já tomu ale nerozumím. Můžete to prosím skusit poopravit? Děkuji budete moc hodný.

Datum: 31.12.12 17:55
avatar
tohle je blbost, php nezna AND, to zna SQL!
(!$username_used and!$password_error
nahradit
(!$username_used &&!$password_error
doplněno 31.12.12 20:07: tak pardon, zastydl jsem v dobe, kdy to nefungovalo. chybu tam nevidim. takze bych jel IF po IFu s vypisovanim aktualnich hodnod, co tam lita a jak to vyhodnocuje. to je nejlehci...
Ohodnoceno: 0x
 
Datum: 31.12.12 19:40
Ohodnoceno: 0x
 

 

 

 

 

Přihlásit se k odběru odpovědí z této otázky:

Neneseme odpovědnost za správnost informací a za škodu vzniklou jejich využitím. Jednotlivé odpovědi vyjadřují názory jejich autorů a nemusí se shodovat s názorem provozovatele poradny Poradte.cz

 
Copyright © 2004-2016 Poradna Poradte.cz. Všechna práva na poradně Poradte.cz vyhrazena.