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

Форум PHP

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

 

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

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

тема: Переменные PHP в одинарных кавычках
 
 автор: Новый-чек   (28.03.2006 в 14:38)   письмо автору
 
 

Как такое может быть:

<?php
...
print 
"$usern = $name[$sname] && $userp = $pass[$sname]<br>"//
if($usern == $name['$sname'] && $userp == $pass['$sname'])
...
?>

Выводит :
123 = 123 && 123 = 123
Но проверку не проходит.
А если так:
<?php
...
print 
"$usern = $name[$sname] && $userp = $pass[$sname]<br>"//
if($usern == $name[$sname] && $userp == $pass[$sname])
...
?>
То в любом случае проверку проходит.

   
 
 автор: cheops   (28.03.2006 в 14:49)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 14:38)
 

В одинарных кавычках переменные PHP не интерполируются, а просто пишуются как есть $sname. Подробности в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=130.

   
 
 автор: Новый-чек   (28.03.2006 в 15:12)   письмо автору
 
   для: cheops   (28.03.2006 в 14:49)
 

А в двойных, так же само работает как и в одинарных, не когда не проходит проверку,
а выводит:
123 = 123 && 123 = 123

   
 
 автор: Trianon   (28.03.2006 в 15:22)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 15:12)
 

Что значит $name[$sname] ?

   
 
 автор: Новый-чек   (28.03.2006 в 15:28)   письмо автору
 
   для: Trianon   (28.03.2006 в 15:22)
 

Это массив.

   
 
 автор: Trianon   (28.03.2006 в 15:32)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 15:28)
 

Массив нельзя индексировать им же самим.

   
 
 автор: isset   (28.03.2006 в 16:54)   письмо автору
 
   для: Trianon   (28.03.2006 в 15:32)
 

разве $sname одно и то же что $name ?

   
 
 автор: Trianon   (28.03.2006 в 17:18)   письмо автору
 
   для: isset   (28.03.2006 в 16:54)
 

упс.... прошу прощения. Недоглядел.

   
 
 автор: cheops   (28.03.2006 в 22:21)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 15:12)
 

$name массив одномерный или двумерный?

   
 
 автор: Новый-чек   (30.03.2006 в 17:09)   письмо автору
 
   для: cheops   (28.03.2006 в 22:21)
 

одномерный

   
 
 автор: kasmanaft   (30.03.2006 в 18:29)   письмо автору
 
   для: Новый-чек   (30.03.2006 в 17:09)
 

а как ты определяешь что проверка не прошла?
в двойных кавычках должно работать.

может быть забыл {} поставить?

   
 
 автор: Новый-чек   (30.03.2006 в 18:31)   письмо автору
 
   для: kasmanaft   (30.03.2006 в 18:29)
 

Не, не забыл.

   
 
 автор: kasmanaft   (30.03.2006 в 18:39)   письмо автору
 
   для: Новый-чек   (30.03.2006 в 18:31)
 

все-таки как ты проверяешь что проверка не прошла? (можешь привести участок кода побольше)

вот, посмотри. это работает

<?php
$usern 
123;
$name["$sname"] = 123;
$userp 123;
$pass["$sname"] = 123;
print 
"$usern = $name[$sname] && $userp = $pass[$sname]<br>";
if(
$usern == $name["$sname"] && $userp == $pass["$sname"])
   echo 
"da";
else
   echo 
"net";
?>


то есть ошибка где то в другом месте

   
 
 автор: Новый-чек   (30.03.2006 в 18:49)   письмо автору
 
   для: kasmanaft   (30.03.2006 в 18:39)
 

Вот:

<?php  
$name 
file("rname.txt");
$pass file("rpass.txt");
$sname count($name);
while (
$sname >= 0)
{
print 
"$usern = $name[$sname] && $userp = $pass[$sname]<br>"
if(
$usern == $name["$sname"] && $userp == $pass["$sname"])
{
...
}
$sname -=1;
}
?>

А в файлах rname.txt и rpass.txt, записано только 123.

   
 
 автор: Новый-чек   (30.03.2006 в 18:57)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 14:38)
 

Дать ещё более большой кусок кода?

   
 
 автор: kasmanaft   (30.03.2006 в 19:19)   письмо автору
 
   для: Новый-чек   (30.03.2006 в 18:57)
 

можно :))
я же просил то что внутри if'a :)

здесь все правильно вроде.

   
 
 автор: Trianon   (30.03.2006 в 19:23)   письмо автору
 
   для: kasmanaft   (30.03.2006 в 19:19)
 

Если учесть, что на первой же итерации цикла идет обращение к несуществующим элементам массива, то правильно именно вроде.

   
 
 автор: Новый-чек   (30.03.2006 в 19:28)   письмо автору
 
   для: kasmanaft   (30.03.2006 в 19:19)
 

То что внутри if'а работает, я помню что работало, и я не чего там не менял.

   
 
 автор: Новый-чек   (30.03.2006 в 19:30)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 14:38)
 

Вот это все что над if'ом:
<form method="get" action="index.php"> 
<p>ник:</p>
<input type="text" name="usern"> 
<br> 
<p>пароль:</p>
<input type="password" name="userp"> 
<br> 
<input type="submit" value="войти"> 
</form> 
<?php  
$name 
file("rname.txt");
$pass file("rpass.txt");
$sname count($name);
while (
$sname >= 0)
{
if (empty(
$usern) || empty($userp))
{
?>
<h3>
<?php
print "Введите ник И пароль.";
?>
</h3>
<?php
}
else
{
print 
"$usern = $name[$sname] && $userp = $pass[$sname]<br>"
if(
$usern == $name["$sname"] && $userp == $pass["$sname"])
{
...
}
?>

Ну вот, после такого кода, если ввести в обе формы "123", тогда все равно проверку не пройдёт.

   
 
 автор: kasmanaft   (30.03.2006 в 19:55)   письмо автору
 
   для: Новый-чек   (30.03.2006 в 19:30)
 

я имел ввиду "ошибка не здесь" :))
по-моему ничего страшного не произойдет из-за обрещения к несущ. элементам...
конечно можно попробовать вот так (вернее так будет правильнее)
$sname = count($name) - 1;

к тому же можно вот этот кусок кода:

if (empty($usern) || empty($userp)) 

?> 
<h3> 
<?php 
print "Введите ник И пароль."
?> 
</h3> 
<?php 
}
else ...

заменить вот этим

if (empty($usern) || empty($userp)) 
     print "<h3> Введите ник И пароль</h3>."; 
else ...

по-моему так удобнее :)

попробуй написать вот так

...
if($usern == $name["$sname"] && $userp == $pass["$sname"]) 

    echo 'работает';
}
...

   
 
 автор: Новый-чек   (31.03.2006 в 17:29)   письмо автору
 
   для: kasmanaft   (30.03.2006 в 19:55)
 

попробуй написать вот так


... 
if($usern == $name["$sname"] && $userp == $pass["$sname"]) 

    echo 'работает'; 

... 
 

Ну а я как написал?

   
 
 автор: Trianon   (30.03.2006 в 21:00)   письмо автору
 
   для: Новый-чек   (30.03.2006 в 19:30)
 

Извините, не выдержал. Нервов не хватило.

<?php
session_start
();

$login ''$usern  ''$userp  '';

if(isset(
$_REQUEST['logout']) && $_REQUEST['logout'] == '1')
{
    if(isset(
$_COOKIE['userp']))
       
setcookie ("userp"""time() - 3600);
    
header("Location: ?logout=0");
    exit();
}

if(   isset(
$_REQUEST['usern'])
   && isset(
$_REQUEST['userp'])
   && !empty(
$_REQUEST['usern'])
   )
   {
      
$usern trim($_REQUEST['usern']);
      
$userp $_REQUEST['userp'];
      if(
get_magic_quotes_gpc())
      {
            
$usern stripslashes($usern);
            
$userp stripslashes($userp);
      }
   }

if(
$usern != '')
{
    
$namelist file("rname.txt");
    
$passlist file("rpass.txt");
    foreach(
$namelist as $i => $name)
    {
        
$name trim($namelist[$i]);
        
$pass trim($passlist[$i]);
        if(
$name == $usern && $pass == $userp)
        {
            
$login $name;
            break;
        }
    }
    if(
$login == '')
        
$userp  '';

}
if(
$login == '')
{
    if(isset(
$_COOKIE['userp']))
           
setcookie ("userp"""time() - 3600);
    
?>
Введите ник и пароль:
<form method=post >
<p>ник:</p>
<input type="text" name="usern" value = "<?php  echo $usern?>">
<br>
<p>пароль:</p>
<input type="password" name="userp">
<br>
<input type="submit" value="войти">
</form>
    <?

}
else
{
    
setcookie('usern'$usern);
    
setcookie('userp'$userp);

    echo 
"Привет, $usern!</br>";
    echo 
"Если тебе надоело здесь, нажми на <a href=?logout=1>выход</a>!</br></br>";
    echo 
"<a href=?>обновить</a>!</br>";
}

?>

   
 
 автор: Новый-чек   (31.03.2006 в 17:26)   письмо автору
 
   для: Trianon   (30.03.2006 в 21:00)
 

Мне надо что бы вы мне поправили мой скрипт, а не создали новый.

   
 
 автор: Новый-чек   (03.04.2006 в 14:16)   письмо автору
 
   для: Новый-чек   (31.03.2006 в 17:26)
 

Так не кто не знает?

   
 
 автор: Новый-чек   (03.04.2006 в 22:21)   письмо автору
 
   для: Новый-чек   (28.03.2006 в 14:38)
 

Неужели нет разумного ответа на мой вопрос?

   
 
 автор: Евгений Петров   (03.04.2006 в 23:33)   письмо автору
 
   для: Новый-чек   (03.04.2006 в 22:21)
 

Замените Вашу строку
if($usern == $name["$sname"] && $userp == $pass["$sname"])

на
if($usern == trim($name["$sname"]) && $userp == trim($pass["$sname"]))

   
 
 автор: Новый-чек   (04.04.2006 в 15:57)   письмо автору
 
   для: Евгений Петров   (03.04.2006 в 23:33)
 

Большое спасибо, теперь всё работает.
А что делает trim?

   
 
 автор: cheops   (04.04.2006 в 22:41)   письмо автору
 
   для: Новый-чек   (04.04.2006 в 15:57)
 

trim() удаляет начальные и конечные пробельные символы в строке...

   
 
 автор: новый-чек   (18.04.2006 в 00:39)   письмо автору
 
   для: cheops   (04.04.2006 в 22:41)
 

Спасибо

   
Rambler's Top100
вверх

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