Доброго времени суток уважаемый читатель Блога RS. Сегодня мы с Вами поговорим о работе с базой данных mysql в php. Нам предстоит научиться создавать базу данных, научиться создавать таблицы в ней, так же будем практиковаться в создание новых строк в таблицах, удаление их, и обновление. Ну и само собой научимся делать выборку данных из базы... Пост обещает быть большим, но это не страшно, если Вы читаете эти строки, значит собираетесь постигнуть азы программирование!
Работать я буду с денвером, если у Вас его до сих пор нет, то ставьте быстрее!
Ну что ж, для того что бы создать базу данных, необходимо перейти по этой ссылке ( ссылка должна открыться если у Вас стоит денвер, и он запущен ) и ввести произвольное имя новой базы данных вот в эту форму:
Свою базу я назвал "phptest". После нажатие на кнопку "Создать" Вас автоматом должно перекинуть в созданную Вами базу данных.
В этой процедуре тоже ничего сложного нет. Давайте создадим таблицу в которой мы будем хранить заголовок наших статей и непосредственно сам текст:
Как Вы могли заметить в количестве полей я поставил цифру 3, почему? Ведь нам нужно создать два поля, под заголовок и текст. Дело в том, что у таблицы в базе данных должно быть одно дополнительное поле. Для чего? Это поле представляет собой поочередный идентификационный номер, ( то есть мы как бы считаем наши строки в таблице ) таким образом мы получаем у каждой строчки таблицы свой неповторимый номер. Это пригодится для поиска нужной нам строки в базе данных. Поле это обычно называют id и выставляют ему AUTO_INCREMENT ( покажу ниже где он выставляется ). AUTO_INCREMENT позволяет присваивать каждой сточки свой неповторимый номер, тем самым Вы в таблице базы данных не встретите запись с одинаковым номером!
после заполнение имени и количество полей, жмет "ОК" попадаем на страницу создание полей. Признаюсь Вам я не особо понимаю что делаю при создание полей, но мне это не мешает с ними работать Заполним вот так:
Жмем кнопку сохранить, и вуаля, первая наша таблица создана! Теперь давайте в ручную вставим одну строку в таблицу, для этого щелкните на кнопку "Вставить"
И заполните два нужных нам поля:
Почему только два? Потому что первое поле id будет заполняться автоматически за счет AUTO_INCREMENT. Жмем "ОК". Теперь во вкладке "Обзор" можно увидеть созданную нами строчку в таблице:
Что ж, мы научились создавать таблицы и строки через панель phpmyadmin, это уже прогресс Кстати хочу отметить что интерфейс у этой панели интуитивно понятен, Вы вполне можете потыкать там кнопочки и разобраться что к чему
Пришло время научится создавать удалять и обновлять строки в созданных таблицах посредством php. Для того что бы Вы лучше восприняли то что я Вам говорю, будем писать небольшую админскую панель сайта, и походу дела я Вам расскажу что да как.
Начнем с этого, так как при создание какого либо проекта необходимо наглядно видеть процесс, а без вывода это очень сложно сделать ( я буду работать с файлом test.php, не удивляйтесь когда увидите ссылки в коде на этот файл ). Как будем выводить? Ну для начала нам необходимо подключиться к базе данных, после циклом do while ( Изучаем PHP - Циклы ) мы вытащим записи из базы данных. Приступим
Как осуществляется подключение? Внимание на синтаксис:
mysql_select_db(Название БД, mysql_connect(Сервер,Имя пользователя БД,Пароль пользователя БД));
Название базы данных, сервер пользователь и пароль создается Вами или предоставляется Вашим хостером. На примере локального сервера, вы создаете некоторые данные самостоятельно, или же пользуетесь уже созданными. Вот как будет выглядеть подключения к созданной мной базе данных:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
Сервер, пользователь и пароль был создан по умолчанию ( в данном случае можно сказать, что почти все данные нам предоставляет хостер ). Из своих данных я лишь указал имя базы данных. Кстати, это php код, и поэтому должен находиться в спец скобках ( <?php ... ?> )
Нам необходимо вывести данные из таблицы page. Внимание на синтаксис вывода:
$result = mysql_query("SELECT Что вытаскиваем FROM имя таблицы в БД");
$myrow = mysql_fetch_array($result);
Первая строчка позволяет указать какие колонки нам необходимо вытащить, и из какой базы данных.
Вторая строчка помещает все найденное в переменную...
ВНИМАНИЕ есть пару моментов которые я бы хотел пояснить. Давайте решим несколько задач:
Как вытащить все поля из таблицы page? вот так:
$result = mysql_query("SELECT * FROM page");
$myrow = mysql_fetch_array($result);
Вы могли заметить, что я поставил звездочку ( * ) после SELECT. Звездочка означает, что мне необходимо извлечь все поля из таблицы
Как вытащить только поле text из таблицы? вот так:
$result = mysql_query("SELECT text FROM page");
$myrow = mysql_fetch_array($result);
Для того что бы вытащить не все поля, а только некоторые, необходимо после SELECT через запятую перечислить необходимые поля.
Как вытащить все поля из первой строчки? Нам известно что первая строчка имеет id равную единице, воспользуемся этими знаниями:
$result = mysql_query("SELECT title,text FROM page WHERE id=1");
$myrow = mysql_fetch_array($result);
После SELECT я через запятую пояснил какие поля необходимо извлечь, после добавил новую строчку WHERE ( что означает "где" ) id равен 1. Таким образом я вытаскиваю нужные мне поля из строки где id равен единице
Ну что ж, приступим к созданию вывода наших статей? Выводить будем только заголовки, приступим:
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "<a href='test.php?id=".$myrow[id]."'>".$myrow[title]."</a><br>";
}
while ($myrow = mysql_fetch_array($result));
Что мы сделали? Мы вытащили из таблицы два поля, id и title. Далее запустили цикл do while ( Изучаем PHP - Циклы ) и сформировали ссылки, с помощью данных которые вывели из БД. Данные хранятся в переменной $myrow, эта переменная является массивом, ключами к массиву являются имена наших полей в базе данных. Вот что получилось:
Обратите внимание куда ведет эта ссылка. С помощью id мы позже будем обращаться к базе данных непосредственно через GET запрос
Вывод заголовков есть, теперь давайте организуем вывод полных сообщений при щелчке мыши по ссылке с заголовком. Для того что бы это осуществить в одном файле, добавим условия if(){}:
<?php
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET['id']))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "<a href='test.php?id=".$myrow[id]."'>".$myrow[title]."</a><br>";
}
while ($myrow = mysql_fetch_array($result));
}
//ВЫВОД ЗАГОЛОВКОВ
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['id']))
{
$result = mysql_query("SELECT text FROM page WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
echo $myrow[text];
}
//ВЫВОД ПОЛНОГО ТЕКСТА
?>
Я добавил два условия. Список с заголовками мы будем видеть только в случае если не существует глобальная переменная $_GET['id']. Полный же текст мы увидим только если эта переменная существует. При этом из базы данных мы будем выводить лишь одну нужную нам запись. Вот, что мы получили:
Теперь думаю пора научится добавлять новые строки в таблицу.
Добавление начнем с создание формы, вот кусочек кода который необходимо добавить в конец нашего файла:
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['add']))
{
echo "<br><br><form action='test.php' method='post' name='form_add'>
<input type='text' name='title_post'><br>
<textarea name='text_post' cols=\"40\" rows=\"10\"></textarea><br>
<input type='submit' value='Добавить пост'>
</form>";
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
Эта форма появиться только в случае если будет существовать глобальная переменная $_GET['add'], поэтому где-нить в низу необходимо вставить ссылку на добавление новой статьи. Лучше всего это сделать в коде вывода заголовков, так же можно отредактировать условие вывода наших заголовков вот так:
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET['id']) AND !isset($_GET['add']))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "<a href='test.php?id=".$myrow[id]."'>".$myrow[title]."</a><br>";
}
while ($myrow = mysql_fetch_array($result));
echo "<br><br><br><a href='test.php?add=1'>Добавить пост</a>";
}
//ВЫВОД ЗАГОЛОВКОВ
Отредактировал условие таким образом, что бы список заголовков не появлялся при выводе формы, вот что получилось:
Далее необходимо создать обработчик, и научится наконец добавлять новые данные в базу. Вот синтаксис:
$result = mysql_query("INSERT INTO имя таблицы в БД (поле 1 БД,поле 2 БД) VALUES ('данные 1','данные 2')");
Сейчас напишем обработчик для нашей мини админки и вы все поймете . Вот кусочек кода, который я разместил сразу после подключение к базе данных:
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_POST['title_post']) AND isset($_POST['text_post']))
{
$result = mysql_query("INSERT INTO page (title,text) VALUES ('$_POST[title_post]','$_POST[text_post]')");
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
Условием является глобальная переменная $_POST то есть если мы заполнили форму, нажали на кнопку "Добавить пост" то сработает наше условие. В поле title запишутся данные из глобальной переменной $_POST[title_post], а в поле text - $_POST[text_post]. Далее сработает строчка header( "location: test.php" ) Она позволяет перенаправить пользователя на другую страницу, в данном случае этой страницей будет test.php. А строчка exit; прерывает выполнение остальных скриптов. Вот что получилось:
Для того что бы редактировать определенную запись в нашей БД нам естественно необходимо определить какую именно запись необходимо отредактировать...Я предлагаю выводить кнопку редактирование в коде вывода полного текста, давайте отредактируем его:
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['id']))
{
$result = mysql_query("SELECT text FROM page WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
echo $myrow[text];
echo "<br><br><br><a href='test.php?edd=".$_GET['id']."'>Редактировать пост</a>";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
Я лишь добавил ссылку на редактирование. Теперь давайте создадим форму где будем редактировать наш пост:
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_GET['edd']))
{
$result = mysql_query("SELECT * FROM page WHERE id='$_GET[edd]'");
$myrow = mysql_fetch_array($result);
echo "<br><br><form action='test.php' method='post' name='form_edd'>
<input type='hidden' name='id_post_edd' value='".$myrow[id]."'>
<input type='text' name='title_post_edd' value='".$myrow[title]."'><br>
<textarea name='text_post_edd' cols=\"40\" rows=\"10\">".$myrow[text]."</textarea><br>
<input type='submit' value='Редактировать пост'>
</form>";
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
Я добавил этот кусочек кода после формы добавление записей. Эта форма почти аналогична форме добавление постов. Как Вы могли заметить, я переделал атрибуты name, и добавил атрибут value. В этот атрибут я поместил данные которые вывел из базы данных. Так же тут присутствует невидимое поле. Оно нужно для того чтобы переслать идентификатор записи в файл обработчик.
Теперь для того что бы при выводе этой формы на экране не было списка заголовков, исправим условие:
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET['id']) AND !isset($_GET['add']) AND !isset($_GET['edd']))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "<a href='test.php?id=".$myrow[id]."'>".$myrow[title]."</a><br>";
}
while ($myrow = mysql_fetch_array($result));
echo "<br><br><br><a href='test.php?add=1'>Добавить пост</a>";
}
//ВЫВОД ЗАГОЛОВКОВ
Пришло время узнать как редактируются записи в базе данных. Вот синтаксис:
$result = mysql_query ("UPDATE имя таблицы в БД SET поле 1 в БД='новые данные 1', поле 2 в БД='новые данные 2' WHERE поле в БД по которому идет поиск строки в таблице='искомое значение'");
Теперь напишем обработчик. Вот кусочек кода который я добавил сразу после обработчика добавление записей:
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_POST['title_post_edd']) AND isset($_POST['text_post_edd']))
{
$result = mysql_query ("UPDATE page SET title='$_POST[title_post_edd]', text='$_POST[text_post_edd]' WHERE id='$_POST[id_post_edd]'");
header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
По условию видно, что обработчик запустится только в случае если мы нажали на кнопку "редактировать пост". Далее идет обновление базы данных. В поле title мы поместим значение глобальной переменной $_POST[title_post_edd] а в поле text - $_POST[text_post_edd]. Редактировать будем строку у которой id равен глобальной переменной $_POST[id_post_edd]. После мы перенаправляем пользователя обратно к списку заголовков:
Ну что ж, последнее что осталось нам изучить, это удаление.. Оно проще всех остальных, так что внимание на синтаксис:
$result = mysql_query ("DELETE FROM имя таблицы в БД WHERE идентификатор по которому мы находим строчку в таблице БД='значение'");
Для того чтобы удалять какие то записи, необходимо где-нить выставить ссылку с помощью который пользователь сможет удалить какую то запись...давайте разместим эту ссылку в выводе полного текста поста:
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['id']))
{
$result = mysql_query("SELECT text FROM page WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
echo $myrow[text];
echo "<br><br><br><a href='test.php?edd=".$_GET['id']."'>Редактировать пост</a>";
echo "<br><a href='test.php?del=".$_GET['id']."'>Удалить пост</a>";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
Теперь напишем обработчик:
//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['del']))
{
$result = mysql_query ("DELETE FROM page WHERE id='$_GET[del]'");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ
Добавил его я после кусочка кода отвечающего за редактирование поста. Теперь если зайти в полный текст поста, и жмякнуть по кнопке удаление, то мы удалим пост:
Вот полный код сегодняшнего поста:
<?php
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_POST['title_post']) AND isset($_POST['text_post']))
{
$result = mysql_query("INSERT INTO page (title,text) VALUES ('$_POST[title_post]','$_POST[text_post]')");
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_POST['title_post_edd']) AND isset($_POST['text_post_edd']))
{
$result = mysql_query ("UPDATE page SET title='$_POST[title_post_edd]', text='$_POST[text_post_edd]' WHERE id='$_POST[id_post_edd]'");
header("location: test.php");
exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['del']))
{
$result = mysql_query ("DELETE FROM page WHERE id='$_GET[del]'");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET['id']) AND !isset($_GET['add']) AND !isset($_GET['edd']))
{
$result = mysql_query("SELECT id,title FROM page");
$myrow = mysql_fetch_array($result);
do
{
echo "<a href='test.php?id=".$myrow[id]."'>".$myrow[title]."</a><br>";
}
while ($myrow = mysql_fetch_array($result));
echo "<br><br><br><a href='test.php?add=1'>Добавить пост</a>";
}
//ВЫВОД ЗАГОЛОВКОВ
//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['id']))
{
$result = mysql_query("SELECT text FROM page WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
echo $myrow[text];
echo "<br><br><br><a href='test.php?edd=".$_GET['id']."'>Редактировать пост</a>";
echo "<br><a href='test.php?del=".$_GET['id']."'>Удалить пост</a>";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['add']))
{
echo "<br><br><form action='test.php' method='post' name='form_add'>
<input type='text' name='title_post'><br>
<textarea name='text_post' cols=\"40\" rows=\"10\"></textarea><br>
<input type='submit' value='Добавить пост'>
</form>";
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
if(isset($_GET['edd']))
{
$result = mysql_query("SELECT * FROM page WHERE id='$_GET[edd]'");
$myrow = mysql_fetch_array($result);
echo "<br><br><form action='test.php' method='post' name='form_edd'>
<input type='hidden' name='id_post_edd' value='".$myrow[id]."'>
<input type='text' name='title_post_edd' value='".$myrow[title]."'><br>
<textarea name='text_post_edd' cols=\"40\" rows=\"10\">".$myrow[text]."</textarea><br>
<input type='submit' value='Редактировать пост'>
</form>";
}
//ФОРМА РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
?>
Довольно сложный получился материал. Но! Вы могли заметить, что я использовал лишь ту информацию которую давал ранее. А это значит, что имея эти знание, можно создавать простейшие проекты на php! Если Вы все это освоили, то можете с гордостью заявить, что вы начинающий программист! Ну что ж, теперь Вы вполне можете приступить к созданию свой первой cms. Если есть какие то вопросы, а они скорее всего есть, задавайте, помогу чем смогу! Удачи Вам, на сегодня у меня все!
______
P.S.: Что такое mdf файл? Чем его открыть? Как его открыть? На эти и многие вопросы можно найти ответ на voprosi4ek.ru
Все мучился с этими статьями и выводом из БД.
благодаря вашему уроку многое понял буду исправлять)
Я изначально познавал всё при рассмотрение чужих скриптов. Что было критически не ясно искал в маленьком и стареньком учебнике.
Сейчас для своих приложений пишу класс по работе с базой данных.
И ещё, хотел бы спросить: вот добавить я например 10 постов на сайт, удаляю 5,6,7, когда добавляю новый пост, добавляется пост с номеров 11 и т.д., ну это ладно, а вот ещё было такое, когда удалил я несколько и посты начали добавляется в другой стороне колонке, а точнее на верх, а потом после добавления 10-ти опять в низ. Как это можно исправить?
2. Этот вопрос уже к разработчикам phpmyadmin. На работу алгоритма такой небольшой глюк не влияет, поэтому я не пытался решить эту проблему.
$myrow = mysql_fetch_array($result);
http://rio-shaman.ru/index.php?blog=133
В этой заметке описан способ смены кодировки у файла. Это должно помочь при условии что Ваш сервер и база данных работает в кодировке windows-1251.
но всё равно вопросительные знаки заместо русских символов.
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
Прописать:
mysql_query("SET NAMES 'cp1251'");
Для того чтобы сервер работал в кодировке windows-1251 необходимо в корне создать файл .htaccess и прописать в нем:
AddDefaultCharset windows-1251
В этом случае все проблемы должны исчезнуть, так как и сервер и бд и файлы будут в одной кодировке..
p.s.: если Вам нужна кодировка utf8 то во всех случаях уточняется именно она
ошибка именно в этом месте.не хочет выводить.просто id в строке адреса прописывает а остальное не выводит как должно
/ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['ID']))
{
$result = mysql_query("SELECT Password FROM 'users' WHERE '$_GET[ID]'");
$myrow = mysql_fetch_array($result);
echo $myrow[Password];
echo "<br><a href='test.php?del=".$_GET['ID']."'>Удалить пост</a>";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
1. Элементы в глобальной переменной GET написаны большими буквами. Если в ссылках тоже используется заглавные буквы, то все норм
2. В базе данных есть колонка Password? Если есть, она тоже с большой буквы?
3. В строчке
/ВЫВОД ПОЛНОГО ТЕКСТА
лишь одни слэш. Для комментария должно быть два слэша (Наверное просто опечатка)
А так вроде все нормально.
2. да, с большой буквы
3. это просто так скопировалось.на самом деле там 2 слеша
я вот тоже думаю,что все нормально.раз в адресной строке выводит id значит работает,а вот почему Password не печатает непонятно(((
может,еще мысли будут?
Спасибо за помощь
жму добавить пост - заполняю поля - жму добавить пост.
перекидывает на главную моей записи нет
помогите пжл
вот код http://pastebin.com/0qnq6X3Y
теперь у меня проблема в блоке редактирования, не изменяется ни одна запись, а всё остальное работает )
а точнее если я изменяю только 3 поля (всего 3 поля в таблице id title text) то всё работает, а если 9 полей (структура базы http://pastebin.com/ip0w9cKc) то ничего не изменяется (((
заранее благодарен
код всё тот же - вот код http://pastebin.com/0qnq6X3Y
Возможности - Не opis_post_edd а vozmoj_post_edd
Цена - Не price_post а price_post_edd
Рисунок - Не image_post а image_post_edd
Рисунок(малый) - Не image_resize_post а image_resize_post_edd
Категория товара - Не category_post а category_post_edd
код QR - Не qr_post а qr_post_edd'
ещё раз вас благодарю!!
Очень рад, что нашел ваш сайт. Очень полезная информация, а главное - изложена в очень доступной форме. Практикуюсь по вашим статьям, однако на моментах добавления и редактирования материалов, на страничке выводилась подобная ошибка: Warning: Cannot modify header information - headers already sent by (output started at Z:\home\***\www\test.php:18) in Z:\home\***\www\test.php on line 111 , хотя на это линии был код header("location: test.php"); . При чем что не маловажно - не смотря на ошибку, изменения в базу данных вносились и материалы редактировались.
Когда под конец полностью скопировал ваш код - все встало на свои места. В чем может быть примерная причина?
Подписываюсь на ваш блог, буду учиться по вашим статьям). Еще раз спасибо!
P.S. Поставьте бэкграунд на странице принудительно белым...
при добавлении записи, редактировании и удалении, при нажатии кнопки, выдает сообщение
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\test.php:3) in Z:\home\localhost\www\test.php on line 17
ругается на header("location: test.php");
В чем проблема? подскажите плиз
1. Из-за не правильной кодировки в браузер отсылается не понятные символы (в моем проекте правильная кодировка windows-1251).
2. Перед функцией header был использован оператор вывода. Например оператор echo.
Ах да, еще очень может быть, что перед знаком <? (или <?php) стоят отступы или пробелы или текст. Это тоже считается посланием какой-то информации браузеру
Заранее спасибо за подробный ответ.
Одно уточнение для людей, кто пользуется зарубежными серверами.
После подключения к базе необходимо принудительно объявить кодировку. Иначе, будут проблемы с выводом. Примерно так для windows-1251.
После этой строки:
mysql_select_db($nameDB, mysql_connect($
nameSERVER,$nameUSER,$passUSER));
Вставляем эти:
mysql_query('SET character_set_database = cp1251');
mysql_query('SET NAMES cp1251');
И все у нас становится в порядке!
Спасибо вам!
Пожалуйста: echo "<script>document.location.replace('test.php');</script>";
Я визжал как сучка, когда оно сработало....
<?php
какой то код
?>
<?php
продолжение кода
?>
Между первыми php скобками и вторыми есть перенос, он выводится в браузер, стало быть если написать вот так:
<?php
какой то код
?>
<?php
header("......");
?>
то Вы увидите ошибку о том что функция header() не может отработать... А если написать вот так:
<?php
какой то код
header("......");
?>
то все будет нормально.
Как сделать в базе данных сайта вывод чисел с тремя нулями, чтобы вводились тысячи а выводились миллионы
как в нем будет подключаться файл test.php.
код бла-бла-бла
if (условие)
{
include("test.php");
}
код бла-бла-бла
<body>
<?php include(\\\'blocks/top.php\\\');?>
код бла-бла-бла
<?php include(\\\'blocks/bod.php\\\');?>
</body>
</html>
Пробовал:
<?php require_once "blocks/top.php"; ?>
На экране нет bod.php и top.php. Изображение смещается в верх. Браузер не видит этих строчек.
Путь указан правильно так, как тоже самое, но без базы данных показывает правильно.
<?php include('blocks/top.php');?>
А вот такую:
<?php include(\\\'blocks/top.php\\\');?>
В общем то это нормально, так как апостроф должен быть экранирован.
Для запуска данного кода нужно использовать функцию eval(), но перед этим необходимо удалить экранирование у кода с помощью функции stripslashes().
Я взял с Вашего поста: 1. Подключение к базе данных
2. Вывод заголовков
3 Вывод полного текста
и добавил закрытие базы данных.
У меня все хорошо работает, но в базе данных у меня страницы сайта.
Каждая страница имеет от 4 до 8 повторяющихся блоков.
Без базы данных эти вопросы решаются с помощью include или
require_once.
Подскажите новичку как добиться работы с блоками без eval
Если еще один способ, если например в БД хранить не сам код, а путь к файлу с кодом, то можно будет использовать include()
"Вывод записей из базы данных
Начнем с этого, так как при создание какого либо проекта необходимо наглядно видеть процесс, а без вывода это очень сложно сделать ( я буду работать с файлом test.php, не удивляйтесь когда увидите ссылки в коде на этот файл ). Как будем выводить? Ну для начала нам необходимо подключиться к базе данных, после циклом do while ( Изучаем PHP - Циклы ) мы вытащим записи из базы данных. Приступим
Подключение к базе данных
Как осуществляется подключение? Внимание на синтаксис:
mysql_select_db(Название БД, mysql_connect(Сервер,Имя пользователя БД,Пароль пользователя БД));
Название базы данных, сервер пользователь и пароль создается Вами или предоставляется Вашим хостером. На примере локального сервера, вы создаете некоторые данные самостоятельно, или же пользуетесь уже созданными. Вот как будет выглядеть подключения к созданной мной базе данных:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "phptest";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
"
Все сделал так же, даже все названия. И работает абсолютно все кроме редактирования, причем редактирование у меня вообще не работает, при нажатии выводит к списку но ничего не меняет.
я в этом деле новенький да и по образованию даже не программист, так сам разбираться пытаюсь да по интернету лажу. С данной ситуацией вообще ничего не понимаю, хост вроде хороший TimeWeb.
Еще раз спасибо огромное и сори за беспокойство.
Я привязал данный файл к некой форме index.php, ограничивающая выведенную информацию из БД по неким параметрам пока по одному, допустим улица "Ленина".
Возник вопрос. Возможно ли как-то сделать чтобы после редактирования меня возвращало все в тот же раздел вывода заголовка но со старыми ограничениями по выведению информации из БД улице "Ленина"?
Приношу извинения если вопрос немного отклоняется от темы.
За тему вам большое спасибо. Провел почти 2 недели в поисках доступной информации, для осуществления своей идеи. Не знаю что бы без вас делал =)
Данная переменная в моем понимании берет значение из дива
Подскажите пожалуйста можно ли сделать так чтобы ссылка состояла не только из поля title а еще и к примеру из поля text
в таком формате title text
исходя из- своего же примера выше: Хочется сделать ссылкой "Ленина 34"
где "Ленина" находится в одной ячейке ( улицы), а "34" в другой ( дома). но чтобы ссылка была единой.
Заранее спасибо.
Проблемы возникали из-за русского имени поля, переименовал в английское все заработало.
Во-вторых, если у записей одинаковые ID, то удалять можно с помощью двух простых SQL запросов DELETE
За что вам огромное спасибо, без вашего примера очень долго не мог ее сделать.
Приблизительно вот так:
P.S. Я данный скрипт не тестил, возможно где-то допустил ошибку
Не совсем понял фразу "послaть ключ client_id" что значит ключ?
Посылаю на страницу с данным скриптом Array ( [client_id] => 5 [surname] => Пупкин [name] => Федор [middle_name] => Семенович .....) методом GET, предварительно исправив под себя названия полей и таблиц.
Ничего не работает 8( но и ошибок не выдает.
Если честно я не совсем понимаю принцип получения данных и подключения данного скрипта к БД.
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "ХХХ";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "ХХХ";//Имя пользователя БД
$passUSER = "ХХХ";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
1. Нет подключения к БД
2. Неверно составленный SQL запрос в функции getClientByID()
Может попробовать исправить функцию вот так:
Если же Вы вообще ничего не увидите, то скорее всего проблема в том что вот это кусок кода:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "ХХХ";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "ХХХ";//Имя пользователя БД
$passUSER = "ХХХ";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
и ваш скрипт, больше ничего
$host="localhost";
$user="ХХХ";
$password="ХХХ";
$db="ХХХ";
mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db) or die("Нет соединения с БД".mysql_error());
//ДОБАВЛЕНИЕ КЛИЕНТА
if(isset($_POST['surname_post']) AND isset($_POST['name_post']) ...)
{
$result = mysql_query("INSERT INTO page (surname,name) VALUES ('$_POST[surname_post]','$_POST[name_post]')") or die("Клиент уже существует".mysql_error());
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ КЛИЕНТА
//УДАЛЕНИЕ КЛИЕНТА
if(isset($_POST['client_id']))
{
$result = mysql_query ("DELETE FROM newclient WHERE id='$_POST[client_id]'")
header("location: test.php");
exit;
}
//УДАЛЕНИЕ КЛИЕНТА
По истине полезный пост месяц гуглил не чего толкового в рунете нет одна .....
Твой пост именно то что надо было для меня ,да не только для меня как видно по комментам.
Сам я пока в php не очень так себе начинающий.
Мне нужно было именно по запросу пользователя ,то есть по ссылке, что бы подставлялась определенная статья из базы данных, а ссылки "редактировать", "добавить" и "удалить" я просто удалил со скрипта они, в моем случае, не нужны. (Думаю нормально или я не прав?).
Алексей есть парочка вопросов не сочти за наглость (я пока не волшебник токо учусь).
1. Я слышал о таких вещах как вредоносный код и SQL-инъекции в GET запросе в твоем скрипте по моему нет не какой фильтрации или я не прав прошу прощения если не прав. Если я прав как можно исправить?
2. И второе когда данные подставляются из базы данных все данные выводятся и картинки как положено, но почему то не применяются стили (может я че то не то делаю не подскажете). Прошу прощения если какую глупость написал (я пока не волшебник токо учусь).
Отвечая на вопрос, "что же делать?" могу сказать следующее. Вам как начинающему программисту необходимо усвоить одну вещь. Каждая созданная Вами переменная должна быть четко определена. Если в глоб массиве GET под ключом id ($_GET['id']) должно быть число, и Вы будете использовать данную переменную как число, то при получение из вне Вы должны привести ее к числу (принудительно привести к числу можно вот так: (int)$_GET['id']). Избегайте создание переменных в которых, по задумке, содержится неизвестный тип данных.
Что касается SQL инъекций, то тут немного сложнее. Все упирается в используемую Вами БД. Если это mysql то Вам необходимо знать, что у данной БД есть свои спец символы. Самая опасная это одинарная кавыка. Если ее не экранировать (функция addslashes()), то злоумышленник может видоизменить Ваш SQL запрос.
Учту Ваши замечания. Кое что для меня в php пока сложновато, (я пока не волшебник токо учусь).
но как говорил великий вождь пролетариата учится, учится и еще раз учится.
Будем учится. Спасибо!
Все таки я решил ознакомится с возможностями sql инъекции после прочитанных несколько статей я в ужасе,
если конечно все что я прочел, правда, какая то доля правды все равно есть думаю.
В связи с этим что Вы можете сказать про эту проверку
В большинстве случаев все SQL инъекции базируются
1. на вставке одинарной кавычке
2. на том, что программист не обводит данные в те же самые кавычки.
Что касается второго пункта, вот пару примеров. Не правильно писать вот так:
Остаются знаки комментирования SQL кода. Но они не опасны, если использовать выше описанные два пункта.
p.s.: Взломать можно все что угодно, главное обезопасить себя от тех кто ломает по какой-то инструкции вычитанной где-то
Тоже были знаки вопросов.
Решил эту проблему за минуту, скачал первый попавшийся скрипт. Открыл это для редактирования. Скопировал эту строчку
Только вот хз можно ли так но Русский теперь текст видно норм.
P.S Это первое мое знакомство с php
К сожалению не приходилось реализовывать подобный функционал, поэтому поделиться рабочим вариантом не могу. Попробуйте глянуть вот эту статью, может поможет.