|
|
|
| Всем привет, мне нужно выбрать с бд случайное значение определённого поля, пытался так:
<?php
$query1 = "SELECT * FROM vika WHERE num=rand(1,4700)";
$result1=mysql_query($query1);
$n1=mysql_fetch_array($result1);
print $n1[vopros]; // тут вывожу то, что надо из поля, относящемуся к строке случайного поля
?>
|
не получается почему-то.
мне нужно выбрать случайное значение именно поля num, а потом вывести текст из поля, относящемуся к строке случайного поля...
как мне выбрать случайное значение поля num?
заранее спасибо! | |
|
|
|
|
|
|
|
для: DOKERATOR
(04.08.2012 в 02:03)
| | Для этого традиционно используется конструкция ORDER BY RAND()
SELECT
*
FROM
vika
ORDER BY RAND()
LIMIT 1
|
| |
|
|
|
|
|
|
|
для: cheops
(04.08.2012 в 06:03)
| | это при правильной организации бд, ну и небольшой по объему таблице
а вот слова "мне нужно выбрать случайное значение именно поля num" начинают терзать мутными сомненьями | |
|
|
|
|
|
|
|
для: Valick
(04.08.2012 в 09:39)
| | сделал так
SELECT * FROM vika WHERE num ORDER BY RAND() LIMIT 1
| , но теперь с обработчиком геморой... | |
|
|
|
|
|
|
|
для: cheops
(04.08.2012 в 06:03)
| | про это я знаю, но тогда будет выбираться вообще случайное значение строки, а мне нужно случайное значение определённого поля, например num
таблица состоит так:
num|otv|otv1|otv2|otv3|otv4|vopros|
num тут это номер вопроса, вот мне и нужно выбрать рандомно вопрос, а потом мне в обработчике надо ещё обращаться к строке для сверки ответов и т.д. | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 11:39)
| | ну вот об этом я и говорил...
у вас мухи с котлетами вперемешку
у вас и вопросы и ответы в одной таблице, а этого не должно быть
но в любом случае, у вас любая строка содержит вопрос, в чем проблема с предыдущим запросом?
выбрали строку случайно, запомнили num | |
|
|
|
|
|
|
|
для: Valick
(04.08.2012 в 11:50)
| | а как ещё?
например, реализовано так в таблице:
num|otvet|otvet1 |otvet2 |otvet3 |otvet4 |vopros |
1 |3 |кость |мясо |труба |ну и тут что-нибудь |а тут вопрос|
вот обработчик
<?php
$query1 = "SELECT * FROM vika WHERE num ORDER BY RAND() LIMIT 1"; //делаю случайную выборку
$result1=mysql_query($query1);
$n1=mysql_fetch_array($result1);//заношу в массив поля строки
$vopr="Внимание, вопрос: <br> $n1[vopros]<br> Варианты ответа:<br> 1) $n1[otvet1]<br> 2) $n1[otvet2]<br> 3) $n1[otvet3]<br> 4) $n1[otvet4]<br> Введите цифру ответа!"; //заношу в переменную вопрос
print "$vopr"; //вывожу вопрос
if (!empty($_POST['submit'])){ //если кнопка нажата, то выполняем следующее
if($sms=="$n1[otvet]") // если ответ юзера= ответу с таблицы, то
print "Молодчина, правильно=) Сейчас придумаем следующий вопросик!".
sleep(2).
print "$vopr"; // выводим первое сообщение ,замираем скрипт на 2 секунды и выводим следующий вопрос
else
print "Ответ невенрый!".
print "$vopr";// иначе выводим сообщение мол типа неверно и выводим новый вопрос с бд
}
?>
|
| |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 12:02)
| | а, всё, спасибо, разобрался, переделал чуть обработчик, он работал правильно, но не совсем, сделал так:
<?php
if (!empty($_POST['submit'])){
if($sms=="$n1[otvet]")
print "<p class='b'><b>Молодчина, правильно=)</b></p><br>";
else
print "<p class='b'><b>Ответ невенрый!</b></p><br>";
}
$vopr="<p class='b'>Внимание, вопрос: <br> $n1[vopros]<br> Варианты ответа:<br> 1) $n1[otvet1]<br> 2) $n1[otvet2]<br> 3) $n1[otvet3]<br> 4) $n1[otvet4]<br> Введите цифру ответа!</p>";
print "$vopr";
?>
|
| |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 12:24)
| | ещё вопрос: а как сделать, чтобы, например, команда print""; выполнялась через минуту? без использования sleep(60). надо, чтобы скрипт выполнялся, а когда пройдёт минута, то выполнить команду ptint ""; | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 13:05)
| | никак, да и ненужно это
просто нужно фиксировать на сервере время вывода вопроса в браузер, и считать любой ответ неверным, если прошло более минуты | |
|
|
|
|
|
|
|
для: Valick
(04.08.2012 в 13:09)
| | а не подскажите как фиксировать время? мне нужно если ответили на вопрос (правильно), то вывести другой вопрос через минуту. а у меня, если обновить страницу, выводится новый и новый вопрос...
также, не подскажите как сделать чтобы обработчик принимал значения с формы ТОЛЬКО числа, т.е. только 1,2,3,4. а другие посты не трогал, а то если например написать в чат "всем привет", то обработчик считает это за ответ и начинает выводить мол "ответ неверный".
заранее огромное спасибо за помощь!!! :) | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 13:15)
| | у вас там не только "мухи с котлетами", но еще и "тараканы" :)
вы хотите написать универсальный скрипт всего-всего на свете?
фиксировать время, как и все остальные параметры относящиеся к пользователю, лучше всего в сессионной переменной
но у вас тут все смешалось "и кони и люди", поэтому ответ на вопрос
"как сделать чтобы обработчик принимал значения с формы ТОЛЬКО числа"
вам ничего не даст
ошибки у вас не в реализации, а в самой логике | |
|
|
|
|
|
|
|
для: Valick
(04.08.2012 в 13:30)
| | понятно... | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 13:51)
| | опишите словами как можно более подробно что вы хотите сделать | |
|
|
|
|
|
|
|
для: Valick
(04.08.2012 в 13:57)
| | подробно? мне нужно сделать что-то типо викторины. в базе есть порядка 5000 вопросов везде по 4 варианта ответа, естественно правильный только один из них. вывести как их я знаю, сверить ответы- тоже. вот нужно сделать. если в поле <input type="text" name="sms" size="20" maxlength="1500" id="sms"/> введена цифра от 1 до 4, то считать её за ответ на вопрос, а если это не те цифры или просто текст типа "привет", то не обрабатывать в обработчике. если введён неправильный ответ, то оставить вопрос на 30 секунд, а далее сменить его. а если правильный вопрос, то вывести мол "молодец, правильно, сейчас придумаем новый вопросик", далее через минуту вывести другой рандомный вопрос из базы. если никто не отвечает, то не выводить другой вопрос в течение 5 минут, т.е. поменять вопрос с выводом "никто не ответил на поставленный вопрос, сейчас будет другой вопросик=)". часть этого как реализовать я знаю, но всё, что связано с временем для меня тяжёлый вопрос... могу разобраться и сам, но это будет долго- 2,3 дня, так как придётся читать литературу php, js и т.д. на это времени особо нету. пишу викторину чисто для того, чтобы побольше попрактиковать, а не для продажи его кому-нибудь.. хочу разобраться со временем в данном случае, как его реализовать, чтобы всё работало. код не прошу за меня писать, главное хотя бы намёк дать на функции, которые надо использовать. благодарен вам за помощь и за то, что не оставили мой вопрос без внимания! спасибо! | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 22:56)
| | 2-3 три дня это не долго, даже 2-3 недели это не долго, для того чтобы разобраться, усвоить и закрепить материал :)
для того чтобы отфильтровать цифры можно применить функцию intval(), а для пущей важности еще и trim() (которая нужна и без проверки числа)
в итоге получим условие
$sms=trim($sms);
if(intval($sms)>0 && intval($sms)<5){
тут обработчик викторины
}else{
тут обработчик чата
}
|
___
на викторину, я так понимаю, отвечают все кому не лень в реальном времени, а кто первый ответил, того и "тапки", как вы различаете пользователей пославших ответ? как вы ограничиваете пользователя от того чтобы он смог послать несколько (все четыре) ответа подряд? | |
|
|
|
|
|
|
|
для: Valick
(05.08.2012 в 09:20)
| | спасибо:)
ответивших пользователей я записываю в сессии и потом вывожу мол тот-то, тот-то ответил правильно или наоборот- неправильно. а на второй вопрос пока что ответ дать не могу, нужно посидеть и подумать над этим вопросом. думаю, через условие можно это сделать. скоро постараюсь чуть переписать викторину, чтобы было не 4 варианта ответа, а один, т.е. просто задавался вопрос и в конце дописывалось сколько букв в ответе. со временем сделать подсказки... но это всё со временем, нужно для начала хотя бы простую викторину реализовать, а уже потом заняться викториной потяжелее. | |
|
|
|
|
|
|
|
для: Valick
(05.08.2012 в 09:20)
| | спасибо:)
ответивших пользователей я записываю в сессии и потом вывожу мол тот-то, тот-то ответил правильно или наоборот- неправильно. а на второй вопрос пока что ответ дать не могу, нужно посидеть и подумать над этим вопросом. думаю, через условие можно это сделать. скоро постараюсь чуть переписать викторину, чтобы было не 4 варианта ответа, а один, т.е. просто задавался вопрос и в конце дописывалось сколько букв в ответе. со временем сделать подсказки... но это всё со временем, нужно для начала хотя бы простую викторину реализовать, а уже потом заняться викториной потяжелее. | |
|
|
|
|
|
|
|
для: DoKeRaToR
(04.08.2012 в 13:15)
| | видимо вам нужно ajax использовать, а что значит "другие посты не трогал"? | |
|
|
|
|
|
|
|
для: Lotanaen
(04.08.2012 в 15:04)
| | может сразу это? | |
|
|
|
|
|
|
|
для: Lotanaen
(04.08.2012 в 15:04)
| | это в смысле другие сообщения не трогать... | |
|
|
|