За последние 24 часа нас посетили 22836 программистов и 1200 роботов. Сейчас ищет 661 программист ...

Объясните логиrу работы интерпретатора PHP

Тема в разделе "PHP для новичков", создана пользователем tavintavan, 21 май 2018.

  1. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Объясните логиrу работы интерпретатора PHP
    Есть файл html, в котором js скрипт берет данные с его формы и направляет ajax'ом на файл обработчик php.
    В файле php написан: 1) скрипт подключения к базе данных, 2) функция записи в MYSQL данных из html формы.
    Но если вывести скрипт подключения к MYSQL в отдельный файл и подключать его через Require_once() База данных не подключается.
    Почему кто может объяснить?

    Почему файл обработчик не подключает внешний файл в котором прописана функция подключения к базе данных.
    Ощущение будто файл обработчик видит только данные которые подаются AJAX'ом и в упор не видит что подключает require_once()/
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Зачем выносить скрипт подключения в отдельный файл? Вынесите только данные для подключения. Абстракции начнете сооружать, когда с основами разберетесь.

    По сабжу: может, путь к файлу неверно указали или еще что, мы ж не телепаты.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    проверь пути
    проверь права
     
  4. Abyss

    Abyss Старожил

    С нами с:
    12 дек 2015
    Сообщения:
    1.298
    Симпатии:
    218
    Адрес:
    Default city
    почитай логи
     
  5. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    В общем в файле database.php
    за комментировал строки 9,16,17 заработало.
    Не понял почему, в обертке функции не работает, ведь функция все равно возвращает переменную $link
    PHP:
    1. <?php
    2. //подключение базы данных
    3. define('MYSQL_SERVER', 'localhost');
    4. define('MYSQL_USER', 'root');
    5. define('MYSQL_PASSWORD', '');
    6. define('MYSQL_DB', 'ajaxphp');
    7.  
    8.  
    9. //function db_connect(){
    10.     $link = mysqli_connect(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB)
    11.         or die("Error: ".mysqli_error($link));
    12.     if (!mysqli_set_charset($link, "utf8")){
    13.         print("Error: ".mysqli_error($link));
    14.     }
    15.  
    16. //    return $link;
    17. //}
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    куда возвращает? в космос?
     
  7. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    @tavintavan, было более логично, чем сделали (походу вы совсем не прислушиваетесь к тому, что вам пишут). Просто после подключения файла нужно было вызывать ф-цию.

    И почему при !mysqli_sеt_chаrsеt тоже не diе? Это достаточно критичная ошибка.
     
  8. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    Вот файл insert .php

    PHP:
    1. require_once ("database.php");
    2.  
    3. $query = "INSERT INTO news (title, text)  VALUE ('" . $_POST['title'] . "', '" . $_POST['text'] . "')";
    4. $result = mysqli_query($link, $query);
    5.  
    6. if (!$result){
    7.     die(mysqli_error($link));
    8. }
    если разкомментировать строки 6,16,17 в файле database.php
    доступ к базе не возможен, соответственно выходит ошибка.

    К безопасности не докапываемся, знаю что не соответствует. Это всего лишь лабораторная
     
    #8 tavintavan, 22 май 2018
    Последнее редактирование: 22 май 2018
  9. tavintavan

    tavintavan Новичок

    С нами с:
    29 апр 2018
    Сообщения:
    34
    Симпатии:
    3
    I
    То есть вы хотите сказать что значение переменой в файле 1, вызванное при помощи require_once() в файле 2 ДОСТУПНО для следующей обработки.
    А результат (returne) вычисления функции в файле 1, вызванный при помощи require_once() в файле 2 НЕ ДОСТУПНО для следующей обработки и чтоб получить доступ к результатам функции надо вызвать саму функцию в файле 2.
    Вы это имеете ввиду?
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Естественно.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    так про функции и как они работают почитай уже