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 Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Andruxa
Отправлено: 11 Августа, 2013 - 21:30:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Здравствуйте!
Есть в базе данных таблица следующего вида, добавлены записи:
id| kat | name_menu
1 | pozdravleniay | С днем Рождения
2 | pozdravleniay | С Новым Годом
3 | pozdravleniay |С 1 апреля
и т.д.

Вопрос в следующем, при выводе списка меню:
PHP:
скопировать код в буфер обмена
  1. $query = "SELECT * FROM menu WHERE kat='pozdravleniay'";
  2.              $sql = mysql_query($query) or die(mysql_error());        
  3.              $info=mysql_fetch_assoc($sql);              
  4.              while ( $info=mysql_fetch_assoc($sql)){          
  5.              echo  "<a href=' '>".$info['name_menu']."<br>";                
  6.                    }

Почему то не выводит первое значение, а начинает выводить со второй строчки , в чем причина !?
 
 Top
Саныч Модератор
Отправлено: 11 Августа, 2013 - 21:51:55
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Третью строку убрать.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Andruxa
Отправлено: 11 Августа, 2013 - 21:54:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Едрить .. мадрить.... И вправду Улыбка все отображается. Получается она была лишней
Саныч
Спасибо !!!!
 
 Top
Саныч Модератор
Отправлено: 11 Августа, 2013 - 22:28:34
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




Это говорит о том, что вы не понимаете кода, который пишите.
Почитайте внимательно описание функции mysql_fetch_assoc, думаю поймете в чем была ваша проблема. Ну если вам это нужно конечно.
И да, начинайте забывать MySQL и изучать MySQLi либо PDO.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
new01
Отправлено: 11 Августа, 2013 - 23:01:22
Post Id



Посетитель


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


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




Саныч пишет:
Это говорит о том, что вы не понимаете кода, который пишите.
Почитайте внимательно описание функции mysql_fetch_assoc, думаю поймете в чем была ваша проблема. Ну если вам это нужно конечно.
И да, начинайте забывать MySQL и изучать MySQLi либо PDO.


А почему забывать MySQL? И переходить на MySQLi либо PDO?


-----
new01
 
 Top
avtor.fox
Отправлено: 11 Августа, 2013 - 23:04:54
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




new01 пишет:
А почему забывать MySQL? И переходить на MySQLi либо PDO?

Именно.
 
 Top
Саныч Модератор
Отправлено: 11 Августа, 2013 - 23:18:18
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




new01 пишет:
А почему забывать MySQL? И переходить на MySQLi либо PDO?

http://ua1.php.net/manual/ru/faq...mysql.deprecated
http://ua1.php.net/manual/ru/mys...api.choosing.php
Изучайте. Вкратце, mysql устарело и уже объявлено нежелательным к использованию. В будущем исчезнет вобще. А так как вы только начинаете изучать, настоятельно советую начать с mysqli, зачем учить то, что уже не актуально.


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
new01
Отправлено: 11 Августа, 2013 - 23:21:51
Post Id



Посетитель


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


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




Саныч пишет:
new01 пишет:
А почему забывать MySQL? И переходить на MySQLi либо PDO?

http://ua1.php.net/manual/ru/faq...mysql.deprecated
http://ua1.php.net/manual/ru/mys...api.choosing.php
Изучайте. Вкратце, mysql устарело и уже объявлено нежелательным к использованию. В будущем исчезнет вобще. А так как вы только начинаете изучать, настоятельно советую начать с mysqli, зачем учить то, что уже не актуально.


Спасибо, очень пригодится, приму к сведению.


-----
new01
 
 Top
Andruxa
Отправлено: 17 Августа, 2013 - 21:44:06
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Саныч Спасибо! стал смотреть в направлении PDO
вопрос такой появился. в Mysql у меня была функция подключения к БД, вида:
PHP:
скопировать код в буфер обмена
  1. function db_connect ()
  2. {    
  3.         $host = "localhost";
  4.         $user = "root";
  5.         $password = "";
  6.         $dbname = "baza";
  7.     mysql_connect ($host, $user, $password) or die (mysql_error());
  8.         mysql_select_db ($dbname) or die (mysql_error());
  9.     mysql_query("SET NAMES utf8");
  10. }


