Jump to content
  • 0

Fatal error: Cannot redeclare


Avalon4eg
 Share

Question

Доброго времени суток.

стоит такая задача, на страницу нужно выводить случайную запись из из базы, но они не должны повторятся, для этого на страницу инклюдю php файл в котором осуществляется выборка из базы, проверка на использование и вывод формы.

для проверки на использование написал функцияю

function rand() {
$i = mt_rand(1, 10);
$sql = "SELECT * FROM questions WHERE id = '$i'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
if ($row[7] == 'yes') {
rand();
}
return $i;
}
rand();

при вызове этого файла выбивает ошибку

Fatal error: Cannot redeclare rand() in Z:\home\akciya.ru\www\form.php on line 14

ошибка в месте окончания функции. Не пойму в чем ошибка, надеюсь на вашу помощь

Link to comment
Share on other sites

25 answers to this question

Recommended Posts

  • 0

1) rand() - зарезервированная ф-ция php, поэтому нужно переназвать ее.

2) Что это за бред?


$i = mt_rand(1, 10);
$sql = "SELECT * FROM questions WHERE id = '$i'";

а если id не будет соответствовать $i, об этом не подумали?

Link to comment
Share on other sites

  • 0

1) rand() - зарезервированная ф-ция php, поэтому нужно переназвать ее.

2) Что это за бред?


$i = mt_rand(1, 10);
$sql = "SELECT * FROM questions WHERE id = '$i'";

а если id не будет соответствовать $i, об этом не подумали?

блин все ясно, а на счет кавычек я погорячился

спасибо

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

блин все ясно, а на счет кавычек я погорячился

спасибо

да пожалуйста, но чет не понял на счет кавычек, при чем тут они? :blink:

по идее указанное в кавычках воспринимается как текстовая строка - хотя на практике все работает и так, или ты о том что Id-шники могут не входить в диапазон 1-10?

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

по идее указанное в кавычках воспринимается как текстовая строка - хотя на практике все работает и так, или ты о том что Id-шники могут не входить в диапазон 1-10?

ну тут можно и конкатенацию применить, не суть.

да, id могут не только не входить в этот диапазон, но и вообще их может и не быть, т.е. этих чисел.

с начала когда создашь новую первую запись в таблице, там да, будет с автоинкрементом так:

id

1

2

3

4

и т.д..., но что если ты удалишь пару-тройку из них?

id

2

5

6

9

15

и что тогда получится?

или даже так:

id

25

36

37

48

...

?

для случайного вывода есть ф-ция count() в mysql, но она при больших количествах записей будет нагружать бд.

Link to comment
Share on other sites

  • 0


SELECT * FROM `questions` ORDER BY RAND() limit 1

Ой, вот я фигню написал :D

rand() а не count()!

видимо о чем-то о своем думал когда писал :)

но как я уже сказал она при больших кол-вах записей в бд тормозит сильно.

Link to comment
Share on other sites

  • 0

да с таким запросом будет по аккуратней,

но теперь возникла проблема - игнорируется проверка

function rand_q() {
$i = mt_rand(1, 10);
$sql = "SELECT * FROM questions WHERE id = '$i'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
if ($row[7] == 'yes') {
rand_q();
}
return $i;
}
$i = rand_q();
$sql = "SELECT * FROM questions WHERE id = '$i'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
?>
<form action="action.php" method="post" name="form1">
<p><?= $row[1] ?></p>
<br />
<input type="radio" name="rb" id="option1" value="opt1"/><label for="option1"><?= $row[2] ?></label>
<input type="radio" name="rb" id="option2" value="opt2"/><label for="option2"><?= $row[3] ?></label>
<br />
<input type="radio" name="rb" id="option3" value="opt3"/><label for="option3"><?= $row[4] ?></label>
<input type="radio" name="rb" id="option4" value="opt4"/><label for="option4"><?= $row[5] ?></label>
<br />
<input type="hidden" name="q_id" value="<?= $row['0'] ?>"/>
<input type="button" value="Ответить" onclick="send()"/>
</form>

вот полный код файла

Link to comment
Share on other sites

  • 0

вот полный код файла

Вот я смотрю и мне остаётся не ясным сакральный смысл некоторых строчек, например:


if ($row[7] == 'yes') { rand_q(); }

Не прокомментируете? Почему нельзя сразу в запросе поставить условие?

Link to comment
Share on other sites

  • 0

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

для этого осуществляется проверка


function rand_q() {
$i = mt_rand(1, 10);
$sql = "SELECT * FROM questions WHERE id = '$i'";
$result = mysql_query($sql);
$row = mysql_fetch_row($result);
if ($row[7] == 'yes') {
rand_q();
}
return $i;
}

то есть функция будет вызывать сама себя пока не попадет на запись у которой поле $row[7] не будет - yes

запись в базе имеет поля

id | quest | opt1 | opt2 | opt3 | opt4 | answer |use

Не прокомментируете? Почему нельзя сразу в запросе поставить условие?

разве не так рекурсия применяется? а по поводу запроса

можно же написать вообще

SELECT * FROM questions WHERE use = 'no' limit 1

или как то так, и не мучиться ?

Edited by Avalon4eg
Link to comment
Share on other sites

  • 0

вот полный код файла

Вот я смотрю и мне остаётся не ясным сакральный смысл некоторых строчек, например:


if ($row[7] == 'yes') { rand_q(); }

Не прокомментируете? Почему нельзя сразу в запросе поставить условие?

вот и я не пойму к чему эти извращения...

а еще с ф-цией mysql_fetch_row() не очень то удобно работать, она же только массив с числовыми индексами возвращает!

другое дело - mysql_fetch_array() тут тебе и индексы и ассоциативный массив, да и намного удобнее доставать данные ;)

Link to comment
Share on other sites

  • 0

а по поводу запроса

можно же написать вообще

SELECT * FROM questions WHERE use = 'no' limit 1

или как то так, и не мучиться ?

ну да, и общитался не то поле :)

SELECT * FROM `questions` WHERE `use` = 'no' ORDER BY RAND() limit 1

И не нужна функция ваша

Link to comment
Share on other sites

  • 0

Ну не может все быть так хорошо.

появилась новая проблема

поле того как на вопрос ответил для него нужно изменить поле use с no на yes

для этого делаю запрос

"UPDATE 'questions' SET 'use' = 'yes' WHERE id = '$q_id'"

эхом проверяю его результат и получаю такую строку

UPDATE 'questions' SET 'use' = 'yes' WHERE id = '6'

вроде бы все правильно но не апдейтится,

а после завершения опроса нужно все значения use установить обратно в положение no

для этого использую запрос

"UPDATE 'questions' SET 'use' = 'no'

получаю результат

UPDATE 'questions' SET 'use' = 'no'

и опять ни какой реакции

не пойму в чем дело :dash:

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy