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

Форум PHP

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

 

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

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

тема: Сравнение переменных - не могу понять
 
 автор: nek-v   (20.06.2008 в 11:34)   письмо автору
 
 

День добрый граждане.
Возник такой вот вопрос
Обработчик:
<?php
session_start
();
$input=@$_POST['input'];
$code=$_SESSION['code'];
 if(
$input === $code){
 print
'OK!';
 echo 
$_SESSION['code']; 
 }else{
 print
'Error<br/>';
 echo 
$_SESSION['code'];
 echo 
$_POST['input'];
}
?>

Форма:

<?php
    session_start
();
    
$cod md5(uniqid(rand(),0));
    
$code=substr($cod,26);
    
$_SESSION['code']=$code;
    print
'<form  action="form.php" method="post">
          <input type="text" name="input"/>
          <input type="submit" value="Submit" />
          <img src="img.php" alt=""><br/>
          </form>'
;
          echo
$_SESSION['code'];
?>

Картинка:

<?php
session_start
();
  
header("Content-type: image/jpeg");
  
$im imagecreate(40030);
  
$white imagecolorallocate($im255255255);
  
$black imagecolorallocate($im000);
  
$code=$_SESSION['code'];
  
imagettftext($im2001020$black"fonts/john.ttf","$code");
  
imagejpeg($im);
  
imagedestroy($im);
?>

Почему условие не выполняется???
Ведь переменные равны!

   
 
 автор: Zend72   (20.06.2008 в 11:57)   письмо автору
 
   для: nek-v   (20.06.2008 в 11:34)
 


<?php 
session_start
(); 
$input=$_POST['input']; 
$code=$_SESSION['code']; 
 if(
$input == $code){ 
 print
'OK!'
 echo 
$_SESSION['code'];  
 }else{ 
 print
'Error<br/>'
 echo 
$_SESSION['code']; 
 echo 
$_POST['input']; 

?>


$a == $b Равно TRUE если $a равно $b.
$a === $b Тождественно равно TRUE если $a равно $b и имеет тот же тип. (Добавлено в PHP 4)
$a != $b Не равно TRUE если $a не равно $b.
$a <> $b Не равно TRUE если $a не равно $b.
$a !== $b Тождественно не равно TRUE если $a не равно $b или в случае, если они разных типов (Добавлено в PHP 4)
$a < $b Меньше TRUE если $a строго меньше $b.
$a > $b Больше TRUE если $a строго больше $b.
$a <= $b Меньше или равно TRUE если $a is меньше или равно $b.
$a >= $b Больше или равно TRUE если $a больше или равно $b.

Операторы сравнения

   
 
 автор: Trianon   (20.06.2008 в 12:43)   письмо автору
 
   для: Zend72   (20.06.2008 в 11:57)
 

Я тоже считаю, что операция тождественного сравнения здесь лишняя.
Но до меня не доходит, почему это может повлиять на результат. Типы переменных-то совпадают...

   
 
 автор: Zend72   (20.06.2008 в 12:46)   письмо автору
 
   для: Trianon   (20.06.2008 в 12:43)
 

Тонкостей не знаю но у него изначально было
$input=@$_POST['input'];

Зачем нужен символ @ ?

   
 
 автор: Trianon   (20.06.2008 в 12:48)   письмо автору
 
   для: Zend72   (20.06.2008 в 12:46)
 

>Тонкостей не знаю но у него изначально было
>$input=@$_POST['input'];
>Зачем нужен символ @ ?

Например, чтоб не было ругани, когда скрипт вызван не из формы, а через GET.
Так или иначе @ никак не повлияет на тип значения, если это значение пришло из формы.

   
 
 автор: mihdan   (20.06.2008 в 11:57)   письмо автору
 
   для: nek-v   (20.06.2008 в 11:34)
 

Зачем

<?
$input 
=== $code
?>


сделай так

<?
$input 
== $code
?>

   
 
 автор: nek-v   (20.06.2008 в 14:05)   письмо автору
 
   для: mihdan   (20.06.2008 в 11:57)
 

пробовал и так, не помогает...

   
 
 автор: Trianon   (20.06.2008 в 14:16)   письмо автору
 
   для: nek-v   (20.06.2008 в 14:05)
 

Надо смотреть на значения более точно.
замените
 print'Error<br/>'; 
 echo $_SESSION['code']; 
 echo $_POST['input']; 

на
 print 'Error'; 
 echo "<br/>Session code: ". base64_encode($code); 
 echo "<br/>Input code: ". base64_encode($input); 

   
 
 автор: nek-v   (20.06.2008 в 14:27)   письмо автору
 
   для: Trianon   (20.06.2008 в 14:16)
 

Спасибо граждане! Отыскал я проблему. Все дело в кривизне рук при настройке php на локалхосте.

   
 
 автор: Zend72   (20.06.2008 в 15:08)   письмо автору
 
   для: nek-v   (20.06.2008 в 14:27)
 

Возможно кто либо еще сталкнется с подобной проблемой... Не могли бы вы описать решение которое нашли: что конкретно в настройке PHP на localhost было неверно?

   
 
 автор: nek-v   (20.06.2008 в 20:29)   письмо автору
 
   для: Zend72   (20.06.2008 в 15:08)
 

Блок настроек сессий.
А именно тот код что я дал это каркас, там много чего еше есть.
у меня конфликтовали настройки php и session_save_path()

   
Rambler's Top100
вверх

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