[sql] Вопросы по БД

Discussion in 'PHP' started by FraiDex, 25 Feb 2008.

Thread Status:
Not open for further replies.
  1. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    qw1mb1, в phpmyadmin у меня результат тоже идёт равный, оба значения одинаковые, до использования mysql я пробовал в файл txt всё записывать, но там были маленькие задержки, на одну единицу отставание было в самих текстовых файлах, а при выводе результат такой же получался не ровный для правой строки.

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

    в mysql всё записывается лучше, значения одинаковы в базе, но на выводе значений отображает то, чего нет в базе данных ...
     
  2. qw1mb1

    qw1mb1 Member

    Joined:
    8 Feb 2013
    Messages:
    113
    Likes Received:
    16
    Reputations:
    8
    GAiN, стукни в аську, что на аве - попробую помочь
     
  3. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    протестировали с 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'"
    $resultmysql_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
    --
    -- 
    Host127.0.0.1
    -- Generation TimeOct 112014 at 01:02 AM
    -- Server version5.5.36
    -- PHP Version5.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` (
      `
    idmediumint(9NOT NULL AUTO_INCREMENT,
      `
    urlchar(30COLLATE utf8_unicode_ci NOT NULL,
      `
    zna4eniesmallint(6NOT NULL,
      `
    iframeint(15NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=;

    --
    -- 
    Dumping data for table `paje`
    --

    INSERT INTO `paje` (`id`, `url`, `zna4enie`, `iframe`) VALUES
    (1'main'2020);

    /*!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 */;
     
  4. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Никакой мистики, сначала отрабатывает php, и только потом выводится страница в браузер, а значит апдейт в iframe.php произходит позже, чем вывод результата в proverka.php

    У тебя всегда будет отображаться новое значение `zna4enie`, и предыдущее значение `iframe`, потому и разные...
     
  5. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    я вставлял вместо iframe картинку, которая выполняла код, и то же самое было.

    и что старнно в базе данных оба значения равны, ведь если iframe.php отстаёт то и запись в бд отличаться должна ?
    я записываю туда секунды

    а так же прописывал в файле proverka.php sleep(2);
    пауза на 2 секунды, что бы дать возможность успеть загрузиться iframe.php, но это не поменяло результат отображения
     
  6. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Ещё раз. Пока не отработает пхп, браузер страницу не отобразит, соответственно ни айфрейм ни картинка не сработают раньше, чем выведется результат из базы. Со слипом тоже самое, он выполняется в пхп, и пока он выполняется в браузере не откроется страница, и айфрейм с картинкой не сработают. Последовательность у тебя такая сейчас:

    1) апдейтится zna4enie
    2) выводится $paje.'='.$paje2; // со старым значением iframe
    3) апдейтится iframe
    4) ты лезешь в пхпмайадмин и оху...ешь, почему там значения одинаковые, а на странице нет
     
  7. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Fepsis, теперь всё прояснилось...
    получается этот скрипт нереально заставить нормально работать, или всё же есть шансы ?
     
  8. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Есть такая штука flush() : http://php.net/manual/en/function.flush.php
    которая по сути может выдать браузеру страницу до завершения работы пхп скрипта. Но сработает она или нет, зависит от кучи факторов: веб сервера, его настроек, даже от браузера... Так что не рекомендую))

    Что вообще этот скрипт делать должен? Трудно представить где такое может пригодиться )
     
  9. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    функция дала сдвиг для iframe на 2 - 4 секунды вперёд, это для результата в базе данных

    он должен одавать результат для логирования, браузер открыл ли страницу или бот

    и далее уже проверять по правилу, если бот, то исключения для поисковых ботов по Reverse DNS, остальным ботам отдавать 403 страницу. если браузер, то проверок не производится.
    для фильтрации ботов с обычными юзерагентами, как у браузеров, нужен он
     
  10. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    чем же можно зашифровать данные поступающие в базу ?
    кроме пароля открытые остаются email - они же логины, телефоны, номера карт например
    и нужно что бы эти данные из базы могла расшифровать только функция в скрипте принимающая и обрабатывающая данные. данные хранятся в шифрованом виде
     
  11. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,413
    Likes Received:
    910
    Reputations:
    863
    Тут больше вопрос к PHP чем к БД. Пиши функции в php по крипту и декрипту, сначала данные криптуются потом заносятся в БД и наоборот, выносятся из БД, потом декриптуются и идут на отображение инфы или обработку дальше по сценарию...
     
    _________________________
  12. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    Возникла такая проблема.
    Мне понадобилось искать в столбце с url определенный url,но запросы типа
    SELECT * FROM `reports` WHERE url='http://u.rl/которыйточноестьвбазе'

    или

    SELECT * FROM `reports` WHERE url LIKE 'http://u.rl/которыйточноестьвбазе'

    отдают 0 строк. Почему так? Тип столбца - text
     
  13. yarbabin

    yarbabin HACKIN YO KUT

    Joined:
    21 Nov 2007
    Messages:
    1,663
    Likes Received:
    916
    Reputations:
    363
    такая проблема только url? по другим столбцам ищет?
     
    _________________________
  14. Darth Padla

    Darth Padla Member

    Joined:
    21 Jun 2010
    Messages:
    141
    Likes Received:
    25
    Reputations:
    8
    Да,все в порядке. Мистика какая-то.. Я в качестве временного решения просто выбираю все столбцы и ищу нужный url с помощью php,все работает как надо,но хотелось бы узнать как сделать все на sql. К тому же эта таблица когда нибудь может стать большой..

    UP:
    не знаю,поможет это или нет,но столбцы добавляются через ajax таким образом:
    PHP:
        var from=document.location.href;
            
    url='мойсайт/collector.php?action=add&from='+fromостальная data;
        
    и далее по тексту методом get
     
    #1994 Darth Padla, 9 Dec 2014
    Last edited: 9 Dec 2014
  15. kori256

    kori256 Member

    Joined:
    7 Feb 2009
    Messages:
    49
    Likes Received:
    33
    Reputations:
    6
    Если вот так сработает

    SELECT * FROM `reports` WHERE url RLIKE 'http://u.rl/которыйточноестьвбазе'

    тогда ищи пробелы. Если не сработает, возможно / заменено на \/
     
  16. aphextwin

    aphextwin New Member

    Joined:
    14 Jan 2014
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Мужики помогите!обидно аж до слез...что делать не знаю...винда китайская, уже везде где можно поменял на латиницу...саму базу данных менять на латиницу с**а не хочет, этот конченный скл...когда ставил англофикацию верхние иероглифы стали норм хешем, но потом при создании запроса опять китайская лабуда[​IMG]
    выдает мне фуфло! где подправить можно?
     
  17. Sifon110

    Sifon110 New Member

    Joined:
    13 Mar 2011
    Messages:
    34
    Likes Received:
    1
    Reputations:
    0
    Выбираю строки у которых в поле `text` есть запятая сл. образом:

    Code:
    SELECT * FROM `oncheck` WHERE `text` REGEXP ','
    Подскажите, как можно сделать подобный запрос, только чтобы в выборке были строки, у которых в поле `text` есть три запятые, а не одна.
     
  18. Lazy

    Lazy New Member

    Joined:
    19 Jul 2011
    Messages:
    94
    Likes Received:
    2
    Reputations:
    3
    У меня похожий вопрос . Чищу базу от ботов . Очень много почты вида [email protected] .
    Нужно выбрать записи где в тексте больше 3 точек . В oracle вроде бы есть regexp_count , а в mysql я пока не вижу как быть .
    Запрос типа
    SELECT email FROM `table` REGEXP '[.]{3}'
    выдает только запись с тремя подряд точками .
    Сложных запросов к подсчетом с заменой запятых и вычитанием из первоначальной длины строки , как советуют на некоторых сайтах , городить не хочется . Неужели нет нормального способа посчитать число символов ?
     
    #1998 Lazy, 2 Apr 2015
    Last edited: 2 Apr 2015
  19. mirlando

    mirlando New Member

    Joined:
    14 Jun 2013
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Господа, нужна помощь!
    На странице выводятся сообщения разных пользователей. Мне нужно чтобы для каждого пользователя выводилось только его последнее письмо - самое свежее. То есть допустим переписка шла с тремя пользователями и с каждым из них несколько сообщений. После выборки из бд должно быть только три письма - последние от каждого пользователя, ну и соответственно три пользователя, автора этих писем. Вот запрос;
    $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 тоже прорабатывал!
     
  20. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,413
    Likes Received:
    910
    Reputations:
    863
    раз выводит верно, но только на оборот, тогда попробуй DESC заменить на ASC
     
    _________________________
Thread Status:
Not open for further replies.