Я новичок.Выдает ошибку Warning: mysqli_query(): Couldn't fetch mysqli in D:\server\Data\htdocs\nails\admin\add_post.php on line 56 Warning: mysqli_error(): Couldn't fetch mysqli in D:\server\Data\htdocs\nails\admin\add_post.php on line 56 Подскажите в чем может быть проблема? <?php // подключаем БД require_once 'blocks/bd.php'; //достаем из глобального массива ПОСТ переменные if (isset($_POST['title'])){$title = $_POST['title'];} if (isset($_POST['meta_k'])){$meta_k = $_POST['meta_k'];} if (isset($_POST['meta_d'])){$meta_d= $_POST['meta_d'];} if (isset($_POST['author'])){$author=$_POST['author'];} if (isset($_POST['date'])){$date=$_POST['date'];} if (isset($_POST['discription'])){$discription=$_POST['discription'];} if (isset($_POST['text'])){$text=$_POST['text'];} // закрываем подключение mysqli_close($link); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head></head> <body> <div class=”contents”> <?php if (isset($title) && isset($meta_d) && isset($meta_k) && isset($date) && isset($author) && isset($discription) && isset($text)){ // запрос на добавление строк в таблицу $query = "INSERT INTO posts (title,meta_d,meta_k,date,author,discription,text) VALUES ('$title','$meta_d','$meta_k','$date','$author','$discription','$text')"; //вывод результата запроса в переменную $result=mysqli_query($link,$query) or die("Ошибка " . mysqli_error($link)); if ($result == 'true'){ echo "<p>Ваша статья добавлена на сайт</p>"; } else {echo"<p>Ваша статья не добавлена на сайт</p>"; } } else{ echo "<p>Вы не заполнили все поля</p>";} ?> </div> </body>
Ты сначала соединение закрываешь, а потом в базу пытаешься записать? PHP: // закрываем подключение mysqli_close($link); ....... // запрос на добавление строк в таблицу $query = "INSERT INTO posts (title,meta_d,meta_k,date,author,discription,text) VALUES ('$title','$meta_d','$meta_k','$date','$author','$discription','$text')"; //вывод результата запроса в переменную $result=mysqli_query($link,$query) or die("Ошибка " . mysqli_error($link)); Не фильтруешь и не экранируешь данные, которые идут в запрос. Используй хотя бы функцию mysqli_real_escape_string перед отправкой sql запроса. А то только ленивый не сможет взломать твою базу и сайт. http://komotoz.ru/uroki/php/mysqli_real_escape_string.php
Сначала закрываем соединение потом делаем запрос? У вас все принципиально неправильно сделано. В двух словах: - разделяем добавление и вывод между HTTP-запросами; - никаких запросов после начала вывода. 1. Добавили и инициировали редирект методом GET либо на /dest?status=ok, либо на /dest?status=error (адреса условные) в зависимости от результата выполнения запроса к БД. 2. На странице /dest вывели осн. инфу плюс сообщение, если указан параметр status. «Порождать» сообщение об ошибке можно не только через адресную строку. При возникновении ошибки допустимо делать вывод в ответ на POST, чтобы иметь возможность выводить контент в форме и детальное сообщение об ошибке безо всяких передач. Есть гораздо более продвинутый способ вывода контента в форме – разделить создание на собственно создание записи с дефолтными значениями и следующее за ним автоматом (при помощи все того же редиректа) редактирование в случае успешного создания записи.
Эээ... как пост yanuzay вклинился перед моим? Он его десять часов что ли писал? Ну вот собственно пример того, о чем я выше писал: сначала забивается место, потом выполняется сохранение фактических данных
Спасибо Всем, кто сделал замечания.Конечно принципиальная проблема была в закрытии соединения с базой.буду совершенствоваться.
соррян ребят( Зашел на форум на вопросы ответить, уснул за компом. Утром запостил ответ не обновив страницу)
о, нет... есть магия по-страшнее. например, ты не можешь запостить статью, в тексте которой есть кавычка...
Это просто косоглазие Принципиальные проблемы и способы их решения я вам описал. Также не забываем про экранирование данных в запросе, о чем упоминали два др. товарища, и про кодирование HTML-сущностей при выводе данных в форму.