За последние 24 часа нас посетили 17760 программистов и 1662 робота. Сейчас ищут 1186 программистов ...

Php7 и переменные.

Тема в разделе "Прочие вопросы по PHP", создана пользователем victort, 27 янв 2018.

Метки:
  1. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    Перезаливаю сайт на новую платформу с php4 на php7. Столкнулся с такой проблемой если переменная не заявлена в функции то php7 ругается на нее и в итоге я ее объявляю где нибудь как NULL так чтобы она не попала под нужное значение. Ну это пол беды у меня есть строка объединения массивов в один так мне выдается ошибка что такой ключ не задан. Так я же его создаю. Как мне побороть данную ситуацию:
    Код (Text):
    1.  $sv['id_prof_f']=array_merge($sv4['id_prof_f'], $sv3['id_prof_f'], $sv2['id_prof_f']);
    А вот какую ошибку мне выдает:
    Notice: Undefined index: id_prof_f in
    Warning: array_merge(): Argument #1 is not an array in
    Может это из-за того что БД пока пустая и массив с данным ключом не получил свое значение? Мне вначале в БД таблицы заполнить а потом отлаживать функции?
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    там где формируете этот массив $sv4['id_prof_f'] обязательно проверяйте сформировался он или нет.. если нет - тогда создавайте там пустой массив.. тогда дальше избавитесь от необходимости проверять существование массива...
    а так то да.. ошибка так и будет вылазить.. вы скармиваете переменную которой не существует в функцию которая ожидает массив)
    а вот $sv['id_prof_f'] это лучше всего где то вначале объявить как то так $sv = [];
     
  3. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    А как проверить? Через if? Потому что там где у меня прописаны POST массивы он ругается в итоге я их закрыл проверкой if($_POST) - подскажите как правильно?
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Нет. Ты создаешь в массиве $sv. А в PHP ругается, что такого ключа нет в $sv4, $sv3 или $sv2.
     
  5. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    [vs] но их я получаю через созданную функцию которая обращаясь к БД создает список этих ключей и отдает их командой return. Короче я понял из-за того что у меня непонятно как срабатывает
    Код (Text):
    1. mysqli_fetch_all($result, MYSQLI_ASSOC);
    А точнее по какой то причине при проходе циклом по ключам я получаю ошибку. Т.е. проверка показала вот что - что получив массив и проходя по нему через цикл срабатывает только первый проход а на остальные идет ругань. Хотя выводя полученный массив на экран через print_r я все ключи и данные к ним вижу.
    Вот как я делаю обращение к БД:
    Код (Text):
    1. $link_db=con_db(); // подключение к БД
    2. $query = "SELECT" // команда запроса
    3. $result = mysqli_query($link_db,$query); // выполняю запрос
    4. $res = mysqli_fetch_all($result, MYSQLI_ASSOC); // получаю массив
    5. $rows=count($res); получаю кол-во элементов в массиве
    6.     for ($num=0; $num<$rows; $num++){
    7. $id = $res[$num]['id']; // отдаю переменной значение
    8. } mysqli_close($link_db); // закрываю соединение с БД
    В созданной отдельно теме мне сказали что все должно работать. Но при прохождении второй раз по циклу получаю ошибку. Полученный массив вне цикла значит его я уже не трогаю и переменные уже им получены.

    Поясните пожалуйста может еще вот какой моммент - может ли быть ошибка если я пишу вот так:
    Код (Text):
    1. $link_db=con_db(); // подключение к БД
    2. $query = "SELECT" // команда запроса
    3. $result = mysqli_query($link_db,$query); // выполняю запрос
    4. $res = mysqli_fetch_all($result, MYSQLI_ASSOC); // получаю массив
    5. $rows=count($res); получаю кол-во элементов в массиве
    6.     for ($num=0; $num<$rows; $num++){
    7. $id = $res[$num]['id']; // отдаю переменной значение
    8. // когда по данному значению надо получить параметр с другой таблицы и тогда я делаю вот как:
    9. $query1 = "SELECT" // запрос
    10. $result1 = mysqli_query($link_db,$query1);  // выполняем запрос
    11. $res1 = mysqli_fetch_all($result, MYSQLI_ASSOC);  // получаем массив
    12. $name = $res1[0]['neme']; // передаем значение переменной так как оно одно то через 0.
    13. } mysqli_close($link_db); // закрываем соединение
     
  6. victort

    victort Активный пользователь

    С нами с:
    8 сен 2010
    Сообщения:
    86
    Симпатии:
    2
    конечно вот здесь запись $res1 = mysqli_fetch_all($result1, MYSQLI_ASSOC);