Работа с базой данных в php

 

Доброго времени суток уважаемый читатель Блога RS. Сегодня мы с Вами поговорим о работе с базой данных mysql в php. Нам предстоит научиться создавать базу данных, научиться создавать таблицы в ней, так же будем практиковаться в создание новых строк в таблицах, удаление их, и обновление. Ну и само собой научимся делать выборку данных из базы... Пост обещает быть большим, но это не страшно, если Вы читаете эти строки, значит собираетесь постигнуть азы программирование!

 

 

Работать я буду с денвером, если у Вас его до сих пор нет, то ставьте быстрее!


Создание базы данных

 

Ну что ж, для того что бы создать базу данных, необходимо перейти по этой ссылке ( ссылка должна открыться если у Вас стоит денвер, и он запущен ) и ввести произвольное имя новой базы данных вот в эту форму:

Свою базу я назвал "phptest". После нажатие на кнопку "Создать" Вас автоматом должно перекинуть в созданную Вами базу данных.

 

Создаем таблицу в базе данных

 

В этой процедуре тоже ничего сложного нет. Давайте создадим таблицу в которой мы будем хранить заголовок наших статей и непосредственно сам текст:

Как Вы могли заметить в количестве полей я поставил цифру 3, почему? Ведь нам нужно создать два поля, под заголовок и текст. Дело в том, что у таблицы в базе данных должно быть одно дополнительное поле. Для чего? Это поле представляет собой поочередный идентификационный номер, ( то есть мы как бы считаем наши строки в таблице ) таким образом мы получаем у каждой строчки таблицы свой неповторимый номер. Это пригодится для поиска нужной нам строки в базе данных. Поле это обычно называют id и выставляют ему AUTO_INCREMENT ( покажу ниже где он выставляется ). AUTO_INCREMENT позволяет присваивать каждой сточки свой неповторимый номер, тем самым Вы в таблице базы данных не встретите запись с одинаковым номером!

после заполнение имени и количество полей, жмет "ОК" попадаем на страницу создание полей. Признаюсь Вам я не особо понимаю что делаю при создание полей, но мне это не мешает с ними работать Заполним вот так:

  • Первое поле - ID Первое поле я назвал id. Это то самое дополнительное поле. Тип ему выставил INT. Что это за тип такой? Выставляя у поля тип INT вы сможете хранить в этом поле только целые числа. Диапазон чисел который умещается в этот тип давлено большой, поэтому если в поле необходимо хранить числа, то это самый подходящий тип! Длина/значения я поставил 10. Это означает что в поле влезет максимальная цифра из десятизначного числа ( 9999999999 ) Так же я поставил для этого поля AUTO_INCREMENT
  • Второе поле - title Второе поле будет содержать заголовок наших статей. Назвал я это поля - title. Тип выставил - varchar. Этот тип позволяет хранить текстовые данные. Максимальное количество символов которое помещается в поле этого типа равна 255 символам. Думаю для заголовка 255 символов вполне достаточно Длина/значения я выставил максимум, то есть 255 символов
  • Третье поле - text В этом поле мы будем хранить основной текст нашей статьи. Назвал я это поле text. Тип этого поля обычно ставят - text. В этот тип можно поместить 65535 символов, вполне достаточно для статей. Длина/значения выставлять необязательно.

Жмем кнопку сохранить, и вуаля, первая наша таблица создана! Теперь давайте в ручную вставим одну строку в таблицу, для этого щелкните на кнопку "Вставить"

И заполните два нужных нам поля:

Почему только два? Потому что первое поле 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

 

Возможно Вам будут интересны следующие заметки

Комментарии (110)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Виталий, 30 Января 2012 г. 00:01 пишет:
Гость
И какой смысл писать do while, если можно просто написать while () {}
Rio-Shaman, 30 Января 2012 г. 09:02 пишет:
Автор
Циклы отличаются лишь очередностью проверки условия, поэтому совершенно без разницы какой, из этих двух, использовать...
Ответ для пользователя: Виталий
Alex, 06 Февраля 2012 г. 23:58 пишет:
Гость
Спасибо большое за урок.
Все мучился с этими статьями и выводом из БД.

благодаря вашему уроку многое понял буду исправлять)
Дмитрий, 25 Марта 2012 г. 22:34 пишет:
Читатель
Статья интересная.
Я изначально познавал всё при рассмотрение чужих скриптов. Что было критически не ясно искал в маленьком и стареньком учебнике.
Сейчас для своих приложений пишу класс по работе с базой данных.
Петр, 09 Апреля 2012 г. 12:58 пишет:
Гость
Благодарю за статью! Очень полезная!) У меня есть один вопросик: как сделать удаление, после подтверждения? А именно вот так: http://vip-ucoz.com/_ph/1/472808670.png

И ещё, хотел бы спросить: вот добавить я например 10 постов на сайт, удаляю 5,6,7, когда добавляю новый пост, добавляется пост с номеров 11 и т.д., ну это ладно, а вот ещё было такое, когда удалил я несколько и посты начали добавляется в другой стороне колонке, а точнее на верх, а потом после добавления 10-ти опять в низ. Как это можно исправить?
Rio-Shaman, 09 Апреля 2012 г. 18:41 пишет:
Автор
1. Как создать именно такое же подтверждение (на javascripte) я не знаю, как то не приходилось. Я делал подтверждения на php, внедряя вопрос о подтверждение прежде чем запустится SQL DELETE, и лишь при удовлетворительном ответе алгоритм удаления делал свое дело.

2. Этот вопрос уже к разработчикам phpmyadmin. На работу алгоритма такой небольшой глюк не влияет, поэтому я не пытался решить эту проблему.
Ответ для пользователя: Петр
Петр, 09 Апреля 2012 г. 20:55 пишет:
Гость
Благодарю за ответ! Не могли бы Вы написать статью о "Я делал подтверждения на php, внедряя вопрос о подтверждение прежде чем запустится SQL DELETE........"?
Rio-Shaman, 09 Апреля 2012 г. 21:16 пишет:
Автор
Обязательно когда нить напишу.
Ответ для пользователя: Петр
Петр, 09 Апреля 2012 г. 21:20 пишет:
Гость
Ок, спасибо, буду ждать)
ZedRott, 15 Мая 2012 г. 19:04 пишет:
Гость
А я пишу как сказано и выдаёт,что ошибка в этой строке:

