Kezdőoldal » Számítástechnika » Programozás » Segítene valaki? PHP

Segítene valaki? PHP

Figyelt kérdés

Adott egy regisztrációs script a gond vele a névellenőrzésben van. Akárhányszor újra beregisztrálja ugyanazt a nicket:



"<?php

include('PATHtoYOUR/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 'Your selection '.$_POST['username'].' was accepted... your account was created. You may now login!!!';

$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('PATHtoYOUR/chat/lib/data/users.php', 'r+');

fseek($file_edit, -3,SEEK_END);

fwrite($file_edit, $new_user_information);

fclose($file_edit);

}

//end of php

?>

<table border="0" align="center">

<table border="0" align="center">

<tr>

<td>Use the form below to create a Chat user account.</td>

</tr>

<tr>

<td>

<!-- collect username and password information via form -->

<form action="" method="post">

Username:<input name="username" type="text" value="" /> 16 Character Maximum<br>

Password:<input name="password" type="text" value="" /> No requirements.<br>

<input name="submit" type="submit" value="Create" />

</form>

</td>

</tr>

</table>

</table>"



2020. jan. 13. 05:44
 1/6 A kérdező kommentje:

És így néz ki a file amibe írja és amiben ellenőriznie kéne:


"<?php


// 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,2);


// 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,2);


// 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,2);

?>"

2020. jan. 13. 05:46
 2/6 anonim ***** válasza:

"így néz ki a file amibe írja és amiben ellenőriznie kéne"

Hát ez a kód egész egyértelműen nem csinál semmi ilyesmit.

2020. jan. 13. 09:27
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:

De, ez beleírja, csak az ellenőrző rész nem működik. Ez itt:


$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;


}

2020. jan. 13. 09:37
 4/6 anonim ***** válasza:
90%

Oké, akkor MOST hagyd ezt abba és soha többé ne kezdj programozni!

Nem tudom, hogy te írtad-e ezt a kódot vagy valahonnan másoltad, de eltörném a kezét, aki írta, mert ez tipikus mintapéldája annak, hogyan NEM szabad csinálni!


1. Regisztrációhoz adatbázist kell használni, nem pedig egy PHP file-ba array-ként behányni mindent. Ha lesz 5000 usered, akkor minden egyes esetben felépül egy 5000 elemű tömb és abban keresgélsz? Óriási memóriapazarlás!

2. Jelszavakat NEM tárolunk plain text-ben, pláne nem egy PHP file-ban az összes user jelszavát!

3. User inputot SOHA nem használunk filter nélkül. Te simán behányod a PHP kódba. És ha a user történetesen azt adja usernévnek, hogy ';?> akkor szét is barmolta az egészet. Sőt! Mivel ellenőrzés nélkül PHP kódba tolod ki a user inputot, ami utána a szerveren fog futni, AKÁRMIT megtehet a szerveren!

4. Telán illene definiálni a változókat: (!$username_used and !$password_error)

Itt ugyanis ha nincs használatban a usernév, akkor nem lesz definiálva a $username_used változó!


Neked még a Hello World programnál kellene tartanod, hogy egyáltalán megértsd, hogy is működik egy program, meg maga a PHP, majd utána próbálkozz ilyesmivel!

2020. jan. 13. 10:44
Hasznos számodra ez a válasz?
 5/6 Koplárovics Béci ***** válasza:
100%
A for()... sor végéről vedd le a ;-t. Mert így iterációt nem csinál (azaz i-vel elszámol 0-tól $user_amount-ig csak úgy "magában"), de a {} közé tett részt csak az elszámolás után és csak egyszer hajtja végre.
2020. jan. 13. 12:43
Hasznos számodra ez a válasz?
 6/6 A kérdező kommentje:
Kösz béci! :)
2020. jan. 14. 00:53

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!