Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (3) 1 [2] 3  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Не получается сделать проверку., Редактирование таблицы.
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




// Если таблица не существуе то ошибка
$sql=mysql_query($sql) or die("Ошибка данных!");

Комментарий не верен. Тут проверка выполнился ли запрос без ошибок.
и "$sql = " тут лишнее.

Уверен, что этот код в нужном месте стартует? Да и не только этот
// Стартуем сессию
session_start();

Цитата
Примечание: если вы используете сессии на базе кук, вы обязаны вызвать session_start() перед каким-либо выводом в браузер.



И тут магическим образом появилась $page_title и $save (0_о)!
//Получаем данные
$sql = "select * FROM `mytable` where `id` = '".$page_title."'";

Почти все знают что это и откуда. Но НЕ все серверы настроены одинаково. Пишите чтобы работало ВЕЗДЕ.
И ещё обрабатывайте данные, которые передаете базе данных.
http://php.net/manual/ru/function.mysql-re...cape-string.php
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Цитата

Комментарий не верен. Тут проверка выполнился ли запрос без ошибок.
и "$sql = " тут лишнее.


Исправил на
$query = "select * FROM `mytable` where `id` = '".$page_title."'";
$sql = mysql_query($query) or die("Ошибка данных!");

и для UPDATE тоже исправил

Цитата

Уверен, что этот код в нужном месте стартует? Да и не только этот
// Стартуем сессию
session_start();


А где тогда прописать? В самом начале?
Вот так прописать?

<?php
// Стартуем сессию
session_start();
?>
<!DOCTYPE HTML>
<html lang="ru">
<head



И какой еще код стартует не в том месте?


Цитата

И тут магическим образом появилась $page_title и $save (0_о)!
//Получаем данные
$sql = "select * FROM `mytable` where `id` = '".$page_title."'";


А что тогда нужно задать для $page_title?
Когда нажимаешь редактировать выходит вот такая ссылка из сессии /obr.php?page_title=3
Где 3 это id

А $save это кнопка submit в которой name="save".

Я понимаю что $save здесь в общем то не причем, но тогда что нужно присвоить
для $page_title?






PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Kusss про
Цитата

И ещё обрабатывайте данные, которые передаете базе данных.
http://php.net/manual/ru/function.mysql-re...cape-string.php


Прописал вот так
[code]
//Выбираем таблицу для редактирования
$query = "UPDATE `mytable`

SET

`name` = '".mysql_real_escape_string($name_edit)."',
`country` = '".mysql_real_escape_string($coun_edit)."'

WHERE
`id` = '".$_SESSION['id']."'";

// Если не правильный запрос то ошибка
$sql = mysql_query($query) or die("Ошибка данных!");

echo "<b>УСПЕХ!</b>"; //Если записи закончились
}

Правильно или нет?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




Я не разбираюсь в настройках сервера, знаю только что есть такая штука как register_globals
Цитата

Примечание: С появлением PHP 5.4 директива register_globals была удалена и больше не может быть использована. Это касается тех, кому нужно обновить старое приложение.

Включенный параметр конфигурации register_globals делает несколько типов переменных (в том числе из $_POST, $_GET и $_REQUEST) глобальными, доступными в глобальной области видимости вашего приложение. Это может легко привести к проблемам с безопасностью, поскольку ваше приложение не сможет эффективно определить откуда пришли данные.

Например : $_GET['foo'] будет доступна через $foo, которая может заместить переменную, которая не была объявлена. Если вы используете PHP < 5.4.0 убедитесь что register_globals off (выключена).


Чтобы не было проблем, советую выключить register_globals в файле .htaccess, прописать там строку
php_flag register_globals off
$page_title = $_GET['page_title'];
$save = $_POST['save'];

add
Обрабатывать результаты форм лучше ДО html кода. И после этого "перезагружать" страницу, обнуляя данные формы.

Это сообщение отредактировал Kusss - 17.02.2016 - 00:26
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Цитата

Чтобы не было проблем, советую выключить register_globals в файле .htaccess, прописать там строку

php_flag register_globals off


Большое спасибо Kusss

А про
$page_title = $_GET['page_title'];
$save = $_POST['save'];


Сейчас попробую. Хотел присвоить это переменным сейчас, но делал не правильно.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Kusss я прописал вот так

<?php
// Стартуем сессию
session_start();
// Подключаемся к базе
require_once ('db.php');

$page_title = $_GET['page'];
$save = $_POST['save'];

//Получаем данные
$query = "select * FROM `mytable` where `id` = '".$page_title."'";
// Если таблица не существуе то ошибка
$sql = mysql_query($query) or die("Ошибка данных!");

while($result = mysql_fetch_assoc($sql))
{
$nam=$result['name'];
$content=$result['country'];

}

//При нажатии на кнопку получаем сообщени об Успехе
if($save){

//Выбираем таблицу для редактирования
$query = "UPDATE `mytable`

SET

`name` = '"
.mysql_real_escape_string($name_edit)."',
`country` = '"
.mysql_real_escape_string($coun_edit)."'

WHERE
`id` = '"
.$_SESSION['id']."'";

// Если таблица не существуе то ошибка
$sql = mysql_query($query) or die("Ошибка данных!");

echo "<b>УСПЕХ!</b>"; //Если записи закончились
}

mysql_close($link);
?>


Правильно ли я прописал?

И еще попытался поменять

$page_title = $_GET['page_title'];


на

$page_title = $_GET['page'];


А в строке браузера все равно obr.php?page_title=3

Почему не меняется в строке браузера, если $page_title присвоена page?

Или я просто не там прописал этот код?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




На счет
Цитата

А в строке браузера все равно obr.php?page_title=3

Почему не меняется в строке браузера, если $page_title присвоена page?

Или я просто не там прописал этот код?


Вкурил))) У меня на страничке с выводом в кнопке редактировать стоит вот так
$table .= "<td class='tb-d1'><a target='_blank' href='obr.php?page_title=".$result['id'].
"'
>Редактировать</a></td>\n";


PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




Присваиваешь ты правильно, только возникает вопрос .... а есть ли вообще данные ?
Эту проверку нужно сделать с помощью isset
http://php.net/manual/ru/function.isset.php
// Проверяем была ли отправлена форма
// Но лучше всего обработку данных вынести в отдельный файл, так как их обычно больше одной. (добавить/редактировать/удалить и т.д.)

if (isset($_POST['save'])) {
$id = $_POST['id'];
тут выполняем обновление или ещё что.
.....


// Если все хорошо, перенаправляем на нужную страницу
header('Location: http://тут адрес ');
// завершаем работу скрипта
die();
}

....

if (isset($_GET['page_title']))
$page_title = $_GET['page_title'];
else
$page_title = 0;
// ИЛИ использовать сокращенную запись
$page_title = (isset($_GET['page_title'])) ? $_GET['page_title'] : 0;


Номер записи лучше передавать вместе с формой, добавить скрытую кнопку
<input type="hidden" name="id" value="<?php echo $page_title;?>">


P.S. Реально купите бумажную книжку.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Kusss я в .htaccess прописал

php_flag register_globals off


В итоге редактированые данные не сохраняются в базе
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




Astin
А не задавал себе вопрос, почему ничего не сохраняется ?
Мы плавно перешли к больной теме каждого программиста :) Отладка.
Львиная часть которой, это вывод промежуточного результатов на экран, с остановкой скрипта (как правило).
$query = "UPDATE `mytable` .... ";
echo $query;
die();


Это сообщение отредактировал Kusss - 17.02.2016 - 01:29
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Цитата (Kusss @ 17.02.2016 - 01:28)
Astin
А не задавал себе вопрос, почему ничего не сохраняется ?
Мы плавно перешли к больной теме каждого программиста :) Отладка.
Львиная часть которой, это вывод промежуточного результатов на экран, с остановкой скрипта (как правило).
$query = "UPDATE `mytable` .... ";
echo $query;
die();

Опять прописал в .htaccess этот код вставил твой код
$query = "UPDATE `mytable` .... ";
echo $query;
die();


В итоге при редактировании ничего не записывает в базу и поле остается пустое в базе
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




при чем тут .htaccess ? blink.gif

это php код
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Цитата (Kusss @ 17.02.2016 - 11:07)
Цитата
при чем тут .htaccess ?  :blink:

это php код

Kuss я вот эту строку, которую ты дал

php_flag register_globals off

Прописал в хетачес

А ПХП поставил естественно отдельно и не в хетачес :)

Пробую редактировать инфу и она не редактируется в базе через ПХП обработчик.


Кстати, разбирался со своим обработчиком для редактирования записи, то есть то что я хотел сделать проверку отредактировалась запись или нет и плюс проверку поставил на заполнение поля, если поле пустое то ошибка.

Вот код обработчика

<?php
// Стартуем сессию
session_start();
// Подключаемся к базе
require_once ('db.php');

$name = $_POST['name_edit'];
$coun = $_POST['coun_edit'];


//Проверяем заполнение полей, поле не должно быть пустым
if(!empty($name) && !empty($coun)) {

//Выбираем таблицу для редактирования
$query = "UPDATE `mytable`

SET

`name` = '"
.mysql_real_escape_string($name)."',
`country` = '"
.mysql_real_escape_string($coun)."'

WHERE
`id` = '"
.$_SESSION['id']."'";

// Если не правильный запрос то ошибка
$sql = mysql_query($query) or die("Ошибка данных!");

header('Refresh: 2; http://xxxxxx/pr/in2.php');
echo "<b>Обновилось записей - </b> ",mysql_affected_rows();
die();
}
else{
header('Refresh: 2; http://xxxxxx/pr/in2.php');
echo "<b>Запогите все поля!</b>"; //Если записи закончились
die();
}
?>


Код вроде правильно написал. Что скажешь? Может что то не так

Буду рад любой критике, так как это подтолкнет еще к усердному изучению ПХП
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Astin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 27 дней
Карма: 7




Ой... коммент для кода неправильно написан :huh:

Цитата
header('Refresh: 2; http://xxxxxx/pr/in2.php');
  echo "<b>Запогите все поля!</b>"; //Если записи закончились
  die();


Вот так правильнее
header('Refresh: 2; http://wm.freeacces.ru/pr/in2.php');
echo "<b>Запогите все поля!</b>"; //Если поля не заполнены
die();

PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kusss  
[x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1357
Пользователь №: 28976
На форуме: 5 лет, 4 месяца, 10 дней
Карма: 77




В форме может быть несколько кнопок разного назначения, и какую из них нажали можно определить.
в твоём случае это name="save"

и прежде чем делать это, причем это НЕ обязательно
$name = $_POST['name_edit'];
$coun = $_POST['coun_edit'];

стоит проверить отправлена ли форма (я это уже писал, когда говорил про isset)
// отправлена ли форма
if (isset($_POST['save'])) {

// массив для ошибок
$error = array();

if (empty(trim($_POST['name_edit']))){
$error[] = 'Поле "Имя" не должно быть пустым';
}

if (empty(trim($_POST['coun_edit']))){
$error[] = 'Поле "Страна" не должно быть пустым';
}

// Если есть ошибки
if (count($error)) {
// или записать в сессию, или вывести прям сдесь. Сделаю 2 вариант
echo '<div style="color:red">'.implode('<br>', $error).'</div>';
die();
}

// Если все хорошо

//Выбираем таблицу для редактирования

$query = "
UPDATE
`mytable`
SET
`name` = '"
.mysql_real_escape_string(trim($_POST['name_edit']))."',
`country` = '"
.mysql_real_escape_string(trim($_POST['coun_edit']))."'
WHERE
`id` = '"
.$_SESSION['id']."'
"
;

$sql = mysql_query($query);


if ($sql) {
// Если все хорошо
echo 'Все хорошо';
header('Refresh: 2; http://xxxxxx/pr/in2.php');
} else {
echo '
<b>Ошибка !</b>
<br><br>'
.mysql_error().'
<br><br>Строка запроса: '
.$query.'
'
;
//header('Refresh: 2; http://xxxxxx/pr/in3.php');
}
die();
}
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (3) 1 [2] 3  Ответ в темуСоздание новой темыСоздание опроса