$myrow = mysql_fetch_array($result);
Rio-Shaman, 15 Мая 2012 г. 19:17 пишет:
Автор
Скорее всего ошибка в подключение к базе данных. Проверьте правильность имени базы данных, сервера, логина пользователя и пароль
Ответ для пользователя: ZedRott
ZedRott, 16 Мая 2012 г. 16:21 пишет:
Гость
Спасибо!Ошибку убрал.Но теперь возникла другая проблема : отказывается отображать русские символы.Английские символы выводятся нормально.А вот русские...
Rio-Shaman, 16 Мая 2012 г. 18:40 пишет:
Автор
Наверное дело в кодировке. Попробуйте почитать вот этот пост:

http://rio-shaman.ru/index.php?blog=133

В этой заметке описан способ смены кодировки у файла. Это должно помочь при условии что Ваш сервер и база данных работает в кодировке windows-1251.

Ответ для пользователя: ZedRott
ZedRott, 16 Мая 2012 г. 20:12 пишет:
Гость
Да нет.Кодировка что надо.Как и в корне сайта,так и в index.php
но всё равно вопросительные знаки заместо русских символов.
Rio-Shaman, 16 Мая 2012 г. 21:02 пишет:
Автор
Такая реакция и есть проблема с кодировкой. Для того что бы не было таких проблем необходимо что бы и сервер и база данных и файлы имели одну и ту же кодировку. Если Ваши файлы имеют кодировку 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 то во всех случаях уточняется именно она
Ответ для пользователя: ZedRott
Lica, 18 Мая 2012 г. 22:43 пишет:
Гость
//ВЫВОД ПОЛНОГО ТЕКСТА
ошибка именно в этом месте.не хочет выводить.просто 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>";
}
//ВЫВОД ПОЛНОГО ТЕКСТА
Rio-Shaman, 18 Мая 2012 г. 23:03 пишет:
Автор
Есть несколько мыслей почему у Вас ошибка:
1. Элементы в глобальной переменной GET написаны большими буквами. Если в ссылках тоже используется заглавные буквы, то все норм
2. В базе данных есть колонка Password? Если есть, она тоже с большой буквы?
3. В строчке

/ВЫВОД ПОЛНОГО ТЕКСТА

лишь одни слэш. Для комментария должно быть два слэша (Наверное просто опечатка)

А так вроде все нормально.
Ответ для пользователя: Lica
Lica, 20 Мая 2012 г. 13:42 пишет:
Гость
1. да,большие буквы везде
2. да, с большой буквы
3. это просто так скопировалось.на самом деле там 2 слеша

я вот тоже думаю,что все нормально.раз в адресной строке выводит id значит работает,а вот почему Password не печатает непонятно(((

может,еще мысли будут?
Lica, 20 Мая 2012 г. 13:50 пишет:
Гость
Все исправила.нашла ошибку в другом месте.
Спасибо за помощь
Rio-Shaman, 20 Мая 2012 г. 21:21 пишет:
Автор
Скажите где была ошибка, может другим эта информация окажется полезной =)
Ответ для пользователя: Lica
mikle, 25 Мая 2012 г. 19:07 пишет:
Гость
всё работает, кроме добавления...
жму добавить пост - заполняю поля - жму добавить пост.
перекидывает на главную моей записи нет
помогите пжл
вот код http://pastebin.com/0qnq6X3Y
Rio-Shaman, 25 Мая 2012 г. 19:57 пишет:
Автор
В коде вроде ошибок нет, возможно проблемы в самой таблицы базы данных, например не правильное имя колонки, или у пользователя базы данных (root) нет прав на добавления новых строчек в таблицу
Ответ для пользователя: mikle
mikle , 26 Мая 2012 г. 19:56 пишет:
Гость
Rio-Shaman, благодарю за ответ, разобрался, не работало потому что в таблице было больше полей, а они не соответственно не заполнялись. если кому нужно могу свой код выложить
Алекандр, 28 Мая 2012 г. 09:44 пишет:
Гость
Респект автору и продолжение начинаний! Всё достаточно понятно описано и написано. Только грамматика хромает и очень сильно))) но это несущественный для данного блога минус. Удачи!
mikle, 29 Мая 2012 г. 20:50 пишет:
Гость
помогите пжл!!

теперь у меня проблема в блоке редактирования, не изменяется ни одна запись, а всё остальное работает )
а точнее если я изменяю только 3 поля (всего 3 поля в таблице id title text) то всё работает, а если 9 полей (структура базы http://pastebin.com/ip0w9cKc) то ничего не изменяется (((

заранее благодарен

код всё тот же - вот код http://pastebin.com/0qnq6X3Y
mikle, 29 Мая 2012 г. 20:54 пишет:
Гость
последняя ссылка не верна, вот правильная http://pastebin.com/AUQn3hcf
Rio-Shaman, 29 Мая 2012 г. 22:03 пишет:
Автор
У Вас с 129-ой строчки ( http://pastebin.com/AUQn3hcf ) идут неправильные имена в атрибуте name тегов формы:

Возможности - Не 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'
Ответ для пользователя: mikle
mikle, 30 Мая 2012 г. 00:01 пишет:
Гость
вот эт я баран не внимательный! =)
ещё раз вас благодарю!!
yura1, 06 Сентября 2012 г. 20:22 пишет:
Читатель
Здравствуйте!
Очень рад, что нашел ваш сайт. Очень полезная информация, а главное - изложена в очень доступной форме. Практикуюсь по вашим статьям, однако на моментах добавления и редактирования материалов, на страничке выводилась подобная ошибка: 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"); . При чем что не маловажно - не смотря на ошибку, изменения в базу данных вносились и материалы редактировались.
Когда под конец полностью скопировал ваш код - все встало на свои места. В чем может быть примерная причина?
Подписываюсь на ваш блог, буду учиться по вашим статьям). Еще раз спасибо!
Rio-Shaman, 07 Сентября 2012 г. 00:23 пишет:
Автор
Проблема скорее всего в кодировки файла. Советую почитать вот эту статью - http://rio-shaman.ru/index.php?blog=133
Ответ для пользователя: yura1
Дмитрий, 09 Сентября 2012 г. 21:19 пишет:
Гость
Хороший материал, спасибо! Просто и доходчиво, плюс еще и работа с формами в одном флаконе.
P.S. Поставьте бэкграунд на странице принудительно белым...
Rio-Shaman, 10 Сентября 2012 г. 00:57 пишет:
Автор
Спасибо на добром слове =) А что там с бэкграундом не так?
Ответ для пользователя: Дмитрий
Роман, 27 Октября 2012 г. 13:17 пишет:
Читатель
Доброго дня.

при добавлении записи, редактировании и удалении, при нажатии кнопки, выдает сообщение
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");

В чем проблема? подскажите плиз
Rio-Shaman, 27 Октября 2012 г. 19:45 пишет:
Автор
Проблема в том, что перед вызовом функции header, браузеру посылается какие-то данные. Проблем может быть две:
1. Из-за не правильной кодировки в браузер отсылается не понятные символы (в моем проекте правильная кодировка windows-1251).
2. Перед функцией header был использован оператор вывода. Например оператор echo.

Ах да, еще очень может быть, что перед знаком <? (или <?php) стоят отступы или пробелы или текст. Это тоже считается посланием какой-то информации браузеру
Ответ для пользователя: Роман
Андрей, 18 Ноября 2012 г. 23:36 пишет:
Гость
Спасибо за очень полезную статью. По соотношению понятность/полезность - это лучшее, что я пока читал. Правда, непонятно вот что: база данных на PHPMyAdmin в локальном режиме работает, только как мне ее скидывать на сервер и правильны ли при этом окажутся прописанные пути к БД?
Заранее спасибо за подробный ответ.
Андрей, 19 Ноября 2012 г. 20:53 пишет:
Гость
Сам догадался: у моего хостера есть точно такой же PHPMyAdmin, так что можно просто экспортировать у себя и импортировать на сервере.
Ответ для пользователя: Андрей
Женя, 27 Ноября 2012 г. 06:48 пишет:
Гость
Доброй ночи, мой сайт http://www.devhelper.ru схожей тематики с Вашим блогом, давайте обменяемся ссылками или еще как-нибудь посотрудничаем.
Евгений, 10 Декабря 2012 г. 17:42 пишет:
Гость
Шаман, большое спасибо! Наконец-то, я теперь смогу обернуть свои дизайны в полноценные сайты.
Одно уточнение для людей, кто пользуется зарубежными серверами.
После подключения к базе необходимо принудительно объявить кодировку. Иначе, будут проблемы с выводом. Примерно так для windows-1251.
После этой строки:
mysql_select_db($nameDB, mysql_connect($
nameSERVER,$nameUSER,$passUSER));

Вставляем эти:

mysql_query('SET character_set_database = cp1251');
mysql_query('SET NAMES cp1251');

И все у нас становится в порядке!


Спасибо вам!
MrPeach, 11 Января 2013 г. 19:05 пишет:
Гость
Спасибо за ценную информацию. Было бы проще, если бы вы выкладывали в конце поста вашу БД, чтобы просто ее закинуть в денвер. Листинг можно просто скопировать) Тоже была проблема с кодировкой. Перекодировал в Notepad++ то что мне было нужно в UTF-8, и поставил ее по умолчанию.
HerrGrau, 26 Января 2013 г. 20:42 пишет:
Гость
Спасибо, очень нравится, понятно объясняете, но вот не задача, мне хочется, что-бы - ввод , вывод , исправление и удаление были на разных страницах, сейчас мучаюсь с вводом, если получиться, то пойму как и в других случаях добиться ожидаемого результата. Помогите...
Rio-Shaman, 26 Января 2013 г. 21:10 пишет:
Автор
Так а в чем именно затруднение? пишите код не в одном файле а в нескольких. Вам всего лишь понадобится менять путь в атрибуте action тега form
Ответ для пользователя: HerrGrau
HerrGrau, 27 Января 2013 г. 16:54 пишет:
Гость
Кстати , тоже была проблема с Header столько нервов истрепал, но решения не нашел, так как тестирую на локальной машине, вазможно с сервером проблема, вообщем нашел решение, вуаля , все как по маслу...
Пожалуйста: echo "<script>document.location.replace('test.php');</script>";
Я визжал как сучка, когда оно сработало....
Rio-Shaman, 28 Января 2013 г. 13:41 пишет:
Автор
функция header посылает заголовки браузеру. Она не работает если перед ее вызовом уже была послана какая либо информация браузеру... Информация посылается например оператором echo. Или может быть вот такая проблема:
<?php
какой то код
?>

<?php
продолжение кода
?>
Между первыми php скобками и вторыми есть перенос, он выводится в браузер, стало быть если написать вот так:
<?php
какой то код
?>

<?php
header("......");
?>
то Вы увидите ошибку о том что функция header() не может отработать... А если написать вот так:
<?php
какой то код

header("......");
?>
то все будет нормально.
Ответ для пользователя: HerrGrau
Classicus, 25 Апреля 2013 г. 03:34 пишет:
Гость
Здравствуйте!
Как сделать в базе данных сайта вывод чисел с тремя нулями, чтобы вводились тысячи а выводились миллионы
Алексей, 25 Апреля 2013 г. 10:18 пишет:
Автор
Как решить заданную Вами задачу на уровне SQL'а я не знаю. Скорее всего Ваша задача решается посредством обработки данных в php. Т.е. в скрипте php превращаются тысячи в миллионы и после записываются в БД
Ответ для пользователя: Classicus
Tatjana, 01 Мая 2013 г. 10:30 пишет:
Гость
Единственная статья во всем интернет ресурсе, которая мне помогла!!! Большое вам спасибо!
Александр, 04 Июня 2013 г. 23:37 пишет:
Гость
Сложные вещи рассказываются просто. Просьба написать файл index.php,
как в нем будет подключаться файл test.php.
Алексей, 06 Июня 2013 г. 10:37 пишет:
Автор
Файл index.php:

код бла-бла-бла

if (условие)
{
include("test.php");
}

код бла-бла-бла
Ответ для пользователя: Александр
Александр, 13 Июня 2013 г. 18:34 пишет:
Гость
У меня в базе данных такой код:
<body>
<?php include(\\\'blocks/top.php\\\');?>

код бла-бла-бла

<?php include(\\\'blocks/bod.php\\\');?>
</body>
</html>

Пробовал:
<?php require_once "blocks/top.php"; ?>

На экране нет bod.php и top.php. Изображение смещается в верх. Браузер не видит этих строчек.
Путь указан правильно так, как тоже самое, но без базы данных показывает правильно.
Александр, 13 Июня 2013 г. 18:37 пишет:
Гость
Три наклонные черты 4 штуки это ошибка у меня в коде такого нет
Алексей, 14 Июня 2013 г. 10:31 пишет:
Автор
Я так понял Вы в базе данных видите не вот такую строчку:
<?php include('blocks/top.php');?>
А вот такую:
<?php include(\\\'blocks/top.php\\\');?>
В общем то это нормально, так как апостроф должен быть экранирован.
Для запуска данного кода нужно использовать функцию eval(), но перед этим необходимо удалить экранирование у кода с помощью функции stripslashes().
Ответ для пользователя: Александр
Александр, 18 Августа 2013 г. 14:22 пишет:
Гость
Функцию eval ругают кому не лень.
Я взял с Вашего поста: 1. Подключение к базе данных
2. Вывод заголовков
3 Вывод полного текста
и добавил закрытие базы данных.
У меня все хорошо работает, но в базе данных у меня страницы сайта.
Каждая страница имеет от 4 до 8 повторяющихся блоков.
Без базы данных эти вопросы решаются с помощью include или
require_once.
Подскажите новичку как добиться работы с блоками без eval
Алексей, 19 Августа 2013 г. 10:22 пишет:
Автор
Ругают ее из-за соображения в безопасности, ибо если разрешить запись кода в БД и исполнения его с помощью eval() пользователям, то жди беды. Если же только админ может работать с данной функцией, то все будет в порядке.
Если еще один способ, если например в БД хранить не сам код, а путь к файлу с кодом, то можно будет использовать include()
// значения данного массива берется из БД
$paths = array(
    'blocks/top.php',
    'blocks/bod.php'
);

foreach ($paths as $path)
    include($path);
Ответ для пользователя: Александр
Артем, 22 Августа 2013 г. 15:38 пишет:
Гость
я новичек, тупикнулся на этом моменте, что и куда пихать, можно еще по подробнее)
"Вывод записей из базы данных


Начнем с этого, так как при создание какого либо проекта необходимо наглядно видеть процесс, а без вывода это очень сложно сделать ( я буду работать с файлом 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));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
"
Артем, 22 Августа 2013 г. 16:01 пишет:
Гость
Все я разобрался, я не мог понять принцип подключение бд, после того как я добавил оператор echo и проверил работает ли, только после этого до меня дошло)
Павел, 06 Ноября 2013 г. 22:21 пишет:
Гость
Здравствуйте Алексей. При подключении к базе данных и создании таблицы в примере используются "phptest" и page" соответственно.С использованием этих названий нормально происходит подключение и вывод заголовков. Если же я использую другие названия базы данных и таблицы,например:"basa" и "table" соответственно,то уже при выводе заголовков статей сервер выдает ошибку: mysql_fetch_array() expects parametr 1 to be resurce. Подскажите в чем проблема.
Алексей, 07 Ноября 2013 г. 09:16 пишет:
Автор
В вашем случае подключение к БД должно выглядеть вот так:
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "basa";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));	
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
А запрос в БД должен быть вот таким:
$result   = mysql_query("SELECT * FROM table");
$myrow    = mysql_fetch_array($result);
Ответ для пользователя: Павел
Павел, 18 Ноября 2013 г. 17:19 пишет:
Гость
Алексей, здраствуйте. У меня такая проблема. Добавление записей происходит нормально,а вот редактирование нет. В форме редактирования изменяю первичный текст,нажимаю "Редактировать пост",появляются как и положено ссылки: "тестовый заголовок" и "Добавить пост". Нажимаю на ссылку "тестовый заголовок" - текст не отредактирован. Подскажите, в чем может быть проблема. Может опять в кодировке?
Алексей, 19 Ноября 2013 г. 10:59 пишет:
Автор
В конце статьи есть полный код проделанной работы. Он у Вас работает?
Ответ для пользователя: Павел
Павел, 19 Ноября 2013 г. 12:31 пишет:
Гость
Я пишу код по частям,так легче устранять ошибки. В настоящее время дошел до радела "Удаление записей из БД".
Павел, 19 Ноября 2013 г. 13:54 пишет:
Гость
Код написал полностью. Все работает,кроме редактирования постов. В базе" phptest" для эсперемента я создал еще одну таблицу "page1",вручную ввел первичный данные,а потом с помощью команды URDATE попытался изменить данные полей,но ничего не получилось. Подозреваю,что может быть дефект скачивания с сайта denwer.ru.
Алексей, 19 Ноября 2013 г. 14:11 пишет:
Автор
Хотите сказать, что глюк именно в сервере MySQL?
Ответ для пользователя: Павел
Павел, 19 Ноября 2013 г. 22:11 пишет:
Гость
Да,думаю так.Потому что в отдельном файле создал отдельную базу данных. Через phpMyAdmin командой INSERT данные добавляются,а обновление информации оператором UPDATE не производится. Попробую Denwer убрать и снова закачать.
Dokel, 01 Декабря 2013 г. 14:43 пишет:
Гость
можешь отправить файл index.html?свой
Ответ для пользователя: Алексей
Алексей, 01 Декабря 2013 г. 18:06 пишет:
Автор
У меня его уже давно нет. Он полностью опубликован в конце статьи.
Ответ для пользователя: Dokel
Алексей, 21 Января 2014 г. 03:18 пишет:
Гость
Здравствуйте, у меня та же проблема. скопировал уже все готовое "Результат работ".
Все сделал так же, даже все названия. И работает абсолютно все кроме редактирования, причем редактирование у меня вообще не работает, при нажатии выводит к списку но ничего не меняет.
я в этом деле новенький да и по образованию даже не программист, так сам разбираться пытаюсь да по интернету лажу. С данной ситуацией вообще ничего не понимаю, хост вроде хороший TimeWeb.
Алексей, 21 Января 2014 г. 11:23 пишет:
Автор
Попробуйте заменить
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
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($_POST['title_post_edd']) AND isset($_POST['text_post_edd']))
{
	$sql = ""
		."UPDATE"
			." page"
		." SET"
			." title = '".$_POST['title_post_edd']."',"
			." text = '".$_POST['text_post_edd']."'"
		." WHERE"
			." id = '".$_POST['id_post_edd']."'"
	;
	
	echo $sql;
	die();
	
	$result = mysql_query($sql);
	
	header("location: test.php");
	exit;
}
//РЕДАКТИРОВАНИЕ ЗАПИСЕЙ
Попробуйте обновить заметку. То что Вам выдаст браузер пришлите в комментарии, посмотрю правильный ли формируется update запрос.
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 11:45 пишет:
Гость
Вот что выдает
UPDATE page SET title = 'Тестовый заголовок 2', text = 'Тестовый текст 2' WHERE id = ''
Алексей, 21 Января 2014 г. 11:58 пишет:
Гость
Спасибо большое, разобрался. Увидел что в UPDATE проблема с id, все перепроверил и нашел у себя ошибку, написал по привычке поле id заглавными ID что повлияло на работоспособность вашей формы.
Еще раз спасибо огромное и сори за беспокойство.
Алексей, 21 Января 2014 г. 12:01 пишет:
Автор
У Вас почему то не передался id редактируемой записи. Именно поэтому статья не обновляется. У Вас на странице редактирования форма заполнена, или пуста?
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 12:02 пишет:
Автор
Ничего страшного =) Всегда рад помочь
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 12:59 пишет:
Гость
Здравствуйте еще раз.

Я привязал данный файл к некой форме index.php, ограничивающая выведенную информацию из БД по неким параметрам пока по одному, допустим улица "Ленина".
  <div id="username">    
    <label for="username-field" class="overlabel">Улица...</label>
    <input id="username-field" type="text" name="street">  /
  </div>
настроил выведение вывод заголовка как мне надо
$result = mysql_query("SELECT id,title FROM page WHERE title LIKE '%$street%'");
все работает отлично. но когда редактирую пост и нажимаю на кнопку "Редактировать пост", меня возвращает в раздел вывода заголовка и там информация выводится полностью вся из БД.

Возник вопрос. Возможно ли как-то сделать чтобы после редактирования меня возвращало все в тот же раздел вывода заголовка но со старыми ограничениями по выведению информации из БД улице "Ленина"?

Приношу извинения если вопрос немного отклоняется от темы.
За тему вам большое спасибо. Провел почти 2 недели в поисках доступной информации, для осуществления своей идеи. Не знаю что бы без вас делал =)
Алексей, 21 Января 2014 г. 15:32 пишет:
Автор
Как обработчику передается переменная $street?
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 16:57 пишет:
Гость
Метод Post. Вот содержимое index.php
<form name="login" action="test.php" method="post">
 
  <div id="username">    
    <label for="username-field" class="overlabel">Улица...</label>
    <input id="username-field" type="text" name="street">  /
  </div>
  <div id="password">
    <label for="password-field" class="overlabel">ФИО 1...</label>
    <input id="password-field" type="text" name="FIO1">
  </div>

  <center><input type="submit" name="submit" value="Cauta" class="submit"></center>
 
</form>
Немного кривовато, но это черновик, свое писать буду когда разберусь с нюансами.
Алексей, 21 Января 2014 г. 17:15 пишет:
Автор
Вот для этого запроса:
$result = mysql_query("SELECT id,title FROM page WHERE title LIKE '%$street%'");
Переменная $street откуда берет свое значение?
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 17:44 пишет:
Гость
Я видать не совсем понимаю суть вопроса.
Данная переменная в моем понимании берет значение из дива
<div id="username">   
который является чем-то вроде поисковика по базе, ввожу туда данные по которым хочу отфильтровать запрос, чтобы не выводило всю базу.
Алексей, 21 Января 2014 г. 19:22 пишет:
Автор
Для того что бы выводились заголовки статей содержащие улицу (а не все подряд) необходимо эту самую улице посылать не post запросом, а get запросом. То есть на примере моего кода, это выглядело бы вот так:
//ВЫВОД ЗАГОЛОВКОВ
if(!isset($_GET['id']) AND !isset($_GET['add']) AND !isset($_GET['edd']))
{
	$where = array(); // массив содержащий дополнительные условия
	
	// если существует улица, то закидываем дополнительное условие с ее участием в массив
	if (isset($_GET['street']))
		$where[] = "title LIKE '%".$_GET['street']."%'";
	
	/*
	 * Для формирование переменной $sql используется тернарный (сокращенный оператор if else) оператор:
	 * ( (условие) ? действие если условие выполнено : действие если условие НЕ выполнено )
	 * 
	 * Например можно написать вот так:
	 * 
	 * if (1 == 1) {
	 * 	echo "1 равно 1";
	 * }
	 * else {
	 * 	echo "1 НЕ равно 1";
	 * }
	 * 
	 * А можно тоже самое записать вот так
	 * 
	 * ( (1 == 1) ? echo "1 равно 1" : echo "1 НЕ равно 1" )
	 */
	
	$sql = ""
		."SELECT"
			." id,"
			." title"
		." FROM"
			." page"
		.( (!empty($where)) ? " WHERE ".implode(' AND ', $where) : "" )
	;
	
	$result = mysql_query($sql);
	$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>";
}
//ВЫВОД ЗАГОЛОВКОВ
Таким образом значение улицы можно передать с помощью ссылки, а не формы.
Ответ для пользователя: Алексей
Алексей, 21 Января 2014 г. 22:57 пишет:
Гость
Спасибо
Алексей, 22 Января 2014 г. 00:07 пишет:
Гость
И опять здравствуйте.
Подскажите пожалуйста можно ли сделать так чтобы ссылка состояла не только из поля title а еще и к примеру из поля text
в таком формате title text
исходя из- своего же примера выше: Хочется сделать ссылкой "Ленина 34"
где "Ленина" находится в одной ячейке ( улицы), а "34" в другой ( дома). но чтобы ссылка была единой.
Заранее спасибо.
Алексей, 22 Января 2014 г. 00:52 пишет:
Гость
Все разобрался, пардон за беспокойство.
Проблемы возникали из-за русского имени поля, переименовал в английское все заработало.
Саша, 25 Марта 2014 г. 15:03 пишет:
Гость
Большое спасибо автору данной статьи. У меня были проблемы с передачей id в запросе и поэтому в коде всегда была целая куча велосипедов с сессиями и куками. Очень просто и хорошо все объяснено. Может вам книгу для начинающих написать? Потому что новичкам очень сложно, а вы довольно понятно все объясняете. В книгах для новичков обычно пишут что-то вроде "Будем считать что вы знакомы с методами get и post". И тут приходиться лезть в интернет итак через каждых пару страниц.
Алексей, 16 Мая 2014 г. 19:07 пишет:
Гость
Здравствуйте, по вашему примеру сделал небольшую 2 небольших БД для себе. Подскажите пожалуйста можно ли сделать кнопку <input type='submit' value='Редактировать пост'> так чтобы она отправляла форму ( в моём случае она отправляет ее в другую БД) и удаляла данную строку в прошлой БД одновременно. 2 кнопки сделал вот так
echo "<input value='Удалить клиента' "?> onClick="window.location='http://www.#.ru/test.php?del=<?php
echo "".$_GET['add'].""?>'">
<?php
echo "
<input  style='cursor:pointer;' type='submit' value='Добавить клиента'>
    </form>";
а в одну не могу объединить. Немного грязненько, но это черновик. Заранее спасибо за ответ.
Алексей, 19 Мая 2014 г. 10:29 пишет:
Автор
Во-первых, хочу уточнить. У Вас именно две БД или все же две таблицы в одной БД?
Во-вторых, если у записей одинаковые ID, то удалять можно с помощью двух простых SQL запросов DELETE
Ответ для пользователя: Алексей
Алексей, 20 Мая 2014 г. 09:14 пишет:
Гость
БД одна, а таблицы две. ID у всех разные и выставлено AUTO_INCREMENT. Удаляю все как в вашем примере
//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['del']))
{
$result = mysql_query ("DELETE FROM ### WHERE id='$_GET[del]'");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ
Алексей, 20 Мая 2014 г. 10:15 пишет:
Автор
Запись в одной таблице, как то связаны с записью в другой?
Ответ для пользователя: Алексей
Алексей, 20 Мая 2014 г. 15:30 пишет:
Гость
Нет,не связаны. Суть в том что я сделал БД для работы с клиентами, одна таблица ( новые клиенты ), те кто оставил заявку на сайте, а потом я захожу на вспомогательный сайт, обзваниваю клиента, корректирую и от туда уже мне надо одной кнопкой сохранить все скорректированное в другую таблицу ( базу клиентов ) при том что если перенос проходит успешно из таблицы ( новые клиенты ) он удаляется, а если нет то выдает ошибку, такой клиент уже существует. Вот собственно что хочу реализовать.
Алексей, 20 Мая 2014 г. 15:33 пишет:
Гость
Вся БД для работы с клиентами реализована по вашему примеру, но я провел коррекцию под себя.
За что вам огромное спасибо, без вашего примера очень долго не мог ее сделать.
Алексей, 21 Мая 2014 г. 18:17 пишет:
Автор
Первое что надо сделать, это вытащить запись из таблицы с новыми клиентами. После попытаться записать выбранного клиента в основную базу. В случае успеха удалить клиента из базы с новыми клиентами.
Приблизительно вот так:
if(!isset($_GET['client_id']))
{
    // получаем клиента из таблицы с новыми клиентами
    $client = getClientByID();
        
    // вставляем его в таблицу с базой клиентов
    if (!empty($client)) {
        // если вставка прошла успешно
        if (insertClient($client)) {
            if (!deleteClient($client['id']))
                echo "Ошибка при удаление нового клиента";
        }
        else
            echo "Ошибка при записи клиента в основную базу";
    }
    else
        echo "Ошибка при выборке клиента из базы с новыми клиентами";
}

function deleteClient($clienID)
{
    $sql = "DELETE FROM таблица с новыми клиентами WHERE id = '".$clienID."'";
    
    if(!mysql_query($sql))
        return FALSE;
        
    return TRUE;
}
    
function getClientByID()
{
        $myrow      = FALSE;
        $resultList = array();
        
        $sql        = ""
            ."SELECT"
                ." id,"
                ." поле 1,"
                ." поле 2"
            ." FROM"
                ." таблица с новыми клиентами"
            ." WHERE"
                ." id   = '".$_GET['client_id']."'"
        ;

        if ($result = mysql_query($sql))
            $myrow = mysqli_fetch_assoc($result);
        
        if ($myrow !== FALSE)
            do {
                foreach($myrow as $key => $value)
                    $resultList[$key] = $value;
            }
            while ($myrow = mysqli_fetch_assoc($result));
        
        return $resultList;
}

function insertClient($client)
{
    $sql = "INSERT INTO таблица с базой клиентов (поле 1, поле 2) VALUES ('".$client['поле 1']."', '".$client['поле 2']."')";
    
    if(!mysql_query($sql))
        return FALSE;
        
    return TRUE;
}
На страницу с данным скриптом необходимо методом GET послaть ключ client_id
P.S. Я данный скрипт не тестил, возможно где-то допустил ошибку
Ответ для пользователя: Алексей
Алексей, 22 Мая 2014 г. 00:32 пишет:
Гость
Приношу свои извинения за безграмотность в данной сфере.
Не совсем понял фразу "послaть ключ client_id" что значит ключ?
Посылаю на страницу с данным скриптом Array ( [client_id] => 5 [surname] => Пупкин [name] => Федор [middle_name] => Семенович .....) методом GET, предварительно исправив под себя названия полей и таблиц.
Ничего не работает 8( но и ошибок не выдает.
Алексей, 22 Мая 2014 г. 08:29 пишет:
Автор
Вы все правильно делаете.. в коде есть одна ошибка.. самая первая строчка:
if(!isset($_GET['client_id']))
Необходимо убрать знак восклицания. Что бы получилось вот так:
if(isset($_GET['client_id']))
И вот еще что. Поля которые Вы посылаете методом ГЕТ, я про вот это
Array ( [client_id] => 5 [surname] => Пупкин [name] => Федор [middle_name] => Семенович .....)
совершенно не обязательны(кроме client_id), так как все они получаются по client_id в функции getClientByID()
Ответ для пользователя: Алексей
Алексей, 27 Мая 2014 г. 09:10 пишет:
Гость
Здравствуйте еще раз, уже который день мучаюсь но все равно ничего не работает, пишет "Ошибка при выборке клиента из базы с новыми клиентами".
Если честно я не совсем понимаю принцип получения данных и подключения данного скрипта к БД.
Алексей, 30 Мая 2014 г. 19:56 пишет:
Автор
До этого скрипта производилось подключение к БД?
Ответ для пользователя: Алексей
Алексей, 30 Мая 2014 г. 22:48 пишет:
Гость
Да, на предыдущей странице подключение к БД производилось нижеуказанным способом. Не совсем в курсе получает ли функция getClientByID() такие данные в связи с чем пробовал подключить и страницу с вашим скриптом к БД, что тоже не увенчалось успехом. Читал про getClientByID(), но если честно описание данной функции не совсем поддается моему пониманию, понял только что она ищет id и по нему тянет инфу.

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "ХХХ";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "ХХХ";//Имя пользователя БД
$passUSER = "ХХХ";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
Алексей, 02 Июня 2014 г. 10:14 пишет:
Автор
Попробуйте переписать функцию getClientByID() вот так:
function getClientByID()
{
        $myrow      = FALSE;
        $error      = FALSE;
        $resultList = array();
        
        $sql        = ""
            ."SELECT"
                ." id,"
                ." поле 1,"
                ." поле 2"
            ." FROM"
                ." таблица с новыми клиентами"
            ." WHERE"
                ." id   = '".$_GET['client_id']."'"
        ;

        if ($result = mysql_query($sql))
            $myrow = mysqli_fetch_assoc($result);
        
        if ($myrow !== FALSE) {
            do {
                foreach($myrow as $key => $value)
                    $resultList[$key] = $value;
            }
            while ($myrow = mysqli_fetch_assoc($result));
        }
        else
            $error = mysql_error();
        
        if ($error !== FALSE) {
            echo $error;
            die();
        }
        
        return $resultList;
}
Ответ для пользователя: Алексей
Алексей, 02 Июня 2014 г. 12:38 пишет:
Гость
Результат тот же. Как будто не видит мою БД вообще.
Алексей, 02 Июня 2014 г. 13:57 пишет:
Гость
Может я просто данные неправильно передаю в скрипт. Вот краткое описание моего скрипта для обработки данных клиента перед записью его в новую таблицу и удалением из старой. Собственно то что находится перед вашим скриптом.
<?php
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "ХХХ";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "ХХХ";//Имя пользователя БД
$passUSER = "ХХХ";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));	
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

//ВЫВОД ЗАГОЛОВКОВ
 if(!isset($_GET['id']) AND !isset($_GET['add']) AND !isset($_GET['edd']))
{
...
}
//ВЫВОД ЗАГОЛОВКОВ

//ВЫВОД ПОЛНОГО ТЕКСТА
if(isset($_GET['id']))
{
$result = mysql_query("SELECT * FROM newclient WHERE id='$_GET[id]'");
$myrow = mysql_fetch_array($result);
echo "<table>
...
</table>";
?>
<input type='button' value='Вернуться к списку' style="cursor:pointer;" onClick="history.go(-1)"><?php
echo "<input type='button' value='Редактировать'"?> onClick="window.location='http://www.###.ru/test.php?add=<?php
echo "".$_GET['id'].""?>'">
<?php
}
//ВЫВОД ПОЛНОГО ТЕКСТА

//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['add']))
{
$result = mysql_query("SELECT * FROM newclient WHERE id='$_GET[add]'");
$myrow = mysql_fetch_array($result);

    echo "<form action='form.php' method='GET' name='client_id'>
	<input type='hidden' name='client_id' value='".$myrow[id]."'>
	 <table Style='text-align:center;' border='0px'>
		<tr height='20px'><td>Фамилия</td>
...
		<tr height='20px'><td> <input id='' value='".$myrow[surname]."'></td>
...
	 </table>
	 <input type='submit' value='Добавить клиента'>
    </form>";
}
//ФОРМА ДОБАВЛЕНИЕ ЗАПИСЕЙ
?>
А в фале form.php находится ваш скрипт. Причем если я передаю данные методом POST и в данном файле пишу
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
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]')
...
");
header("location: test.php");
exit;
}
//ДОБАВЛЕНИЕ ЗАПИСЕЙ
а кнопку удаления делаю отдельно
echo "<input value='Удалить клиента' "?> onClick="window.location='http://www.###.ru/test.php?del=<?php
echo "".$_GET['add'].""?>'">

//УДАЛЕНИЕ ЗАПИСЕЙ
if(isset($_GET['del']))
{
$result = mysql_query ("DELETE FROM newclient WHERE id='$_GET[del]'");
header("location: test.php");
exit;
}
//УДАЛЕНИЕ ЗАПИСЕЙ
То все работает отлично, ну естественно в 2 кнопки и без выведения ошибок.
Алексей, 02 Июня 2014 г. 17:21 пишет:
Автор
Ваша форма отправляет данные в файл form.php. В нем есть подключение к БД?
Ответ для пользователя: Алексей
Алексей, 02 Июня 2014 г. 17:28 пишет:
Автор
Тут скорее всего два варианта.
1. Нет подключения к БД
2. Неверно составленный SQL запрос в функции getClientByID()
Может попробовать исправить функцию вот так:
function getClientByID()
{
        $myrow      = FALSE;
        $resultList = array();
        
        echo $sql        = ""
            ."SELECT"
                ." id,"
                ." поле 1,"
                ." поле 2"
            ." FROM"
                ." таблица с новыми клиентами"
            ." WHERE"
                ." id   = '".$_GET['client_id']."'"
        ;
        die();
        if ($result = mysql_query($sql))
            $myrow = mysqli_fetch_assoc($result);
        
        if ($myrow !== FALSE)
            do {
                foreach($myrow as $key => $value)
                    $resultList[$key] = $value;
            }
            while ($myrow = mysqli_fetch_assoc($result));
        
        return $resultList;
}
Во время исполнения на экране должны будите увидеть SQL запрос. Исполните его в phpmyadmin во вкладке SQL. Если запрос прошел успешно, и Вы получите клиента, то проблема скорее всего именно в подключение к БД. Если запрос выдаст ошибку, то неплохо было бы знать что за ошибка.
Если же Вы вообще ничего не увидите, то скорее всего проблема в том что вот это кусок кода:
if(isset($_GET['client_id']))
{
    // получаем клиента из таблицы с новыми клиентами
    $client = getClientByID();
        
    // вставляем его в таблицу с базой клиентов
    if (!empty($client)) {
        // если вставка прошла успешно
        if (insertClient($client)) {
            if (!deleteClient($client['id']))
                echo "Ошибка при удаление нового клиента";
        }
        else
            echo "Ошибка при записи клиента в основную базу";
    }
    else
        echo "Ошибка при выборке клиента из базы с новыми клиентами";
}
не исполняется.. нужно будет понять почему...
Ответ для пользователя: Алексей
Алексей, 02 Июня 2014 г. 21:13 пишет:
Гость
в form.php находится подключение к БД

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "ХХХ";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "ХХХ";//Имя пользователя БД
$passUSER = "ХХХ";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

и ваш скрипт, больше ничего
Ответ для пользователя: Алексей
Алексей, 02 Июня 2014 г. 21:16 пишет:
Гость
Попробую, потом отпишусь. На самом деле мне почему-то кажется что данная форма просто не подключается к БД по какой-то причине, возможно я ошибаюсь.
Алексей, 03 Июня 2014 г. 10:18 пишет:
Гость
Здравствуйте, SQL запрос выводимый скриптом проводится безупречно и находит именно того клиента который меня интересует.
Ответ для пользователя: Алексей
Алексей, 04 Июня 2014 г. 09:17 пишет:
Гость
С подключением к БД вроде все нормально проверяю таким скриптом никаких ошибок не выдает.

$host="localhost";
$user="ХХХ";
$password="ХХХ";
$db="ХХХ";
mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db) or die("Нет соединения с БД".mysql_error());
Алексей, 04 Июня 2014 г. 11:48 пишет:
Гость
Здравствуйте еще раз, подскажите пожалуйста возможно ли объединить 2 куска скрипта ( добавление клиента и удаление клиента )в один, таким образом чтобы второй выполнялся только если первый прошел без ошибок. И мне кажется что я не указал факт необходимости не просто перенести из таблицы в таблицу, а перенести уже скорректированную информацию. Оба куска по отдельности работают как мне и надо.

//ДОБАВЛЕНИЕ КЛИЕНТА
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;
}
//УДАЛЕНИЕ КЛИЕНТА
Илнур, 03 Января 2015 г. 19:01 пишет:
Гость
ОГРОМНОЕ СПАСИБО!!! Алексей!
По истине полезный пост месяц гуглил не чего толкового в рунете нет одна .....
Твой пост именно то что надо было для меня ,да не только для меня как видно по комментам.
Сам я пока в php не очень так себе начинающий.
Мне нужно было именно по запросу пользователя ,то есть по ссылке, что бы подставлялась определенная статья из базы данных, а ссылки "редактировать", "добавить" и "удалить" я просто удалил со скрипта они, в моем случае, не нужны. (Думаю нормально или я не прав?).
Алексей есть парочка вопросов не сочти за наглость (я пока не волшебник токо учусь).
1. Я слышал о таких вещах как вредоносный код и SQL-инъекции в GET запросе в твоем скрипте по моему нет не какой фильтрации или я не прав прошу прощения если не прав. Если я прав как можно исправить?
2. И второе когда данные подставляются из базы данных все данные выводятся и картинки как положено, но почему то не применяются стили (может я че то не то делаю не подскажете). Прошу прощения если какую глупость написал (я пока не волшебник токо учусь).
Илнур, 03 Января 2015 г. 19:27 пишет:
Гость
Второй вопрос можно не учитывать как вопрос, разорался, сам не много сглупил.
Ответ для пользователя: Илнур
Алексей, 03 Января 2015 г. 23:23 пишет:
Автор
1. Я слышал о таких вещах как вредоносный код и SQL-инъекции в GET запросе в твоем скрипте по моему нет не какой фильтрации или я не прав прошу прощения если не прав. Если я прав как можно исправить?
Да Вы правы. В коде нет никаких проверок.
Отвечая на вопрос, "что же делать?" могу сказать следующее. Вам как начинающему программисту необходимо усвоить одну вещь. Каждая созданная Вами переменная должна быть четко определена. Если в глоб массиве GET под ключом id ($_GET['id']) должно быть число, и Вы будете использовать данную переменную как число, то при получение из вне Вы должны привести ее к числу (принудительно привести к числу можно вот так: (int)$_GET['id']). Избегайте создание переменных в которых, по задумке, содержится неизвестный тип данных.
Что касается SQL инъекций, то тут немного сложнее. Все упирается в используемую Вами БД. Если это mysql то Вам необходимо знать, что у данной БД есть свои спец символы. Самая опасная это одинарная кавыка. Если ее не экранировать (функция addslashes()), то злоумышленник может видоизменить Ваш SQL запрос.
Ответ для пользователя: Илнур
Илнур, 04 Января 2015 г. 10:56 пишет:
Гость
Спасибо что ответили Алексей!
Учту Ваши замечания. Кое что для меня в php пока сложновато, (я пока не волшебник токо учусь).
но как говорил великий вождь пролетариата учится, учится и еще раз учится.
Будем учится. Спасибо!
Илнур, 05 Января 2015 г. 17:16 пишет:
Гость
Доброго времени всем!
Все таки я решил ознакомится с возможностями sql инъекции после прочитанных несколько статей я в ужасе,
если конечно все что я прочел, правда, какая то доля правды все равно есть думаю.
В связи с этим что Вы можете сказать про эту проверку
<?
//Проверяем Пост, Гет и куки на ненужные символы
$arrs=array('_GET', '_POST', '_COOKIE');
foreach($arrs as $arr_key => $arr_value){
    if(is_array($$arr_value)){
        foreach($$arr_value as $key => $value){
            $nbz1=substr_count($value,'--');
            $nbz2=substr_count($value,'/*');
            $nbz3=substr_count($value,"'");
            $nbz4=substr_count($value,'"');
            if($nbz1>0 || $nbz2>0 || $nbz3>0 || $nbz4>0){
                print '<div class="error">Вы используете недопустимые символы в '.str_replace('_','',$arr_value).'-запросе!<br><a href="javascript:window.history.back();">Назад</a></div>';
                exit();
            }
        }
    }
}
?>
Алексей, 06 Января 2015 г. 15:04 пишет:
Автор
Я Вам так скажу. Данный подход не панацея, по той простой причине, что в БД бывает необходимо записать не нужные символы. Если бы я избавлялся от них, Вы не оставили бы данный комментарий у меня на блоге.
В большинстве случаев все SQL инъекции базируются
1. на вставке одинарной кавычке
2. на том, что программист не обводит данные в те же самые кавычки.
Что касается второго пункта, вот пару примеров. Не правильно писать вот так:
"SELECT * FROM name_table WHERE id = " . $id
Правильно писать вот так:
"SELECT * FROM name_table WHERE id = '" . $id . "'"
Что касается первого пункта. Используя функцию addslashes() на вот такой строчке
'привет' "мир"
Мы получаем вот такую строчку
\'привет\' \"мир\"
Все что представляет опасность будет за комментировано
Остаются знаки комментирования SQL кода. Но они не опасны, если использовать выше описанные два пункта.

p.s.: Взломать можно все что угодно, главное обезопасить себя от тех кто ломает по какой-то инструкции вычитанной где-то
Ответ для пользователя: Илнур
Илнур, 06 Января 2015 г. 19:44 пишет:
Гость
Спасибо Алексей!