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

Форум PHP

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

 

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

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

тема: Ошибка Warning: crypt() expects parameter 1 to be string
 
 автор: Dmitry1988   (12.03.2010 в 12:08)   письмо автору
 
 

Здравствуйте,
почемуто, когда я выкладываю сайт в интернет возникает ошибка Warning: crypt() expects parameter 1 to be string. Но на локальном сервере все нормально. Ошибка вылетает на странице корзинки, когда я в нее что либо добавляю и когда я войду как зарегестрированный пользователь
Пишет, что она находится вот тут:

<?php
$_SESSION
['user'] = $r['name'];
$_SESSION['password'] = $r['pass'];
$_SESSION['sid'] =md5(crypt($r['name'],$r['pass'])); //Вот тут
?>

подскажите пожалуйста, почему она вылетает(ошибка), и как от нее избавиться! Спасибо большое!

  Ответить  
 
 автор: DJ Paltus   (12.03.2010 в 13:22)   письмо автору
 
   для: Dmitry1988   (12.03.2010 в 12:08)
 

А переменные $r['name'] и соответственно $r['pass'], они часом не пустые? может, в них какое значение не передалось? Например, если передавалось через POST, а на локальном серваке register_globals = on, то там и работать все могло. А у хостеров register_globals всегда off.

  Ответить  
 
 автор: Dmitry1988   (12.03.2010 в 13:54)   письмо автору
 
   для: DJ Paltus   (12.03.2010 в 13:22)
 

нет нет, все нормально. Когда я вхожу под своим именем и паролем, то все работает отлично, но как только я перейду на страницу корзинки и добавлю в нее товар то выскакивает ошибка. Может это как то связанно с тем, что на эту страницу передается сессионный массив для корзинки?(хотя не должно быть)

  Ответить  
 
 автор: DJ Paltus   (12.03.2010 в 14:11)   письмо автору
 
   для: Dmitry1988   (12.03.2010 в 13:54)
 

попробуй повыводи var_dump для этой r, непосредссно перед crypt(). Чего писать будет?

  Ответить  
 
 автор: Dmitry1988   (12.03.2010 в 15:09)   письмо автору
 
   для: DJ Paltus   (12.03.2010 в 14:11)
 

Вывел для всех переменных все возвращает нормально:

<?php
var_dump
($_SESSION['user']);
var_dump($_SESSION['password']);
var_dump($_SESSION['sid']);

Возвращает:
string(8"burobd11" 
string(32"9e59231bb4bbc18e00ca1b1939d694da"
string(32"9ee57ddbbca04849ec3f604c6ab23893"
?>

но я тут еще одну ошибку нашел, когда я пишу запрос на странице корзинки о заполнение данных из таблицы зарегестрированных пользователей:

<?php
$user 
= print("SELECT * FROM guest WHERE name='".$_SESSION['user']."' AND pass='".$_SESSION['password']."' AND status=1");
  
$r_user mysql_fetch_assoc($user);
?>

то он мне выдает ошибку, Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in, и вроде как сессия прерывается,в окне где написанно "Здравствуйте такойто" опять же выводится форма для входа, но в запросе если его выписать остается пароль...Сейчас буду пытаться исправить ошибку с mysql

  Ответить  
 
 автор: Dmitry1988   (13.03.2010 в 12:17)   письмо автору
 
   для: Dmitry1988   (12.03.2010 в 15:09)
 

помогите пожалуйста разобраться с этой ошибкой, никак понять не могу что не так, он выводит какойто бред...
Возникла ошибка - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'burobd11' AND pass='273c381f0b8ec7f57077299dade42789'' AND pass=
SELECT * FROM guest WHERE name='SELECT * FROM guest WHERE name='burobd11' AND pass='273c381f0b8ec7f57077299dade42789'' AND pass='273c381f0b8ec7f57077299dade42789'
вот код:

<?php
  $login1 
$_SESSION['user'];
  
$password1 $_SESSION['password'];
  
$user "SELECT * FROM guest WHERE name='".$login1."' AND pass='".md5($password1)."'";
  
$result mysql_query($user);
  if(!
$result){
  echo 
"Возникла ошибка - ".mysql_error()."<br>"
  echo 
$user
  exit();
  }
  if(
$result$r_user mysql_fetch_assoc($result);
?>

Спасибо большое за помощь

  Ответить  
 
 автор: Trianon   (13.03.2010 в 12:40)   письмо автору
 
   для: Dmitry1988   (13.03.2010 в 12:17)
 

Вы в сессионный массив загнать умудрились какую-то чушь.
и mysql_real_escape_string() не применяете.
Вот и.

  Ответить  
 
 автор: Dmitry1988   (13.03.2010 в 12:48)   письмо автору
 
   для: Trianon   (13.03.2010 в 12:40)
 

так я тут не использую сессионный массив, тут я просто приравниваю(когда человек входит под своим логином и паролем) имя к $_SESSION['user'] и пароль к $_SESSION['password'], а сессионный массив у меня используется в корзинке, но тут я эту сессиюю вообще не затрагиваю....
я использую везде mysql_escape_string(), его лучше тоже не использовать?

  Ответить  
 
 автор: Dmitry1988   (13.03.2010 в 13:15)   письмо автору
 
   для: Dmitry1988   (13.03.2010 в 12:48)
 

я попытался просто вывести $_SESSION['user'] и $_SESSION['password'] на другой странице, так он записывает в $_SESSION['user'] запрос sql, которым я обращаюсь к БД и если еще раз зайти на страницу корзинки то он добавит еще один точно такой же запрос в $_SESSION['user'] и так далее, а $_SESSION['password'] работает правильно, просто хранит пароль не изменяясь...
я не понимаю почему он чегото записывает в $_SESSION['user'], у меня на этой странице есть функция, которая делает из сессии сессионный массив, но она относиться к другой сессии:

<?php
function worksCart ($prod) { 
  if(
$prod) { //добавление товаров и обновление корзины 
    
if (!isset($_SESSION['cart'])) $_SESSION['cart'] = array(); 
    
$cart = &$_SESSION['cart']; 
    if (
is_array($prod)) { //добавление массива товаров 
      
foreach($prod as $key => $val) { 
        
$key intval($key); 
        if (
$key) { 
          
$val intval($val); 
          if (isset(
$_POST['del']) && in_array($key$_POST['del']) || !$val) { 
            
//удаление товара из корзины 
            
if (array_key_exists($key$cart)){ unset($cart[$key]); unset($_SESSION['sumprice']); unset($_SESSION['summnoz']); }
          } else 
$cart[$key] = $val//добавление, обновление  
        
}   
      } 
    } else { 
      
//добавление одиночного товара 
      
$id intval($prod); 
      if (
$id$cart[$id] = array_key_exists($id$cart) ? $cart[$id] + 1
    } 
  } else {unset(
$_SESSION['cart']); unset($_SESSION['sumprice']); unset($_SESSION['summnoz']);} //удаление корзины 
}
?>

потом идет код корзинки, где и находится эта форма, которую я хочу заполнять автоматически для зарегестрированных пользователей, так пишу:

<?php
if(!empty($_SESSION['sid'])){  //$_SESSION['sid'] = md5(crypt($r['name'],$r['pass']));
  
$login1 $_SESSION['user'];
  
$password1 $_SESSION['password'];
  
$user "SELECT * FROM `guest` WHERE `name`='".$login1."' AND `pass`='".md5($password1)."'";
  
$result mysql_query($user);
  if(!
$result){
  echo 
"Возникла ошибка - ".mysql_error()."<br>"
  echo 
$user
  exit();
  }
  if(
$result) {while($r_user mysql_fetch_assoc($result)){
?>

дальше у меня еще есть точно такойже запрос:

<?php
$q1 
mysql_query("SELECT * FROM guest WHERE name='".$_SESSION['user']."' AND pass='".$_SESSION['password']."' AND status=1");
?>

он служит для того чтобы справа вывести "Добрый день такойто".
Я нигде ничего не указываю $_SESSION['user'] чтобы в нее чтото записывалось....
Посоветуйте пожалуйста что-нибудь :-(

П.С. на локальном сервере не выдает никакой ошибки и не записывает ничего в $_SESSION['user']

  Ответить  
 
 автор: Dmitry1988   (13.03.2010 в 14:00)   письмо автору
 
   для: Dmitry1988   (13.03.2010 в 13:15)
 

я ничего не понимаю....я изменил $_SESSION['user'] на $_SESSION['nick'], и все работает нормально..., но когда вывожу $_SESSION['user'], то туда записывается запрос...вообщем какаято ерунда, Спасибо всем за ответы

  Ответить  
 
 автор: Trianon   (13.03.2010 в 14:29)   письмо автору
 
   для: Dmitry1988   (13.03.2010 в 12:48)
 

>так я тут не использую сессионный массив, тут я просто приравниваю(когда человек входит под своим логином и паролем) имя к $_SESSION['user'] и пароль к $_SESSION['password'],

Зачем?
Пароли в сессиях не хранят.

>а сессионный массив у меня используется в корзинке, но тут я эту сессиюю вообще не затрагиваю....

А вот это совершенно неважно.

>я использую везде mysql_escape_string(), его лучше тоже не использовать?

Где я такое написал?
Я написал что Вы не используете эту функцию (и уж как минимум - не используете корректно) - отсюда отчасти Ваша беда и исходит.
Помимо каши в сессионном массиве.

  Ответить  
 
 автор: Dmitry1988   (13.03.2010 в 14:40)   письмо автору
 
   для: Trianon   (13.03.2010 в 14:29)
 

а я просто не так понял, я тут забыл использовать эту функцию(пытался исправить ошибку и забыл написать). Я обычно использую mysql_escape_string();

  Ответить  
Rambler's Top100
вверх

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