Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: немогу разобраться...

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: нужно данные обновить в бд
MadDen
Отправлено: 23 Января, 2008 - 12:44:48
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




вроде по смыслу всё продумал а не хотят данные передоваться в бд вот листинг:
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. ///
  3. session_start(); // стартуем сессию
  4.  
  5. include "conf.php"; // коннект к бд
  6. ///анкета
  7. ///
  8. include "header.php";
  9. ///
  10.  
  11. If (!empty($_SESSION['login']))
  12.    {
  13.  
  14.  
  15. $login = $_SESSION['login'];
  16. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."'");
  17.  
  18.  while ($r = mysql_fetch_array($result))
  19.   {
  20.   if (empty($login) || empty($pass))
  21.   {
  22.   echo '<form name="anketa" action="anketa.php" method="post">';
  23.   echo '<div class="quote_conteiner">';
  24.   echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$r['login'].'">';
  25.   echo '</div>';
  26.   echo '<div class="quote_conteiner">';
  27.   echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$r['pass'].'">';
  28.   echo '</div>';
  29.   echo '<div class="quote_conteiner">';
  30.   echo '<input type="submit" name="ok" value="Обновить">';
  31.   echo '</div>';
  32.   echo '</form>';
  33.   echo '<div class="quote_conteiner">';
  34.   echo '<a href="index.php">Главная</a><br/>';
  35.   echo '</div>';
  36.   exit();
  37.  
  38.    if (mysql_query("UPDATE * FROM `users` WHERE `login`='".$login."' AND `pass`='".$pass."'"))
  39.    {
  40.    echo 'Данные успешно обновлены';
  41.    }
  42.  
  43.   }
  44.   };
  45.   }
  46.    
  47.    else
  48.    {
  49.    echo 'Иди отсюдаго';
  50.    }
  51.  
  52. ///
  53. include "footer.php";
  54. ///
  55.  
  56. ?>


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


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
Dastar
Отправлено: 23 Января, 2008 - 16:25:55
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




Ты кодируешь пароли в базе данных?
(функция md5() и иму подобные?)


-----
Не знаешь - молчи.
 
 Top
MadDen
Отправлено: 23 Января, 2008 - 16:28:43
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




убрал цикл я подумал зачем тут он нужен для вывода одних данных...
теперь код такой:
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. ///
  3. session_start(); // стартуем сессию
  4.  
  5. include "conf.php"; // коннект к бд
  6. ///анкета
  7. ///
  8. include "header.php";
  9. ///
  10.  
  11. If (!empty($_SESSION['login']))
  12.     {
  13.    
  14. $login = $_SESSION['login'];
  15. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."'");
  16. $r = mysql_fetch_array($result);
  17.    
  18.   if (empty($login) || empty($pass))
  19.   {
  20.   echo '<form name="anketa" action="anketa.php" method="post">';
  21.   echo '<div class="quote_conteiner">';
  22.   echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$r['login'].'">';
  23.   echo '</div>';
  24.   echo '<div class="quote_conteiner">';
  25.   echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$r['pass'].'">';
  26.   echo '</div>';
  27.   echo '<div class="quote_conteiner">';
  28.   echo '<input type="submit" name="ok" value="Обновить">';
  29.   echo '</div>';
  30.   echo '</form>';
  31.   echo '<div class="quote_conteiner">';
  32.   echo '<a href="index.php">Главная</a><br/>';
  33.   echo '</div>';
  34.   exit();
  35.   }
  36.  
  37.   else
  38.   mysql_query("UPDATE * FROM `users` WHERE `login`='".$login."' AND `pass`='".$pass."'");
  39.   {
  40.   echo 'Данные успешно обновлены';
  41.   }
  42.  
  43.     }
  44.    
  45.    else
  46.    {
  47.    echo 'Иди отсюдаго';
  48.    }
  49.  
  50. ///
  51. include "footer.php";
  52. ///
  53.  
  54. ?>

данные не передаются из форм скорее всего я думаю из-за сессий,
подскажите пожалуйста как решить данную проблему?...

(Добавление)
Dastar пишет:
Ты кодируешь пароли в базе данных?
(функция md5() и иму подобные?)

нет я его вообще ещё ни чем не кодирую ... он просто лежит в базе и всё... (кодировать позже буду нужно сначало систему построить)


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
Dastar
Отправлено: 23 Января, 2008 - 16:31:53
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




Блин, я тупица.
А что именно вы хотите обновлять?
Вы даете задание базе данных:
ОБНОВИТЬ ГДЕ логин=логин И пароль=пароль.
Программа не должна и не может сама решать что обновлять и где.


-----
Не знаешь - молчи.
 
 Top
MadDen
Отправлено: 23 Января, 2008 - 16:35:12
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




Dastar пишет:
Блин, я тупица.
А что именно вы хотите обновлять?
Вы даете задание базе данных:
ОБНОВИТЬ ГДЕ логин=логин И пароль=пароль.
Программа не должна и не может сама решать что обновлять и где.

Ну это то я понимаю что она не может обновлять данные не откуда их не взяв!
НО ОНИ ЖЕ БЕРУТСЯ ИЗ ФОРМЫ:
CODE (text):
скопировать код в буфер обмена
  1. echo '<form name="anketa" action="anketa.php" method="post">';
  2. echo '<div class="quote_conteiner">';
  3. echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$r['login'].'">';
  4. echo '</div>';
  5. echo '<div class="quote_conteiner">';
  6. echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$r['pass'].'">';
  7. echo '</div>';
  8. echo '<div class="quote_conteiner">';
  9. echo '<input type="submit" name="ok" value="Обновить">';
  10. echo '</div>';
  11. echo '</form>';
  12. echo '<div class="quote_conteiner">';
  13. echo '<a href="index.php">Главная</a><br/>';
  14. echo '</div>';

и должны передаваться дальше, но почему то не передаются, вот я и хочу узнать причину


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
Dastar
Отправлено: 23 Января, 2008 - 20:10:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




MadDen пишет:
mysql_query("UPDATE * FROM `users` WHERE `login`='".$login."' AND `pass`='".$pass."'");

Вот это неправильно. Это переводится как:
Dastar пишет:
ОБНОВИТЬ ГДЕ логин=логин И пароль=пароль.

Правильно будет:
CODE (text):
скопировать код в буфер обмена
  1. UPDATE table SET login='login', password='password' WHERE login='login' AND password='password'


-----
Не знаешь - молчи.
 
 Top
SION-ZENIT
Отправлено: 24 Января, 2008 - 00:13:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 148
Дата рег-ции: Июль 2007  
Откуда: SPb


Помог: 0 раз(а)




CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. ///
  3. session_start(); // стартуем сессию
  4.  
  5. include "conf.php"; // коннект к бд
  6. ///анкета
  7. ///
  8. include "header.php";
  9. ///
  10.  
  11. If (!empty($_SESSION['login']))
  12. {
  13.  
  14. $login = $_SESSION['login'];
  15. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."'");
  16. $r = mysql_fetch_array($result);
  17.  
  18. if (empty($login) || empty($pass))
  19. {
  20. echo '<form name="anketa" action="anketa.php" method="post">';
  21. echo '<div class="quote_conteiner">';
  22. echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$r['login'].'">';
  23. echo '</div>';
  24. echo '<div class="quote_conteiner">';
  25. echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$r['pass'].'">';
  26. echo '</div>';
  27. echo '<div class="quote_conteiner">';
  28. echo '<input type="submit" name="ok" value="Обновить">';
  29. echo '</div>';
  30. echo '</form>';
  31. echo '<div class="quote_conteiner">';
  32. echo '<a href="index.php">Главная</a><br/>';
  33. echo '</div>';
  34. exit();
  35. }
  36.  
  37. else
  38. mysql_query("UPDATE `users` SET login='".mysql_escape_string($login)."', pass='".mysql_escape_string ($password)."' WHERE login='".$login."' AND pass='".$pass."';");
  39. {
  40. echo 'Данные успешно обновлены';
  41. }
  42.  
  43. }
  44.  
  45. else
  46. {
  47. echo 'Иди отсюдаго';
  48. }
  49.  
  50. ///
  51. include "footer.php";
  52. ///
  53.  
  54. ?>

Надо экранировать спец символы, а то удалят всю инфу Радость

(Отредактировано автором: 24 Января, 2008 - 00:17:40)

 
 Top
MadDen
Отправлено: 24 Января, 2008 - 01:37:22
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




как запрос в базу идёт мене без разницы я знаю что он не правильный и сделал бы нормальный, то что вы написали:
CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. ///
  3. session_start(); // стартуем сессию
  4.  
  5. include "conf.php"; // коннект к бд
  6. ///анкета
  7. ///
  8. include "header.php";
  9. ///
  10.  
  11. If (!empty($_SESSION['login']))
  12. {
  13.  
  14. $login = $_SESSION['login'];
  15. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."'");
  16. $r = mysql_fetch_array($result);
  17.  
  18. if (empty($login) || empty($pass))
  19. {
  20. echo '<form name="anketa" action="anketa.php" method="post">';
  21. echo '<div class="quote_conteiner">';
  22. echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$r['login'].'">';
  23. echo '</div>';
  24. echo '<div class="quote_conteiner">';
  25. echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$r['pass'].'">';
  26. echo '</div>';
  27. echo '<div class="quote_conteiner">';
  28. echo '<input type="submit" name="ok" value="Обновить">';
  29. echo '</div>';
  30. echo '</form>';
  31. echo '<div class="quote_conteiner">';
  32. echo '<a href="index.php">Главная</a><br/>';
  33. echo '</div>';
  34. exit();
  35. }
  36.  
  37. else
  38. mysql_query("UPDATE `users` SET login='".mysql_escape_string($login)."', pass='".mysql_escape_string ($password)."' WHERE login='".$login."' AND pass='".$pass."';");
  39. {
  40. echo 'Данные успешно обновлены';
  41. }
  42.  
  43. }
  44.  
  45. else
  46. {
  47. echo 'Иди отсюдаго';
  48. }
  49.  
  50. ///
  51. include "footer.php";
  52. ///
  53.  
  54. ?>

а именно не передаются данные из формы далее чтобы записаться в базу


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
Dastar
Отправлено: 24 Января, 2008 - 07:11:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 199
Дата рег-ции: Янв. 2008  
Откуда: Израиль


Помог: -6 раз(а)




В Вашем случае (если у вас выключен регистр глобал [что очень рекомендуется]) данные из формы доступны через массив $_POST.
Тоесть, информация из поля "логин" доступна в переменной $_POST['login'] а из поля "пароль" $_POST['pass'].
А узнать если кнопка нажата можно следующим образом:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. if($_POST['ok']) {
  3. //Тут идут всякие действия...
  4. };
  5.  


-----
Не знаешь - молчи.
 
 Top
MadDen
Отправлено: 24 Января, 2008 - 12:03:09
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




причём тут вообще $_POST['ok']
ошибка где-то в другом совершенно месте


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
EuGen Администратор
Отправлено: 24 Января, 2008 - 15:13:16
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Во-первых, проверьте состояние register_globals в Ваше php.ini.
Во-вторых, результат выполнения скрипта - в студию, то есть что именно Вы видите. И в-третьих:
http://phpfaq[dot]ru/debug


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
evgenijj
Отправлено: 24 Января, 2008 - 16:06:12
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




MadDen пишет:

а именно не передаются данные из формы далее чтобы записаться в базу

Да они записываются. Вопрос только в том, что ты туда записываешь:
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql_query("UPDATE `users` SET login='".mysql_escape_string($login)."',
  3. pass='".mysql_escape_string ($pass)."' WHERE login='".$login."' AND pass='".$pass."';"
  4.  

Ты только вдумайся в этот запрос - самому весело станет Улыбка
UPDATE `users` SEL login='evgenijj', pass='qwerty' WHERE login='evgenijj' AND pass='qwerty'

Логика скрипта должна быть следующей
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if ( isset( $_SESSION['login'] ) ) {
  4.   // Получаем данные из БД о пользователе
  5.   $query = "SELECT * FROM `users` WHERE login='".$_SESSION['login']."'";
  6.   $res = mysql_query( $query );
  7.   $user = mysql_fetch_array( $res );
  8.   // Если данные формы еще не отправлены
  9.   if ( !isset( $_POST['ok'] ) ) {
  10.     // Выводим форму
  11.     echo '<form name="anketa" action="anketa.php" method="post">';
  12.     echo '<b>Ваш ник:</b><br/> <input type="text" name="login" value="'.$user['login'].'">';
  13.     echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$user['pass'].'">';
  14.     echo '<input type="submit" name="ok" value="Обновить">';
  15.     echo '</form>';
  16.   } else {
  17.     // Обновляем информацию о пользователе
  18.     $query = "UPDATE `users` SET login='".$_POST['login']."', pass='".$_POST['pass']."'
  19.    WHERE login='".$_SESSION['login']."'";
  20.     mysql_query( $query );
  21.     $_SESSION['login'] = $_POST['login'];
  22.   }
  23. } else {
  24.   header( 'Location: authForm.php' );
  25.   die();
  26. }
  27.  


Ты сам себя запутал
PHP:
скопировать код в буфер обмена
  1.  
  2. $login = $_SESSION['login'];
  3. $result = mysql_query("SELECT * FROM `users` WHERE `login` = '".$login."'");
  4. $r = mysql_fetch_array($result);
  5.  
  6. if (empty($login) || empty($pass))
  7.  

Видишь, в $login сперва сохраняется значение переменной из сессии (зачем, если register_globals=On) а потом, ты ее используешь как переменную, содержащую данные из формы.

Цитата:
variables_order = "EGPCS"
Буквы здесь означают следующее:
* E - переменными среды
* G - переменными передаваемыми по методу GET (G)
* P - переменными передаваемыми по методу POST (P)
* C - Cookies
* S - сессии
 
 Top
MadDen
Отправлено: 25 Января, 2008 - 12:20:58
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




PHP:
скопировать код в буфер обмена
  1. if ( isset( $_SESSION['login'] ) {
  2.   // Получаем данные из БД о пользователе
  3.   $query = "SELECT * FROM `users` WHERE login='".$_SESSION['login']."'";
  4.   $res = mysql_query( $query );
  5.   $user = mysql_fetch_array( $res );
  6.   // Если данные формы еще не отправлены
  7.   if ( !isset( $_POST['ok'] ) {
  8.     // Выводим форму
  9.     echo '<form name="anketa" action="anketa.php" method="post">';
  10.     echo '<b>Ваш ник:</b><br/> <input type="name" name="login" value="'.$user['login'].'">';
  11.     echo '<b>Ваш пароль:</b><br/> <input type="text" name="pass" value="'.$user['pass'].'">';
  12.     echo '<input type="submit" name="ok" value="Обновить">';
  13.     echo '</form>';
  14.   } else {
  15.     // Обновляем информацию о пользователе
  16.     $query = "UPDATE `users` SET login='".$_POST['login']."', pass='".$_POST['pass']."'
  17.    WHERE login='".$_SESSION['login']."'";
  18.     $_SESSION['login'] = $_POST['login'];
  19.   }
  20. } else {
  21.   header( 'Location: authForm.php' );
  22.   die();
  23. }


не работает так у меня скрипт, из-за $_POST['ok'] незнаю даж как это исправить, если вместо $_POST['ok'] писать empty($login) || empty($pass) а перед этим подставить $login=$_POST['login']; $pass=$_POST['pass']; то толку нету данные в бд не обновляются а так как ты написал не рабтает =( и я использую денвер как я смотрел там register_globals=OFF включен.


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
evgenijj
Отправлено: 25 Января, 2008 - 13:44:40
Post Id



Участник


Покинул форум
Сообщений всего: 1212
Дата рег-ции: Авг. 2006  
Откуда: Москва


Помог: 10 раз(а)




У меня там в скрипте несколько ошибок - просто невнимательность
if ( isset( $_SESSION['login'] ) ) {
................................ ......
if ( !isset( $_POST['ok'] ) ) {
................................ ......
$query = "UPDATE `users` SET login='".$_POST['login']."', pass='".$_POST['pass']."'
WHERE login='".$_SESSION['login']."'";
mysql_query( $query );
$_SESSION['login'] = $_POST['login'];

Но вообще, в php.ini выставляем
dispay_errors=On
error_reporting=E_ALL
А без этого вообще не представляю, как можно скрипт отлаживать...
 
 Top
MadDen
Отправлено: 27 Января, 2008 - 09:20:29
Post Id


Новичок


Покинул форум
Сообщений всего: 57
Дата рег-ции: Авг. 2007  
Откуда: Аглы


Помог: -3 раз(а)




Спасибо в ошибках разобрался и понял их


-----
Лучший способ убедиться, что меры предосторожности не понадобятся, это своевременно принять их.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB