Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проверка контрольного числа
 
 автор: Roo$   (08.08.2006 в 23:30)   письмо автору
 
 

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

<?php
error_reporting(0);

$zifra = $HTTP_POST_VARS["zifra"];

srand((double) microtime() * 100000);
$uniq_id = uniqid(rand());
$temp='';
for($i=0;$i<=rand(9,10);$i++)
{
$temp.=substr($uniq_id, rand(0,strlen($uniq_id))-1 ,1 );
}


if ($zifra != $temp) //$zifra - это то, что вводит пользователь
{
echo "Ok";
}
else
echo "No";

?>

<form action = "123.php" method = "post">
<td width="100%"><font face = "Verdana" size = 2>Контрольное число<?php echo $temp; ?></font> </td>
<td width="100%"><input type = "text" name = "zifra" style="BORDER-COLOR: black; BORDER-WIDTH: 1px;BORDER-STYLE:solid; WIDTH:205"></td>
<input type="submit" value="Send">

   
 
 автор: cheops   (09.08.2006 в 00:13)   письмо автору
 
   для: Roo$   (08.08.2006 в 23:30)
 

А что работает не так?

   
 
 автор: Roo$   (09.08.2006 в 00:16)   письмо автору
 
   для: cheops   (09.08.2006 в 00:13)
 

При любом значении у меня все время выводится сообщение "Ok (числа верны)"

   
 
 автор: cheops   (09.08.2006 в 00:19)   письмо автору
 
   для: Roo$   (09.08.2006 в 00:16)
 

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

   
 
 автор: Roo$   (09.08.2006 в 00:27)   письмо автору
 
   для: cheops   (09.08.2006 в 00:19)
 

Ему не нужно гадать... Оно ему дано...
<td width="100%"><font face = "Verdana" size = 2>Контрольное число<?php echo $temp; ?></font> </td>

Просто нужно его перепечатать в edit... А проверка все время дает только один результат

   
 
 автор: cheops   (09.08.2006 в 00:36)   письмо автору
 
   для: Roo$   (09.08.2006 в 00:27)
 

Нет, сейчас, при каждой загрузке скрипта, вот этот блок
<?php
$temp
='';
for(
$i=0;$i<=rand(9,10);$i++)
{
$temp.=substr($uniq_idrand(0,strlen($uniq_id))-,);
}


if (
$zifra != $temp//$zifra - это то, что вводит пользователь
{
echo 
"Ok";
}
else
echo 
"No";
?>

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

   
 
 автор: Roo$   (09.08.2006 в 00:39)   письмо автору
 
   для: cheops   (09.08.2006 в 00:36)
 

И как теперь поступить?

   
 
 автор: cheops   (09.08.2006 в 00:51)   письмо автору
 
   для: Roo$   (09.08.2006 в 00:39)
 

Вам следует предавать сгенерированное число в сесии и сравнивать переданное значение, со значением в сессии.

   
 
 автор: Roo$   (09.08.2006 в 01:10)   письмо автору
 
   для: cheops   (09.08.2006 в 00:51)
 

Если не трудно, покажи пожалуйсто как это будет выглядить на примере..

   
 
 автор: cheops   (09.08.2006 в 02:01)   письмо автору
 
   для: Roo$   (09.08.2006 в 01:10)
 

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

   
 
 автор: Roo$   (09.08.2006 в 08:43)   письмо автору
 
   для: cheops   (09.08.2006 в 02:01)
 

Ок

   
 
 автор: cheops   (09.08.2006 в 11:46)   письмо автору
 
   для: Roo$   (09.08.2006 в 08:43)
 

Следует поступить примерно так
<?php
  error_reporting
(0);
  
session_start();
  
  
// Обработчик
  
if(!empty($_POST))
  {
    if (
$_POST["zifra"] != $_SESSION['temp']) echo "Ok";
    else echo 
"No";
    exit();
  }

  
$uniq_id uniqid(rand());
  
$_SESSION['temp'] = '';
  for(
$i=0;$i<=rand(9,10);$i++)
  {
    
$_SESSION['temp'] .= substr($uniq_idrand(0,strlen($uniq_id))-,);
  }
  echo 
$_SESSION['temp'];
?>
<form method = "post">
<td width="100%"><font face = "Verdana" size = 2>Контрольное число<?php echo $temp?></font> </td>
<td width="100%"><input type = "text" name = "zifra" style="BORDER-COLOR: black; BORDER-WIDTH: 1px;BORDER-STYLE:solid; WIDTH:205"></td>
<input type="submit" value="Send">

   
 
 автор: Roo$   (09.08.2006 в 21:24)   письмо автору
 
   для: cheops   (09.08.2006 в 11:46)
 

Большое спасибо cheops, ты мне очень сильно помог.

   
 
 автор: Roo$   (09.08.2006 в 01:16)   письмо автору
 
   для: cheops   (09.08.2006 в 00:51)
 

Что то не получается

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования