Проверьте версию пхп. Она должна быть не ниже 5.4. Если версия ниже, и нет возможности её поднять, тогда замените строку с сокращённым синтаксисом объявления массива на этот вариант:
static $conns = array();
Пока правил текст вы уже написали ответ. Спасибо за оперативность. Поменял версию на 7.1 Буду на ней всё тестить. Ошибка в синтаксисе пропала, но появились другие. Выше представил код который нормально работает на версии 7.1(имею ввиду не вызывает ошибок)
P.S. Сейчас продолжаю тестить этот способ и столкнулся с тем что я не могу обратиться из файла к подключению mysql. Получается что не возвращает подключение.
Нет, возвращается объект mysqli (если в процедурном - то это был бы тип "ресурс"), с которым вы будет производить дальнейшие операции (выборка из базы, и т.п.).
return conn('my_database');//[b]Просто возвращаем имя базы?[/b]
}
На сколько я понял тут задаётся имя базы, но я его так же получаю из файла, так как "мастер создания подключения" его записывает в файл с настройками подключения и я его оттуда беру.
И вот эта строчка меня смущает "$conns[$dbName] = new mysqli($host, $user_name, $password, $dbName); " Почему например здесь не "$conns[$host]... " или вообще не отдельная переменная ? Ведь по идее мы можем после получения переменных из фала сразу сделать подключение с обычной переменной "$con = new mysqli($host, $user_name, $password, $dbName); " Просто так же объявим её статичной в начале "static $con;" и всё, зачем мы используем именно "$conns[$dbName]"? Или это делается просто для простоты проверки? Т.е. Если есть какое либо присвоенное значение в массиве $conns[] с элементом массива $dbName то просто вернуть это значение? Получается что в моём случае эта функция не совсем корректна. Дело в том что у меня сначала происходит просто подключение к серверу, а после этого создаётся база и используется в подключении во всех остальных манипуляциях. Но идея с "extract" отличная.
Скажите а если я сделаю следующим образом:
т.е. по идее я смотрю в файл, если там присутствует переменная, то я пытаюсь подключиться с её значением, если же нет то я просто выполняю подключения к серверу MYSQL для последующего создания базы. Правильно?
return conn('my_database');//[b]Просто возвращаем имя базы?[/b]
}
Вот это для меня вообще непонятно, это всё в классе? Т.е. Мы обрабатываем исключение вызова функции myDatabase() Если там есть ошибка то выводим её на экран?
Первый раз просто сталкиваюсь с использованием extract и по этому многие моменты непонятны. Например, почему мы объявляем постоянный массив "static $conns = [];" и сразу проверяем существует ли в нём "$dbName"? Как до if(!isset($conns[$dbName])) в нём появится значение $dbName? Так же мне непонятно, почему мы присваиваем значению массива подключение к базе? "$conns[$dbName] = new mysqli($host, $user_name, $password, $dbName); "
Чёт какой то бардак в голове от данного примера. Может я конечно туплю, но я был бы очень признателен если бы вы растолковали что к чему.
Потому как она постоянно говорила о том что такого файла нет и что имя файла не может быть пустым. Параметры передавал так же как и в isset. Но в isset всё заработало с этими же параметрами.
Потом перебрав все страницы и исправив везде код для создания класса, я понял что это не совсем удобно, так как в каждом файле нужно прописывать путь подключения файла, а в некоторых из них он разнится, из этого следует что может рано или поздно произойти путаница не будет доступа к файлу. В общем я решил что единственно правильным решением будет сделать единственное подключение в классе создания подключения. Теперь у меня класс выглядит так:
Подскажите, может какие советы будут ещё по этому классу? Здесь я не проверяю на предмет существования файла, так как уверен в его существовании и прописываю его в одном месте.
Создание нового подключения теперь происходит так:
А как теперь в этот класс подключить файл connect.php? Чтоб не загружать 2 файла по отдельности, а загрузить один класс который будет подключаться к БД используя файл настроек.
Осталось теперь научиться наращивать в нём функционал для дальнейших манипуляций. Например сейчас думаю о том как внедрить проверку на защиту от SQL инъекций с помощью плейсхолдеров. В сети куча готовых примеров, но тупо вставить код и надеяться что он будет работать как мне нужно не понимая сути написанного не хотелось бы. По этому хотел бы узнать, может кто кинет ссылкой(на русском) где разжёвано как правильно составлять плейсхолдеры?
Доброго времени суток.
Пытаюсь научиться применять классы, но что то не со всем выходит.
Грубо говоря, если я делаю класс на запись в файл данных, то и потом перед вызовом класса определяю переменные которые в нём задействованы, то всё нормально.
Класс для записи в файл:
$file='connect.php';//Подключаем обработчик записи данных подключения в файл
$write_file= new write_connect($host,$bd,$login,$passw,$file);
Этот код работает исправно как я и хотел. Т.е. Есть форма мастера которая создаёт первоначальное подключение к БД и записывает его в файл connect.php.
А вот после этого необходимо из класса подключения к базе mysql увидеть переменные в этом файле и их значения.
Нашёл самый элементарный пример(на этом же форуме) и пытаюсь им воспользоваться, но с одной оговоркой, данные я хочу передать из файла который подключил через require_once 'connect.php'
Код класса:
Что-то у меня в голове возникла мысль. Ведь можно сделать небольшое модальное окно для ввода данных, которое бы отправляло бы данные на страницу в массиве POST и тогда их можно будет прочитать. Причём модальное окно можно построить на простом html+css. Как думаете, получится такой ход?
Тебе надо просто вывести данные ниже и все? без перезагрузки страницы?
Да, вывести данные по нажатии на кнопку. в текстовое поле (Добавление)
Heavenanvil пишет:
А что на счёт JS?
Или вам нужно именно php?
Хотелось бы именно на PHP решить эту задачу если это вообще возможно, но что то мне кажется что у PHP нет таких возможностей, ведь он больше серверный язык, и данные пользователя обрабатывает в основном после попадания на сервер.
Сейчас пытаюсь вывести в текстовое поле данные введённые на этой же странице, но без отправки, данные не попадают в пост, следовательно до данных средствами PHP нельзя добраться, правильно я понимаю?
Вот простой пример(здесь всё работает, но то как это работает, к сожалению меня не устраивает):
Введите первое значение: <inputtype="text"style="width: 90px"name="tx1"><br><br>
Введите второе значение: <inputtype="text"style="width: 90px"name="tx2"><br><br>
<inputtype="submit"value="Внести данные в текстовое поле"name="but"><br><br>
<textareastyle="width: 500px; height: 100px" >
<?php
echo "Первое значение: ".$_REQUEST['tx1']."\n ";
echo "Второе значение: ".$_REQUEST['tx2']."\n ";
?>
</textarea>
</form>
</body>
</html>
Если данные не отправлять, то считать данные после ввода из текстовых полей возможно средствами одного только PHP?
Может есть какие нибудь хитрости позволяющие воспользоваться кнопкой <input type="button" onclick=""> ? для того чтобы по нажатию на неё осуществить считывание данных которые пользователь занёс в поля?
Возможно я ошибаюсь, но по крайней мере на Linux не достаточно просто написать скрипт для отправки письма, так как должен быть ещё в локальной системе SMTP сервер. На счёт Windows и денвер не могу сказать. Хотел спросить, в contact.php какая инфа находится?
Грубо говоря, я вызываю окно с таблицей в которую я хочу передать поле из таблицы
Для начала, смените расширение файла с *.html на *.php , а дальше уже определите в вашей форме метод передачи данных (GET или POST), и на основе этого уже работайте с соответствующим выбору суперглобальным массивом. Скорее всего вам нужен будет $_POST.
Да не, вы не правильно поняли. Я привёл здесь просто кусок кода который я только начал, сохранён он с расширением *.php. Передавать данные я буду естественно через POST, но беспокоит меня сейчас совсем не это. Я уже понял как сделать кнопку в поле которая будет создавать диалоговое окно, но как создать обработчик события двойного клика из диалогового окна по которому содержимое поля таблицы из одной строки добавляется в таблицу первой страницы.
vertical-align:middle;/* Выравнивание по середине */
border-width:1px;
border-color:#000;
}
input[type="submit"]{
width:27px;/* Ширина кнопки */
height:20px;/* Высота кнопки */
vertical-align:middle;
}
Из этого получается конструкция которая мне нужна, только вот непонятно что делать после того как я вызову диалоговое окно по нажатию кнопки.
Грубо говоря, я вызываю окно с таблицей в которую я хочу передать поле из таблицы(справочника с наименованиями) mysql, поля заполняются до тех пор пока все данные из таблицы mysql не будут перенесены. После этого я выбираю нужную мне строчку и двойным нажатием добавляю её в поле ввода на первой форме, после чего диалоговое окно закрывается и я продолжаю работать с первой формой.
Доброго времени суток!
Пытаюсь понять как создать поле ввода с кнопкой на подобии стиля 1С, я так понимаю готового элемента такого вида не существует? По крайней мере в input я такого не нашёл. Может есть мысли как в текстовом поле создать кнопку которая бы открывала диалоговое окно выбора записи по нажатию на которую эта запись добавлялась бы в таблицу?
Я понимаю что это большая часть кода и скорее всего здесь потребуется JS, но может хотя бы намекнёте куда копать? Как создать такой элемент? У меня конечно есть мысли создать этот элемент с помощью 2ух input текстового и кнопки и с помощью стилей css наложить один элемент на другой, но может есть более правильный способ? А на счёт диалогового окна, я так понимаю что там должна срабатывать обработка дабл-клик, но как вычислить позицию в таблице на которую я нажимаю? Может при выборе SELECT из базы значениям присваивать ссылки типа <a href... хотя если честно в голове конструкция не представляется. Подскажите пожалуйста где копать, может кто куском кода может поделиться чтоб я в нём покопался и вынес для себя что нибудь полезное. За ранее благодарен всем кто откликнется!