Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Массив в ООП
maax  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 92
Пользователь №: 41664
На форуме: 1 год, 4 месяца
Карма:




Делаю проверку на ввод слов что бы свое не могли напечатать а только то что будет в списке, почему то видит только первую строчку в array - test1,остальные не видит

public function add()
{

if ($_SERVER["REQUEST_METHOD"] !== "POST") {
// Method Not Allowed
http_response_code(405);
header("Allow: POST");
$this->setFieldError("main", "Method Not Allowed");
return;
}

$pole1 = $this->getRequestParam("pole1");

$user = new Auth\User();

$res = $user->getArray();

foreach($res as $key => $value)
{
if ($pole1 !== $value)
{
$this->setFieldError("pole1", "неправильное поле 1");
return;
}

try {
$new_user_id = $user->addinv($pole1, $pole2);
} catch (\Exception $e) {
return;
}

$this->setResponse("redirect", ".");
$this->status = "ok";
}
}


и вот список разрешенных слов отдельным файлом

namespace Auth;

class User
{
public function getArray()
{
$arr = array(
'1' => 'test1',
'2' => 'test2',
'3' => 'test3',
'4' => 'test4',
'5' => 'test5'
);
return $arr;
}
}


или например если взять такую проверку то она работает как надо

$val = "test1";

if ($pole1 !== $val)
{
$this->setFieldError("pole1", "неправильное поле 1");
return;
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1731
Пользователь №: 19760
На форуме: 7 лет, 16 дней
Карма: 58




Во-первых есть замечательная ф-ция in_array().
Во-вторых что значит видит только первую? print_r($res) - массив весь?


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maax  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 92
Пользователь №: 41664
На форуме: 1 год, 4 месяца
Карма:




TranceIT

Array ( [1] => test1 [2] => test2 [3] => test3 [4] => test4 [5] => test5 )


Да print_r($res) показывает норм и в этом то и проблема, там дальше просто идет запись в таблицу через строку

$new_user_id = $user->addinv($pole1, $pole2);


и когда я пишу test1 это записывается в таблицу а test2 test3 и т д уже не хотят записываться
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1731
Пользователь №: 19760
На форуме: 7 лет, 16 дней
Карма: 58




Ты же бежишь по всем значениям массива и как только pole не соответствует текущему значению в массиве работа add() прекращается.

Array ( [1] => test1 [2] => test2 [3] => test3 [4] => test4 [5] => test5 )


Подумай в каком порядке foreach бежит по массиву, посмотри на условие внутри цикла и сам ответь на свой вопрос.

И ООП тут ни при чем...


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maax  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 92
Пользователь №: 41664
На форуме: 1 год, 4 месяца
Карма:




TranceIT
Подумал,и еще больше запутался
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1731
Пользователь №: 19760
На форуме: 7 лет, 16 дней
Карма: 58




maax
Чтобы понять почему так происходит погугли про цикл foreach. Ты не понимаешь как он работает.

Чтобы перейти к той логике, которую ты пытаешься заложить надо убрать цикл и использовать ф-цию in_array().


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
maax  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Пользователь
**

Профиль
Группа: Пользователь
Сообщений: 92
Пользователь №: 41664
На форуме: 1 год, 4 месяца
Карма:




TranceIT

Перед тем как переписывать все на ооп я использовал foreach и он работает там идеально на старом коде
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
TranceIT  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



...Один я одинаковый...
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1731
Пользователь №: 19760
На форуме: 7 лет, 16 дней
Карма: 58




Цитата (maax @ 19.10.2016 - 13:16)
Перед тем как переписывать все на ооп я использовал foreach и он работает там идеально на старом коде


Спорить не буду. Старый код я не видел. Но в том что ты предоставил в первом посте работать не будет. Потому что условие if ($pole1 !== $value) будет верным на первой же итерации при любом значении pole1 отличным от первого элемента массива $res, что приводит к завершению работы add().

Замени цикл на проверку присутствия в массиве значения и все заработает.


--------------------
Безвозмездно помогаю только тем, кто сам пытается что-то сделать.

Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!

user posted image
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса