qw1mb1, в phpmyadmin у меня результат тоже идёт равный, оба значения одинаковые, до использования mysql я пробовал в файл txt всё записывать, но там были маленькие задержки, на одну единицу отставание было в самих текстовых файлах, а при выводе результат такой же получался не ровный для правой строки. вместо iframe пробовал подключать картинку, которая выполняла тот же код записи значения, но с ней результат не изменился. в mysql всё записывается лучше, значения одинаковы в базе, но на выводе значений отображает то, чего нет в базе данных ...
протестировали с qw1mb1 код, вообщем реально какая то мистика получается, не только у меня такой же результат выполнения получился ... исходные коды и sql дамп: main.php PHP: <?php header("Content-Type: text/html; charset=utf-8"); ?> <html> <head> </head> <iframe src="/iframe.php" width="0" height="0" frameborder="0" /></iframe> <?php $host="localhost"; $user="root"; $pass=""; $db_name="bitrix"; $link=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$link); $table = 'paje'; $paremetr_test1 = date("s"); $id = '1'; $url = 'main'; //Вставляем данные, подставляя их в запрос $sql="UPDATE $table SET zna4enie='$paremetr_test1' WHERE id=$id"; $query = mysql_query($sql); //Если вставка прошла успешно if ($query) { echo "<p>Данные успешно добавлены в таблицу.</p>"; } else { echo "<p>Произошла ошибка.</p>"; } ?> <?php require($_SERVER['DOCUMENT_ROOT'].'/proverka.php');//инклудим контролирующий файл ?> </html> iframe.php PHP: <?php $host="localhost"; $user="root"; $pass=""; $db_name="bitrix"; $link=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$link); $table = 'paje'; $paremetr_test1 = date("s"); $id = '1'; $url = 'main'; $sql="UPDATE $table SET iframe='$paremetr_test1' WHERE id=$id"; $query = mysql_query($sql); //Если вставка прошла успешно if ($query) { echo "<p>Данные успешно добавлены в таблицу.</p>"; } else { echo "<p>Произошла ошибка.</p>"; } ?> proverka.php PHP: <?php //sql $host="localhost"; $user="root"; $pass=""; $db_name="bitrix"; $link=mysql_connect($host,$user,$pass); mysql_select_db($db_name,$link); $table = 'paje'; $paremetr_test1 = date("s"); $id = '1'; $url = 'main'; //вывод $query = "SELECT `zna4enie`, `iframe` FROM $table WHERE `id`='$id'"; $result= mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($result)) { $paje=$row['zna4enie']; $paje2=$row['iframe']; } echo $paje.'='.$paje2; $a = $iframe_ini; $b = '2'; $c = $a+$b; //sleep(1); if ($a >= $b) { echo "browser"; } else { echo "bot"; } ?> sql: PHP: -- phpMyAdmin SQL Dump -- version 4.1.6 -- http://www.phpmyadmin.net -- -- Host: 127.0.0.1 -- Generation Time: Oct 11, 2014 at 01:02 AM -- Server version: 5.5.36 -- PHP Version: 5.4.25 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Database: `bitrix` -- -- -------------------------------------------------------- -- -- Table structure for table `paje` -- CREATE TABLE IF NOT EXISTS `paje` ( `id` mediumint(9) NOT NULL AUTO_INCREMENT, `url` char(30) COLLATE utf8_unicode_ci NOT NULL, `zna4enie` smallint(6) NOT NULL, `iframe` int(15) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ; -- -- Dumping data for table `paje` -- INSERT INTO `paje` (`id`, `url`, `zna4enie`, `iframe`) VALUES (1, 'main', 20, 20); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Никакой мистики, сначала отрабатывает php, и только потом выводится страница в браузер, а значит апдейт в iframe.php произходит позже, чем вывод результата в proverka.php У тебя всегда будет отображаться новое значение `zna4enie`, и предыдущее значение `iframe`, потому и разные...
я вставлял вместо iframe картинку, которая выполняла код, и то же самое было. и что старнно в базе данных оба значения равны, ведь если iframe.php отстаёт то и запись в бд отличаться должна ? я записываю туда секунды а так же прописывал в файле proverka.php sleep(2); пауза на 2 секунды, что бы дать возможность успеть загрузиться iframe.php, но это не поменяло результат отображения
Ещё раз. Пока не отработает пхп, браузер страницу не отобразит, соответственно ни айфрейм ни картинка не сработают раньше, чем выведется результат из базы. Со слипом тоже самое, он выполняется в пхп, и пока он выполняется в браузере не откроется страница, и айфрейм с картинкой не сработают. Последовательность у тебя такая сейчас: 1) апдейтится zna4enie 2) выводится $paje.'='.$paje2; // со старым значением iframe 3) апдейтится iframe 4) ты лезешь в пхпмайадмин и оху...ешь, почему там значения одинаковые, а на странице нет
Fepsis, теперь всё прояснилось... получается этот скрипт нереально заставить нормально работать, или всё же есть шансы ?
Есть такая штука flush() : http://php.net/manual/en/function.flush.php которая по сути может выдать браузеру страницу до завершения работы пхп скрипта. Но сработает она или нет, зависит от кучи факторов: веб сервера, его настроек, даже от браузера... Так что не рекомендую)) Что вообще этот скрипт делать должен? Трудно представить где такое может пригодиться )
функция дала сдвиг для iframe на 2 - 4 секунды вперёд, это для результата в базе данных он должен одавать результат для логирования, браузер открыл ли страницу или бот и далее уже проверять по правилу, если бот, то исключения для поисковых ботов по Reverse DNS, остальным ботам отдавать 403 страницу. если браузер, то проверок не производится. для фильтрации ботов с обычными юзерагентами, как у браузеров, нужен он
чем же можно зашифровать данные поступающие в базу ? кроме пароля открытые остаются email - они же логины, телефоны, номера карт например и нужно что бы эти данные из базы могла расшифровать только функция в скрипте принимающая и обрабатывающая данные. данные хранятся в шифрованом виде
Тут больше вопрос к PHP чем к БД. Пиши функции в php по крипту и декрипту, сначала данные криптуются потом заносятся в БД и наоборот, выносятся из БД, потом декриптуются и идут на отображение инфы или обработку дальше по сценарию...
Возникла такая проблема. Мне понадобилось искать в столбце с url определенный url,но запросы типа SELECT * FROM `reports` WHERE url='http://u.rl/которыйточноестьвбазе' или SELECT * FROM `reports` WHERE url LIKE 'http://u.rl/которыйточноестьвбазе' отдают 0 строк. Почему так? Тип столбца - text
Да,все в порядке. Мистика какая-то.. Я в качестве временного решения просто выбираю все столбцы и ищу нужный url с помощью php,все работает как надо,но хотелось бы узнать как сделать все на sql. К тому же эта таблица когда нибудь может стать большой.. UP: не знаю,поможет это или нет,но столбцы добавляются через ajax таким образом: PHP: var from=document.location.href; url='мойсайт/collector.php?action=add&from='+from+ остальная data; и далее по тексту методом get
Если вот так сработает SELECT * FROM `reports` WHERE url RLIKE 'http://u.rl/которыйточноестьвбазе' тогда ищи пробелы. Если не сработает, возможно / заменено на \/
Мужики помогите!обидно аж до слез...что делать не знаю...винда китайская, уже везде где можно поменял на латиницу...саму базу данных менять на латиницу с**а не хочет, этот конченный скл...когда ставил англофикацию верхние иероглифы стали норм хешем, но потом при создании запроса опять китайская лабуда выдает мне фуфло! где подправить можно?
Выбираю строки у которых в поле `text` есть запятая сл. образом: Code: SELECT * FROM `oncheck` WHERE `text` REGEXP ',' Подскажите, как можно сделать подобный запрос, только чтобы в выборке были строки, у которых в поле `text` есть три запятые, а не одна.
У меня похожий вопрос . Чищу базу от ботов . Очень много почты вида [email protected] . Нужно выбрать записи где в тексте больше 3 точек . В oracle вроде бы есть regexp_count , а в mysql я пока не вижу как быть . Запрос типа SELECT email FROM `table` REGEXP '[.]{3}' выдает только запись с тремя подряд точками . Сложных запросов к подсчетом с заменой запятых и вычитанием из первоначальной длины строки , как советуют на некоторых сайтах , городить не хочется . Неужели нет нормального способа посчитать число символов ?
Господа, нужна помощь! На странице выводятся сообщения разных пользователей. Мне нужно чтобы для каждого пользователя выводилось только его последнее письмо - самое свежее. То есть допустим переписка шла с тремя пользователями и с каждым из них несколько сообщений. После выборки из бд должно быть только три письма - последние от каждого пользователя, ну и соответственно три пользователя, автора этих писем. Вот запрос; $id = abs((int)$id); $query = "SELECT id_mess, id_us_send, text, dat, us_first_name, us_last_name, us_ava_path FROM messages LEFT JOIN users ON messages.id_us_send = users.id_user WHERE id_us_get = '$id' GROUP BY messages.id_us_send DESC "; много что подбирал.. Вариант на экране (и с использованием ORDER BY messages.dat DESC) выводит почти то, что нужно, только в выборке самые первые сообщения, а не последние, но число пользователей с сообщениями выдает верно. Подскажите ответ, варианты с DISTICT тоже прорабатывал!