За последние 24 часа нас посетил 22691 программист и 1014 роботов. Сейчас ищут 709 программистов ...

Не могу исправить ошибку

Тема в разделе "PHP для новичков", создана пользователем Kythadrin, 29 апр 2017.

  1. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Написал по видео уроку функции, которые подключаются к базе данных и выводят данные на сайт, но выводит ошибку: Fatal error: Call to a member function close() on a non-object in Z:\home\site\www\functions\connect.php on line 10.
    PHP:
    1. <?php
    2.     $mysqli = false;
    3.     function connectDB () {
    4.         global $mysqli;
    5.         $mysqli = new mysqli("localhost", "root", "","news");
    6.         $mysqli->query("SET NAMES 'utf-8'");
    7.     }
    8.     function closeDB () {
    9.         global $mysquli;
    10.         $mysqli->close ();
    11.     }
    12. ?>
     
  2. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Забаньте его.
     
  3. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Собсна, вся суть видеоуроков. Научился печатать, но не понимать то, что делаешь.
    Начнем с того, что выкинь видеоуроки.
    Далее. Ты попробовал перевести ошибку, чтобы понять ее смысл?
    Третье. Почему бы не передавать с closeDB твое $mysqli в виде параметра?
    Четвертое. Ты точно пошагово понимаешь, что происходит в твоем коде?
     
    merOsever нравится это.
  4. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Смысл ошибки я понимаю и знаю, что происходит в моем коде.
    Спасибо, в виде параметра заработало.
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    А почему до этого не работало, знаешь?
     
    merOsever нравится это.
  6. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Нет, можешь сказать?
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Есть вероятность, что переменная $mysqli у тебя где-то переопределяется. Либо нарушен порядок вызовов был. Но я ставлю на первое. Вообще, глобалки плодить - не лучшая идея. Лучше завести себе хранилище в виде статичного класса.
     
    merOsever нравится это.
  8. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    У меня возникла, другая проблема.
    Теперь выдает ошибку:
    Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in Z:\home\site\www\functions\functions.php on line 12
    Как исправить эту ошибку?
    Я понимаю, что это за ошибка. У меня не получается исправить.
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Вы в проекте используете mysqli_, а тут ошибка пришла от mysql_... Ошиблись расширением немного. Чуть внимательнее надо быть.
     
  10. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Я решил все таки выкинуть видео уроки и это был мой самый умный поступок, написал с нуля сам и все работает, почти.
    У меня вместо данных из поля intro-text выводит id, можешь помочь?
    PHP:
    1. <?php
    2.                $connect = mysql_connect(localhost, root, '');
    3.                $select_db = mysql_select_db('news');
    4.                $select = mysql_query("SELECT  * FROM news");
    5.                  while($result = mysql_fetch_array($select)) {
    6.                    echo'<table>
    7.                       <tr>
    8.                         <th><img src="./images/news/',$result[id],'.jpg" class="newsimg"></th>
    9.                         <th>
    10.                           <h1> <font color="orange" > ',$result[title],' </h1></font>
    11.                           <p class="stroke">
    12.                             ',$result[intro-text],'  
    13.                           </p>
    14.                         </th>
    15.                       </tr>
    16.                     </table>
    17.                     <hr noshade class="line2">';
    18.                  }
    19.              ?>
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    var_dump($result); в теле цикла сделай, погляди, что у тебя в само результате. Быть может в базе данные сохранены неправильно изначально.

    Далее, уходи от использования mysql_ расширения, переключайся на mysqli_. Как минимум потому, что код с mysql_ не будет работать в современных версиях PHP. Как максимум, потому что mysql_ имеет кучу проблем, включая проблемы с безопасностью.
     
  12. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    При использовании var_dump($result); значение intro-text выводится правильно.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Так, а почему ключи массива без кавычек?
     
  14. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Если я правильно понимаю то, что такое ключ, то без кавычек, потому что перестает работать и выдает ошибку.
     
  15. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Какую?

    Если что, я про то, что $result[title] - так писать нельзя, надо $result['title']
    --- Добавлено ---
    По-хорошему пхп уже должен был начать ругаться. У вас вывод ошибок включен?
     
  16. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Так писать какое-то время было можно (не знаю на сколько долго и выводились ли при этом ворнинги), когда пых видел $result[title], то сначала пытался найти константу title, а затем преобразовывал title в строку. В итоге всё работало.

    В любом случае, различных неявных преобразований лучше избегать, даже если php на это не ругается, хотя бы потому, что от таких вещей авторы языка стараются уходить и то что раньше прокатывало, завтра может начать падать с ошибкой.
     
  17. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    Теперь все работает , спасибо.
     
  18. Kythadrin

    Kythadrin Новичок

    С нами с:
    29 апр 2017
    Сообщения:
    10
    Симпатии:
    0
    У меня тут еще вопрос возник. Как переключиться на mysqli_?
     
  19. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    Да у него просто опечатка в коде была, я один что ли заметил ?
    PHP:
    1.        global $mysquli;
    Маскьюли такие маскьюли
     
    Fell-x27 нравится это.
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.155
    Симпатии:
    1.769
    Адрес:
    :сердА
    Да, я в курсе, но, емнип, при этом если не ворнинг, то нотис швырялся как минимум и уже давно.
    --- Добавлено ---
    почитать документацию, понять, в чем разница, переписать код с одного адаптера на другой. Прям вот переключать ничего нигде не надо. И то и то входит в стандартныц дистриб пыхи. Ну...входило. С версии 7+ адаптер mysql_ выпилен начисто. С версии 5.3, плюсминус, он объявлен устаревшим и кидает ворнинги.

    И, раз пошла такая пьянка, выкиньте свой сыплющий песком, мертвый уже лет 5 минимум, денвер с php5.1.2 и поставьте себе если уж не виртуалку с линухой и нормальным серверным окружением, то, хотя бы, OpenServer, в котором есть php5.6 и 7+
     
  21. Mitai

    Mitai Новичок

    С нами с:
    23 окт 2016
    Сообщения:
    155
    Симпатии:
    24
    Начальный Уровень

    1)Разработка веб-приложений с помощью PHP и MySQL», 5-е издание, Люк Веллинг и Лора Томсон(2017) - пока только на английском, перевод будет в ближайшее время
    2)Д.Скляр «PHP 7. Руководство по созданию интерактивных веб-сайтов»(2017)

    Углубленное Изучение

    3)М.Зандстра «PHP. Объекты, шаблоны и методики программирования»(2016)
    4)Д.Котеров, И. Симдянов «PHP 7. Наиболее полное руководство»(2016)-есть