@MargareQ

Какую функцию испольозвать для поиска в RedBeanPHP?

Использую юиюлиотеку redbean для регистрации у себя на сайте.
У меня используется функция R::findOne, которая ищет в базе данных независимо от регистра, то есть верхний он или нижний, он будет возвращать элемент из базы данных. Например:
В базу данных есть запись "Costea" и если человек например захочет авторизоватся он может спокойно написать в поле Логин "costea" или "cOsTeA", как это можно запретить в redBeanPhp или он тут не причём???
Вот сам код, если что-то не понятно:
<?php
require "db.php";
$data = $_POST;
if( isset($data['do_signup']) ) {
$errors = array();
  if( trim($data['login']) == ''){
    $errors[] = 'Введите никнейм!';
  }

  if( trim($data['email']) == ''){
    $errors[] = 'Введите Email!';
  }

  if( $data['password'] == ''){
    $errors[] = 'Введите пароль!';
  }

  if( $data['password'] != $data['password2']){
    $errors[] = 'Пароли не совпадают!';
  }

  if( R::count('users', "login = ?", array($data['login'])) > 0 ){
    $errors[] = 'Пользователь с таким никнеймом уже зарегестрирован!';
  }

  if( R::count('users', "email = ?", array($data['email'])) > 0 ){
    $errors[] = 'Пользователь с такой электронной почтой уже зарегестрирован!';
  }

if( empty($errors)) {
  $user = R::dispense('users');
  $user->login = $data['login'];
  $user->email = $data['email'];
  $user->password = password_hash($data['password'], PASSWORD_BCRYPT);
  R::store($user);
  echo '<div style="color: green;">Вы были успешно зарегестрированы!</div><hr />';
}
else {
  echo '<div style="color: red;">'.array_shift($errors).'</div><hr />';
   }
}
?>
  • Вопрос задан
  • 136 просмотров
Решения вопроса 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
В таблице надо ставить кодировку _cs (case sensitive).
А потом определиться на уровне кода как вы хотите чтобы это работало.
Если чтобы заходил только так как вводил изначально, то кроме кодировки ничего не надо настраивать больше.
Если только маленькими/большими, то в запросах и/или в коде везде надо приводить в один вид:
strtolower/strtoupper в php
UPPER/LOWER в mysql

В целом это не user friendly, да и при работе неудобно, всегда об этом надо будет помнить и самому и пользователю в каком именно виде он вводил логин.
Так что нормальная практика использовать _ci (case insensitive) и не запариваться на счет того как юзер ввёл свой логин. Если конечно это ограничение не продиктовано внешними условиями в виде стороннего софта который работает по другой схеме и надо её придерживаться.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы