PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 21
новый ученик Отправлено: 20 Июня, 2018 - 07:04:52 • Тема: Вопрос по триггерам • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 38
Мелкий пишет:
В mysql вы не можете из триггера менять ту таблицу, на которой повешен этот триггер.

Значение обновляемой строки вы можете менять изменяя сам NEW перед вставкой.
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TRIGGER tg_city_insert BEFORE INSERT ON city
  2.  FOR EACH ROW BEGIN
  3.  IF NEW.countrycode = '' THEN
  4.    -- Изменим код на RUS
  5.    SET new.countrycode = 'RUS';
  6.  END IF;
  7.  END;


Спасибо большое! Этого Тарасов в курсе как раз и не объясняет....
новый ученик Отправлено: 19 Июня, 2018 - 19:27:10 • Тема: Вопрос по триггерам • Форум: SQL и Архитектура БД

Ответов: 2
Просмотров: 38
Здравствуйте. При обучении MySQL по курсу [Специалист] MySQL-5.1 2013 Столкнулся с заданием создать триггер на INSERT с условием. При вставке города с несуществующим countrycode, менять новый код на RUS. Триггеру меня создаётся, но при вставке города происходит ошибка ERROR 1442 (HY000): Can't update table 'city' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Не удается обновить таблицу "город" в хранимой функции / триггера, поскольку он уже используется оператором, который вызвал эту сохраненную функцию / триггер. База используется world демонстрационная MySQL. Ниже код запроса на создание триггера. Подскажите пожалуйста если я что-то неправильно понял. За ранее спасибо!
DELIMITER |
-- 3. При вставке города с несуществующим countrycode, менять новый код на RUS
DROP TRIGGER IF EXISTS tg_city_insert |
CREATE TRIGGER tg_city_insert AFTER INSERT ON city
FOR EACH ROW BEGIN
IF NEW.countrycode = '' THEN
-- Изменим код на RUS
UPDATE city
SET
countrycode = 'RUS'
WHERE NEW.countrycode = '';
END IF;
END;
|
DELIMITER ;
новый ученик Отправлено: 15 Июня, 2017 - 13:52:57 • Тема: Как вывести номер строки при зачитывании файла массив через fail() • Форум: Вопросы новичков

Ответов: 2
Просмотров: 268
новый ученик пишет:
Спасибо что никто не ответил! Я сам нашёл ответ, который оказался элементарным. В скрипте вывода нужно инкрементировать ключ вот так и всё заработало.
session_start();
if( is_file($_SESSION['loget']) ){
//echo "Файл существует";
$log = file($_SESSION['loget']);
foreach($log as $key =>$lines){
echo ++$key." . $lines <br />";
}
}

Работа над ошибками. Так будет правильно. А сессия здесь вообще не нужна.
Здесь пишем файл.
$dt = time();// Время записи
$page = $_SERVER['REQUEST_URI']; // Куда переходим
$ref = $_SERVER['HTTP_REFERER']; // Откуда переходим
$path = "$dt|$page|$ref"; // Формируем строку для записи в файл
file_put_contents("log/".PATH_LOG, "$path\n", FILE_APPEND); // Делаем запись в файл

А здесь выводим записи файла.
//Проверяем наличие файла
if(is_file("log/".PATH_LOG) ){
// Зачитываем файл в массив
$file = file("log/".PATH_LOG);
echo "<ol>";
foreach($file as $line){
//Присваиваем запись в переменные по разделителю
list($dt, $page, $ref) = explode("|", $line);
// Трансформируем метку времени
$dt = date("d-m-Y H:i:s", $dt);
// Выводим записи файла
echo <<<OUT
<li>
[$dt]: $ref -> $page
</li>
OUT;
}
echo "</ol>";
}
новый ученик Отправлено: 22 Мая, 2017 - 19:17:51 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, у вас не правильно. Попробуйте так
Спойлер (Отобразить)

Спасибо!!!! Вот теперь всё действительно работает. Сам я до этого не скоро бы додумался... Я правильно понял что mysqli_real_escape_string только по одной переменной может экранировать? Борисов ничего об этом не говорит в уроке. Когда буду полностью уверен что все косяки нашёл и убрал залью сюда весь код страницы.
новый ученик Отправлено: 22 Мая, 2017 - 17:54:58 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик пишет:
Строитель пишет:
новый ученик пишет:
Почему когда я нажимаю вам Спасибо! Мне говорят что у меня не достаточно записей чтоб осуществить эту операцию?
Потому что эта возможность станет доступна после публикации вами 50-и постов ))

Понял. Всё равно Огромное Спасибо за Помощь!!!! Следующая тема не за горами. Я пока не понимаю как в этой гостевой сделать удаление записи.... Буду завтра голову ломать. А если не додумаюсь снова буду Умных Знающих людей спрашивать...
Да не за что Закатив глазки На счёт удаления - опишу принцип, а реализацию уже будете допиливать самостоятельно:

1. Выбираете из базы id-данных, которые подлежат удалению
2. Подставляете в цикле эти id'шники в html-тег ссылки, например так:

<a href="delet.php?delet='. $row['id'] .'">'. $row['name'] .'</a>

3. В файле delet.php (или в одном из ваших файлов) проверяете наличие $_GET['delet'] и если она не пуста, то передаёте эти id'шники в sql-запрос на удаление записей

Простите Уважаемый, что снова к вам! Поторопился заявлять что всё работает... Сам нашёл несколько ошибок в работе. Например не заэкранировал строку запроса на дабавление новой записи. С которой возникла проблема. После экранирование строки запись перестала добавляться. Никакой ошибки не выдаёт просто запись не добавляет. Я так понимаю что эта функция с чем-то ссорится а с чем не пойму. Если экранирование убрать то всё вполне работает.
/* Сохранение записи в БД */
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {//Проверяем отправлена ли форма
$name = trim(strip_tags($_POST['name']));// Принимаем и фильтруем данные
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));

$sql = mysqli_real_escape_string($link,"INSERT INTO msgs ( name, email, msg) VALUES ('$name', '$email', '$msg')");//Запрос на добавление новой записи
$res = mysqli_query($link, $sql);// Отправляем запрос на добавление новой записи
if( !$res)//В случае ошибки выводим сообщение о ней в браузер
echo mysqli_error($link);
}
header("Location: index.php?id=gbook");//посылаем заголовок на перезапрос страницы методом GET
exit;
}
/* Сохранение записи в БД */
новый ученик Отправлено: 22 Мая, 2017 - 11:15:03 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик пишет:
Строитель пишет:
новый ученик пишет:
Почему когда я нажимаю вам Спасибо! Мне говорят что у меня не достаточно записей чтоб осуществить эту операцию?
Потому что эта возможность станет доступна после публикации вами 50-и постов ))

Понял. Всё равно Огромное Спасибо за Помощь!!!! Следующая тема не за горами. Я пока не понимаю как в этой гостевой сделать удаление записи.... Буду завтра голову ломать. А если не додумаюсь снова буду Умных Знающих людей спрашивать...
Да не за что Закатив глазки На счёт удаления - опишу принцип, а реализацию уже будете допиливать самостоятельно:

1. Выбираете из базы id-данных, которые подлежат удалению
2. Подставляете в цикле эти id'шники в html-тег ссылки, например так:

<a href="delet.php?delet='. $row['id'] .'">'. $row['name'] .'</a>

3. В файле delet.php (или в одном из ваших файлов) проверяете наличие $_GET['delet'] и если она не пуста, то передаёте эти id'шники в sql-запрос на удаление записей

Огромное Спасибо за подсказки. Я сделал чуть иначе. Так как было по условиям задания лабораторной работы без дополнительных файлов. Борисов сам сформировал ссылку на удаление записи. Ещё раз Спасибо за помощь! Теперь я знаю где и как правильно включить буферизацию.
новый ученик Отправлено: 22 Мая, 2017 - 00:07:50 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик пишет:
Почему когда я нажимаю вам Спасибо! Мне говорят что у меня не достаточно записей чтоб осуществить эту операцию?
Потому что эта возможность станет доступна после публикации вами 50-и постов ))

Понял. Всё равно Огромное Спасибо за Помощь!!!! Следующая тема не за горами. Я пока не понимаю как в этой гостевой сделать удаление записи.... Буду завтра голову ломать. А если не додумаюсь снова буду Умных Знающих людей спрашивать...
новый ученик Отправлено: 21 Мая, 2017 - 23:59:06 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик пишет:
как сделать чтоб после отправки формы страница оставалась гостевой
Вероятно прописать в строке header("Location: " . $_SERVER["PHP_SELF"]); вместо $_SERVER["PHP_SELF"] имя директории и файла с кодом гостевой. Вроде бы так: inc/routing.inc.php

А всё вместе, если адрес верен, будет иметь такой вид:

Спасибо!!!! Написал вот так header("Location: index.php?id=gbook"); exit; и всё заработало. Теперь последний вопрос немножко не по теме. Почему когда я нажимаю вам Спасибо! Мне говорят что у меня не достаточно записей чтоб осуществить эту операцию??? Очень хочется Правильно поблагодарить за помощь!
новый ученик Отправлено: 21 Мая, 2017 - 23:40:39 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
Так как у вас там подключается не один файл в индексе, то все я просматривать не имею желания. Поэтому попробуйте использовать этот вариант для индекса
Спойлер (Отобразить)

Спасибо!!!! Запись добавляется. Только после отправки снова переход на index.php. А как сделать чтоб после отправки формы страница оставалась гостевой а не index.php?
новый ученик Отправлено: 21 Мая, 2017 - 23:31:31 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, что-то я не вижу в вашем индексе подключения файла gbook.inc.php

Он вот здесь require_once 'inc/routing.inc.php'; а это его код
<?php
switch($id){
case 'contact': include 'inc/contact.inc.php'; break;
case 'about': include 'inc/about.inc.php'; break;
case 'info': include 'inc/info.inc.php'; break;
case 'log': include 'inc/view-log.inc.php'; break;
case 'gbook': include 'inc/gbook.inc.php'; break;
default: include 'inc/index.inc.php';
}
новый ученик Отправлено: 21 Мая, 2017 - 23:26:12 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, код индекса сюда опубликуйте, плиз.

Это index.php
<?
require_once 'inc/cookie.inc.php';
require_once 'inc/headers.inc.php';
// Имя файла журнала
//define('PATH_LOG', 'path.log');
const PATH_LOG = "path.log" ;
require_once 'inc/log.inc.php';
?>
<!DOCTYPE html>
<html>
<head>
<title><?= $title?></title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="inc/style.css" />
</head>
<body>

<div id="header">
<!-- Верхняя часть страницы -->
<img src="logo.gif" width="187" height="29" alt="Наш логотип" class="logo" />
<span class="slogan">обо всём сразу</span>
<!-- Верхняя часть страницы -->
</div>

<div id="content">
<!-- Заголовок -->
<h1><?= $header?></h1>
<blockquote>
<?php
if(1 === $visitCounter){
echo "Спасибо, что зашли на огонек";
}else{echo "Вы зашли к нам $visitCounter-й раз.<br /> Последнее посещение: $lastVisit";}
?>

</blockquote>
<!-- Заголовок -->
<!-- Область основного контента -->
<?php
require_once 'inc/routing.inc.php';
?>
<!-- Область основного контента -->
</div>
<div id="nav">
<!-- Навигация -->
<h2>Навигация по сайту</h2>
<ul>
<li><a href='index.php'>Домой</a></li>
<li><a href='index.php?id=contact'>Контакты</a></li>
<li><a href='index.php?id=about'>О нас</a></li>
<li><a href='index.php?id=info'>Информация</a></li>
<li><a href='test/index.php'>Он-лайн тест</a></li>
<li><a href='index.php?id=gbook'>Гостевая книга</a></li>
<li><a href='eshop/catalog.php'>Магазин</a></li>
<li><a href='index.php?id=log'>Журнал посещений</a></li>
</ul>
<!-- Навигация -->
</div>
<div id="footer">
<!-- Нижняя часть страницы -->
&copy; Супер-мега сайт, 2000 &ndash; <?= date('Y')?>
<!-- Нижняя часть страницы -->
</div>
</body>
</html>
новый ученик Отправлено: 21 Мая, 2017 - 23:19:51 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, по тексту ошибки становится понятно, что у вас вывод начат в файле index.php, а файл gbook.inc.php подключен к index.php ниже этого вывода. Верно?

Да. Так и есть. В этом-то и засада что gbook.inc.php подключен к index.php. Если бы это была самостоятельная страница вопроса бы не возникло.
новый ученик Отправлено: 21 Мая, 2017 - 23:06:21 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
Попробуйте сейчас отправить данные из вашей формы, а результат скопируйте сюда
Спойлер (Отобразить)

Я немного по другому сделал. Полностью пересоздал эту страницу с прежним кодом. Раскоментировал заголовок. Теперь снова пишет ошибку что заголовки отправлены Warning: Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\mysite.local\index.php:12) in C:\OpenServer\domains\mysite.local\inc\gbook.inc.php on line 28.
Вот код страницы.
<?php
/* Основные настройки */
const DB_HOST = 'localhost';
const DB_LOGIN = 'root';
const DB_PASSWORD = '';
const DB_NAME = 'gbook';
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);

/* Основные настройки */

/* Сохранение записи в БД */
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {
$name = trim(strip_tags($_POST['name']));
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));

$sql = "
INSERT INTO msgs (
name, email, msg
) VALUES ('$name', '$email', '$msg')
";
mysqli_query($link, $sql);
/*if( !$result)
echo mysqli_error($link);
*/
}
header("Location: " . $_SERVER["PHP_SELF"]);
exit;
}

/* Сохранение записи в БД */

/* Удаление записи из БД */

/* Удаление записи из БД */
?>
<h3>Оставьте запись в нашей Гостевой книге</h3>

<form method="post" action="<?= $_SERVER['REQUEST_URI']?>">
Имя: <br /><input type="text" name="name" /><br />
Email: <br /><input type="text" name="email" /><br />
Сообщение: <br /><textarea name="msg"></textarea><br />

<br />

<input type="submit" value="Отправить!" />

</form>
<?php
/* Вывод записей из БД */
$output = "SELECT id, name, email, msg, UNIX_TIMESTAMP(datetime) as dt FROM msgs ORDER BY id DESC";
$result = mysqli_query($link, $output);
mysqli_close($link);
$row_count = mysqli_num_rows($result);
echo "<p>";
echo "Всего записей в гостевой книге:$row_count";
echo "</p>";

while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo "<a href='mailto:{$row["name"]}'>{$row['name']}</a>";
echo " " . date("d.m.Y в H:i:s", $row["dt"]) . " написал";
echo "<br />";
echo "{$row["msg"]}";
echo "</p>";
echo "<p align='right'>";
echo "<a href='http://mysite.local/index.php?id=gbook&del={$row[id]}'>Удалить</a>";
echo "</p>";
}

/* Вывод записей из БД */
?>
новый ученик Отправлено: 21 Мая, 2017 - 22:39:42 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, напишите пожалуйста, ещё раз ваш код, но с учётом текущих изменений.

Вот код всей страницы. Отправка заголовка закоментирована. Но результат при отправке формы тот же. Переход на index.php к которому подключается страница а новая запись не вносится в базу данных.
<?php
/* Основные настройки */
const DB_HOST = 'localhost';
const DB_LOGIN = 'root';
const DB_PASSWORD = '';
const DB_NAME = 'gbook';
$link = mysqli_connect(DB_HOST, DB_LOGIN, DB_PASSWORD, DB_NAME);
/* Основные настройки */

/* Сохранение записи в БД */

if($_SERVER['REQUEST_METHOD'] == 'POST'){
if (isset($_POST['name'], $_POST['email'], $_POST['msg'])) {
$name = trim(strip_tags($_POST['name']));
$email = trim(strip_tags($_POST['email']));
$msg = trim(strip_tags($_POST['msg']));

$sql = "
INSERT INTO msgs (
name, email, msg
) VALUES ('$name', '$email', '$msg')
";
mysqli_query($link, $sql);
/*if( !$result)
echo mysqli_error($link);
*/
}
/*header("Location: " . $_SERVER["PHP_SELF"]);
exit;*/
}

/* Сохранение записи в БД */

/* Удаление записи из БД */
if(isset($_GET['id'])){
$del = $_GET['id'];
$delid = "DELETE FROM msgs WHERE id = $del";
mysqli_query($link, $delid);
}


/* Удаление записи из БД */
?>
<h3>Оставьте запись в нашей Гостевой книге</h3>

<form method="post" action="<?= $_SERVER["PHP_SELF"]?>">
Имя: <br /><input type="text" name="name" /><br />
Email: <br /><input type="text" name="email" /><br />
Сообщение: <br /><textarea name="msg"></textarea><br />

<br />

<input type="submit" value="Отправить!" />

</form>
<?php
/* Вывод записей из БД */
$output = "SELECT id, name, email, msg, UNIX_TIMESTAMP(datetime) as dt FROM msgs ORDER BY id DESC";
$result = mysqli_query($link, $output);
mysqli_close($link);
$row_count = mysqli_num_rows($result);
echo "<p>";
echo "Всего записей в гостевой книге:$row_count";
echo "</p>";

while($row = mysqli_fetch_assoc($result)){
echo "<p>";
echo "<a href='mailto:{$row["name"]}'>{$row['name']}</a>";
echo " " . date("d.m.Y в H:i:s", $row["dt"]) . " написал";
echo "<br />";
echo "{$row["msg"]}";
echo "</p>";
echo "<p align='right'>";
echo "<a href='http://mysite.local/index.php?id=gbook&del={$row[id]}'>Удалить</a>";
echo "</p>";
}
/* Вывод записей из БД */
?>
новый ученик Отправлено: 21 Мая, 2017 - 22:32:41 • Тема: Помогите пожалуйста с перезапросом страницы методом GET • Форум: Вопросы новичков

Ответов: 30
Просмотров: 941
Строитель пишет:
новый ученик, пост выше вашего видели? Пробовали?

Да видел попробовал. С тем же результатом. После отправки новой записи переход на index.php и новой записи нет. Попробовал совсем удалить отправку заголовка. Результат тоже. После отправки новой записи переход на index.php и новой записи нет. Но ведь отправку заголовка я удалил.... Почему страница на index.php переходит???? Что-то у меня мозг вскипать начинает...

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB