2016-05-23 8 views
2

Для небольшого проекта, над которым я работаю, я хочу, чтобы пользователь мог зарегистрировать учетную запись, используя имя пользователя, но я не хочу настраивать базу данных, т.е. просто хочу сравнить имя пользователя пользователь вводит массив PHP.Сравнение ввода пользователя с массивом PHP

<?php 
$a=array("user1","user2"); 
for($a =0; $x<$arrlength; $a++){ 
if($username == $a){ //i want to say if $username is in array alert this and do nothing 
$echo print a new username, already taken; 
return false; 
else(
array_push($a,username);?> 

Я работаю с примерами w3 школы PHP и у меня есть что-то вроде этого (пользователь вводит «имя пользователя» в форме. Мне было интересно, как бы вы на самом деле реализовать эту функцию должным образом.

+1

Вы бы еще нужно хранить список пользователей, где-то, если вы хотите, чтобы навсегда сохранить пользователю , База данных - лучший способ. Но если вы действительно не хотите использовать базу данных, вам придется хранить ее в плоском текстовом файле. Вы можете сделать что-то вроде 'file_put_contents ('users.txt', serialize ($ a))' в конце файла для хранения содержимого $ a в файле users.txt. Тогда в начале файла вы будете делать '$ a = unserialize (file_get_contents ('users.txt'));' –

ответ

4

Вы могли бы просто использовать in_array() функцию:

<?php 
$usernames = array("user1", "user2", "user3", "user4"); 

if (in_array("username_from_user_input", $usernames)) { 
    echo "Got Username"; 
}else{ 
    echo "Username not found" 
} 

?> 
+1

Спасибо, Джордж, это то, что я искал, и это имеет смысл. Это всего лишь небольшой небольшой тест, который я делаю (я новичок в PHP) для себя за помощь! – Jon

+0

Да, проблем нет. –

+1

Иногда самый простой ответ - лучший ответ. – Drellgor

0

Вы можете использовать in_array:

if (in_array($username, $a){ 
    ... 
} 
2

Если вы хотите сохранить зарегистрированные учетные записи по запросам, их необходимо сохранить в файле или базе данных (или что-то еще ..), потому что сценарий запускается с самого начала при каждом запросе.

Вместо того, чтобы перебирать массив, вы также можете использовать функцию in_array. (http://php.net/manual/de/function.in-array.php)

Чтобы сохранить имена пользователей, взгляните на функции файла. (например, http://php.net/manual/en/function.file-put-contents.php для записи в файл и file_get_contents или файла (..) для чтения файла). (Для реальных проектов обязательно заблокируйте файл, чтобы предотвратить условия гонки.)

+1

S/he также следует рассмотреть возможность блокировки доступа к файлу на сервере. –

0

Попробуйте решение других пользователей, но вы можете комбинировать их с Чертами.

Вы можете создать Черты под названием VerifyUser со следующим содержанием:

trait VerifyUser { 
    public function verifyUser($user){ 
     if (in_array($username, $usersArray)){ 
      echo $username . "is already taken"; 
     }else { 
      array_push($usersArray, $username); 
     } 
    } 
} 

Не забудьте добавить свой собственный массив в класс, если вы работаете в среде ООП. Добавьте этот признак с инструкцией use VerifyUser.

class UsersCollection{ 
    use VerifyUsers 

    $usersArray= ["user1", "user2"]; 

    $this->verifyUser("user1"); //It echo the custom message you could return a boolean value and then specify a custom behaviour. 
} 
+0

Я думаю, что это слишком продвинутый для кого-то нового для PHP. –

+0

Исправьте, но я только ответил на эту проблему и могу быть полезен для других пользователей newbies или advanced. Ответ заключается в использовании функции 'in_array', но я только раскрыл способ улучшить это, облегчая повторное использование кода. – frankfullstack

1

поздний ответ, но потому, что я нахожусь на ternary настроение, вот он идет:

echo (in_array("someuser", array("user1","user2"))) ? "Got Username" : "Username not found"; 
+0

Синтаксическая ошибка сэром ;-) отсутствует, что один старый ')' – Darren

+0

Заменено, Tks !! –

+1

Получил мой голос, поскольку это действительная альтернатива (не говоря уже о том, что я тоже люблю троицу ;-)) – Darren