Так вот при использовании PDO, используя в функциях, например:
PHP:
скопировать код в буфер обмена
  1. function get_menu ($kategoriay){
  2. $host="localhost";
  3. $db="pozdr";
  4. $charset="utf8";
  5. $user="root";
  6. $pass="";  
  7. $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
  8. $opt = array(
  9.     PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  10.     PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  11.    
  12. );
  13. $pdo = new PDO($dsn, $user, $pass, $opt);
  14.     $stm  = $pdo->prepare("SELECT * FROM `menu` WHERE kategoriay=:kategoriay");
  15.     $stm->execute(array('kategoriay'=>$kategoriay));
  16.      while($data = $stm->fetch()){
  17.       $info.=$data['name_menu']."-".$data['id']."<br>";      
  18.  }
  19.  return $info;
  20. }


в каждой функции приходится прописывать снова:
PHP:
скопировать код в буфер обмена
  1. $host="localhost";
  2. $db="pozdr";
  3. $charset="utf8";
  4. $user="root";
  5. $pass="";  
  6. $dsn = "mysql:host=$host;dbname=$db;charset=$charset";


Как сделать универсальное подключение на PDO !?

В ООП пока не сильно силен...

P.S. Частенько возникает много мелких вопросов, если у кого есть желание и возможность для быстрого ответа, прошу скиньте Ваши координаты в личку, обещаю сильно не доставать Улыбка

(Отредактировано автором: 17 Августа, 2013 - 21:46:54)

 
 Top
armancho7777777 Супермодератор
Отправлено: 17 Августа, 2013 - 21:58:42
Post Id



Активный участник


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


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




PHP:
скопировать код в буфер обмена
  1.  
  2. function db_connect()
  3. {
  4.         static $pdo = NULL;
  5.          
  6.         if(!$pdo)
  7.         {
  8.                 $host = "localhost";
  9.                 $db = "pozdr";
  10.                 $charset = "utf8";
  11.                 $user = "root";
  12.                 $pass = "";  
  13.                 $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
  14.                
  15.                 $opt = array(
  16.                         PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
  17.                         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
  18.                 );
  19.                
  20.                 $pdo = new PDO($dsn, $user, $pass, $opt);
  21.         }
  22.        
  23.         return $pdo;
  24. }
  25.  
  26.  
  27. function get_menu ($kategoriay)
  28. {
  29.         $stm  = db_connect()->prepare(
  30.                 "SELECT *
  31.                    FROM `menu`
  32.                   WHERE kategoriay=:kategoriay"
  33.         );
  34.        
  35.         $stm->execute(array('kategoriay'=>$kategoriay));
  36.        
  37.         while($data = $stm->fetch()){
  38.                 $info.=$data['name_menu']."-".$data['id']."<br>";      
  39.         }
  40.        
  41.         return $info;
  42. }
  43.  
 
 Top
Andruxa
Отправлено: 17 Августа, 2013 - 22:20:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




armancho7777777 То что нужно, спасибо!
 
 Top
armancho7777777 Супермодератор
Отправлено: 17 Августа, 2013 - 22:23:34
Post Id



Активный участник


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


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




Не за что.
 
 Top
Andruxa
Отправлено: 19 Августа, 2013 - 18:47:37
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Еще один вопрос.
Проверка данных из формы (авторизация)
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['log_in']) and empty($error)){    
  2.         $stm  = db_connect()->prepare("SELECT * FROM `users` WHERE login=:name OR email=:email AND password=:password LIMIT 1");      
  3.         $stm->execute(array('name'=>$_POST['login'], 'email'=>$_POST['login'], 'password'=>md5($_POST['password'])));  
  4.         $data = $stm->fetch();
  5.             var_dump($data); // так, для себя      
  6.              if ($data)
  7.              {
  8.                 echo "<div class='error'> <p>Ошибка!</p><br>Логин или пароль введен не верно!</div>";
  9.              }
  10.            else
  11.           {
  12.            define( '_ACCESS_', 1 );
  13.            $_SESSION['id']=$data['id'];  
  14.           }
  15.            
  16. }
  17.  


Почему выполняется запрос, если он не соответствует условию? Даже если я ввел неверный пароль он выполняется, при неверном логине выдает boolean false

(Отредактировано автором: 19 Августа, 2013 - 22:26:16)

 
 Top
Andruxa
Отправлено: 20 Августа, 2013 - 21:25:58
Post Id



Частый гость


Покинул форум
Сообщений всего: 140
Дата рег-ции: Март 2010  


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




Никто не подскажет ... Недовольство, огорчение
 
 Top
LIME
Отправлено: 20 Августа, 2013 - 21:30:09
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `users` WHERE (login=:name OR email=:email) AND password=:password LIMIT 1
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Работа с СУБД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB