Здравствуйте , у меня такая ситуация : надо подключить веб службы к сайту ( прогноз погоды, курс валют и т. д. ) . Технически я приблизительно знаю как сделать это - функция кот. проверяет на необходимость обновления, если "не надо" - загружает актуальные данные из БД , если "надо" - загружает xml файл с данными с нужного сайта, "разбирает" его simpleXML и сохраняет данные в БД и загружает эту инфу на сайт.
Проблема в том , что не знаю как правильнее/удобнее это сделать .
1. поместить эту функцию в "общий" сценарий , но тогда время загрузки сценария увеличиться . И еще проблема , а что будет если несколько пользователей одновременно попытаются войти на сайт .
2. создать какой то отдельный сценарий и заставить его обновлять , что бы во время открытия сайта страница долго не открывалась (ведь на обновление xml файла уйдет какое то время) , но тогда проблема как сделать так чтобы этот сценарий автоматический вызывался каждый раз в определённое время.
Примерно вот такие варианты есть , не знаю на сколько это правильно. И нигде не нашёл описание как это делается . Может кто подскажет , буду очень благодарен .
У меня такой вопрос , когда используешь функцию SUBSTRING( string, 0 ,15) , например, в MySQL , она тоже символы возвращает или байты ?
Потому что у меня указана кодировка UTF8 в MySQL и когда PHP выводит их , то в конце текста иногда появляется какой то иероглиф или не понятный символ.
1. Давно как то были траблы с SUBSTRING на разных серверах работало по разному.
2. попробуйте LEFT
Спасибо , ЛЕФТ вроде нормально работает .
Но проблема в том , что MySQL вместо строк , например :
row['id'] , row['tema'] , row['text'] ,
возвращает :
row['id'] , row['tema'] , row[' LEFT(text, 350) '] .
Если использую SUBSTRING , то соответственно возвращает его .
Я как понял , это ,наверное, так и должно быть , но почему в учебниках или даже в документациях ничего не написано что надо использовать и псевдонимы ? Но это уже не к вам
$query = 'SELECT id, tema , SUBSTRING(text,0,350) FROM database123'
Поля text выводятся пустыми.
Через MySQL-monitor(командной строке) тоже не работает , только если 0 изменить на 1 (SELECT id, tema , SUBSTRING(text,1,350) FROM database123),тогда выводит, но только когда в командной строке.
Где на сайте прочитал что эта функция применима только к столбцам у которых тип char . Но это кажется относилось только SQL классическому синтаксису. Интересно к MySQL это тоже относиться ?, ведь известно что в MySQL не такой строгий синтаксис как в классическом SQL. Если это так то не подскажите , пожалуйста, функцию на подобие SUBSTRING , что бы работала с столбцами у которых тип text ?
если сейчас загрузился вопрос № 3 , то адрес этой страницы будет тогда to_db.php?id=3 и в форме должен быть указан адрес уже след вопоса to_db.php?id=4 , т.е. ответ будет посылаться по адресу tto_db.php?id='.$_GET['id']+1 .
А через POST так должно быть:
echo '<input type="hidden" neme="id" value="'.$_POST['id']+1.'">'; // тут id номер след. вопроса.
Соответственно, сценарии который будет загружаться в первую очередь должен проверить ответ на предыдущий вопрос ( он будет в $_POST['id'] и $_POST['gr'] и за ответами он должен обратиться к БД с ответами ) и если всё ОК , тогда он подключается к БД за следующим вопросом и выводит его в виде формы.
Neirol пишет:
При заходе на страницу теста, создавалась бы сессия, которая содержала в себе счетчик
да конечно , с сессиями безопаснее ( например, у тестируемого не будет желания "пошалить" - перескочить на несколько вопросов вперёд) , но думаю если проверять посылаемые $_POST-данные(или же $_GET-данные) то навредить особо и не получиться , максимум что сценарий не сможет проследить это ответил ли тестируемый на предыдущий вопрос , хотя и это можно как то исправить. В любом случае , это уже вопрос безопасности , а тут как я понял главное принцип по которому должен работать тест.
Только сейчас понял в чём проблема . Stierus , могли бы и объяснить по понятнее, это сейчас я понял что вы имели ввиду !
Но с другой стороны , хорошо что я сам понял в чём была ошибка . (Добавление)
аж приятно стало
как я понял , сам запрос не очень то сложный, там надо работать в основном в PHP . примерно уже представил как он должен выглядеть - 2 сценария : один выводит форму(опрос или тест, не знаю что у тебя в данном случае) , а другой обробатывает рез-тат и переходит редиректом на первый сценарий .
$query = 'SELECT Q-id, question FROM questions WHERE Q-id=$id';
Но так трудно тебе чем то помочь , когда ничего нет . Ты хоть набросок предоставь и объясни что не получается , а то весь сценарий вместо тебя составлять как то ...
как я решил эту проблему:
1. Убрал "лишние" not null (хотя не в этом была ошибка)
2.Проверил синтаксис , типа типу blob нельзя указывать кол-во символов (blob(350)) и всё такое
3.(САМОЕ ГЛАВНОЕ) для всех я использовал кодировку UTF8 . Для многоязычного сайта идеальное решение, не смотря на то , что для не стандартных кодировок (как греческая или вьетнамская ) выделяется уже от 2-х до 4-х байтов на символ .
И выглядит сейчас примерно так :
обязательно прочитай эту очень хорошую статью о ООП в php http://www.php.su/learnphp/phpoo/
именно "обязательно" потому что в классах есть такие нюансы которые интуитивно не понятны (можешь ждать одно а получается другое).
В ООП я разбираюсь не отлично , но хорошо. В том числе я изучал это и из данного сайта тоже . Повторюсь , до сих пор с ООП таких проблем не было , которые я сам не смог бы решить . У меня таким принципом написано несколько сценариев ,правда сценарии не самые крутые , но работают.
Viraban009 пишет:
тогда давай полностью код от объяления классов и самих классов с этими методами (функциями).
Выше этого обращения только проверки и редактирование вводимых данных, типа :
if(isset($_POST['name']) . . . ) . . . trim($_POST['name']) и всё такое.
JustUserR пишет:
$this->db_link=mysqli_connent(Параметры); - Это конструктор
$this->db_res=mysqli_query(SQL-запрос, $this->db_link);
Я обращаюсь к БД из сценария и не использую классы чтобы из них подключаться к БД и соххранять результат в своиствах типа $this->db_res и т.д. То есть , я подключаюсь к БД прямо из "основного" кода.
JustUserR пишет:
кто вам сказал что ресурс $result это экземпляр класса который поддержиавает свойство free() - и все равно класса mysqli я не вижу
Я уже начинаю сомневаться в "простых истинах" .
класс mysqli разве не "встроенный класс", типа автоматически подключается к сценариям так же как и такие классы как : Exception, ReflectionClass и т.д. ?
И как я помню , оператор(не знаю как правильнее называется) - $db->query('insert . . . ' ) возвращает что то вроде объекта , в котором содержаться своиства с результатами выполненого запроса и методами которые позволяют их "использовать"(извлекать- fetch_assoc(), num_rows и т.д.) и всё это надо к чемуто присвоить , типа :
$result = $db->query('insert . . . ' );
После того как он ненужен , его "самоликвидуруют" спомощью внутреннего метода free() : "$result->free();" --- типа , удаляют возвращенный объект(из БД) - очистить память.
Если я не правильно задаю вопрос , то - извините , буду внимательнее.
Если я что то не так выучил - скажите и я начну заново изучать ООП (честно сказать так не хочется ).
Да , кстати, не думаю что бы чем то координально отличались способы обращения к БД - объектный или с использованием функций.
Viraban009
Спасибо за сылку. В том то и дело что проблему я понял , дело в том что я понятия не имею что нужно изменить/подправить в сценарии что бы исправить ошибку , потому что у меня там почти так же как и в той же сылке .
Вообщем , всё вроде по правилам и поэтому я не знаю где искать ошибку: