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

Форум MySQL

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

 

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

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

тема: PHP +MYSQL
 
 автор: Monkey   (22.11.2008 в 19:50)   письмо автору
 
 

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

$connect=mysql_connect ($host, $login, $passwd) - хост логин и пароль

потом этот же результат mysql_connect (он же $connect) мы использум в

mysql_select_db ($db, $connect)

а полсле я немного плаваю так как, есть два варианта
1) вариант
$str='SELECT * FROM 'home'';
mysql_query($str,$connect);

2) вариант
$str='SELECT * FROM 'home'';
mysql_query($str);

Вариант №2 хорошо применять когда в одном файле происходит коннект и выбор базы данных

Но в моем случае мне бы хотелось какие то операции выполнять непосредственно запросов на других страницах передавая им только методом POST самое необходимое, а тоесть

Авторизация происходит намного раньше, если она успешна то в таком случае открывается главная страница (menu.php) для работы с таблицами.
В моем случае при коннекте я делаю так

connect.php
......
session_start();
....
$_SESSION['connect']= mysql_connect ($host, $login, $passwd) ;
....

при открытии файла menu.php у меня возникла проблема
menu.php
.....
session_start();
......
$str='SELECT * FROM 'home'';
mysql_query($str,$_SESSION['connect']);
......

На это чудо код PHP мне отвечает
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in таком то файле

Подскажите что я делаю не так!! не понимаю.
Все как по книге :-)

  Ответить  
 
 автор: UnFast   (22.11.2008 в 20:04)   письмо автору
 
   для: Monkey   (22.11.2008 в 19:50)
 

Я не вижу в твоём варианте особых плюсов и удобств.
Объясни зачем тебе этот вариант?

  Ответить  
 
 автор: Trianon   (22.11.2008 в 21:09)   письмо автору
 
   для: Monkey   (22.11.2008 в 19:50)
 

в сессиях невозможно сохранить дескрипторы объектов.
Сами объекты все рвно разрушаются между вызовами.
В частности, соединение, дескриптор которого Вы вытащили из сессионного массива, закрылось с завершением вызова того экземпляра скрипта, который его открыл, и поместил в сессию.

  Ответить  
 
 автор: Monkey   (23.11.2008 в 10:55)   письмо автору
 
   для: Trianon   (22.11.2008 в 21:09)
 

ММ я так понимаю при каждом запросе нужно заново подключаться выбирать базу а потом получить результат, так я понимаю?

  Ответить  
 
 автор: Trianon   (23.11.2008 в 11:08)   письмо автору
 
   для: Monkey   (23.11.2008 в 10:55)
 

При каждом каком запросе? http или sql?
при каждом http - да.
при каждом sql - нет.

  Ответить  
 
 автор: Monkey   (23.11.2008 в 11:34)   письмо автору
 
   для: Trianon   (23.11.2008 в 11:08)
 

Минуточку давайте разберемся!
все запросы идут из http! mysql_select_db и mysql_connect и т.д. это же ведь модули PHP.

Следовательно запросы на коннект нужно делать всегда, передавая функция самое необходимое для ее осуществления! Я правильно понимаю?

Честно я до этого программировал на Delphi 7, рабоатл с SQL при момощи Mysql.dll, решил программу переделать на WEB, принцип там тотже вот только переменные хранятся до закрытия приложения или уничтжения переменной.

  Ответить  
 
 автор: Trianon   (23.11.2008 в 11:38)   письмо автору
 
   для: Monkey   (23.11.2008 в 11:34)
 

Здесь всё точно также.
Только приложение закрывается каждый раз, когда php заканчивает выдавать очередную страницу.
Т.е. в конце обработки http-запроса.
А вовсе не когда пользователь закрывает окно браузера.

  Ответить  
 
 автор: Monkey   (23.11.2008 в 11:49)   письмо автору
 
   для: Trianon   (23.11.2008 в 11:38)
 

Понятно! Спасибо большое будем бараздить пространство дальше :-)

  Ответить  
 
 автор: Monkey   (23.11.2008 в 13:08)   письмо автору
 
   для: Trianon   (23.11.2008 в 11:38)
 

И у меня еще один вопрос!

Немного погодя я проверил метод который мы обсуждали выше и понял одно!

Я беру пример принципа работы PhpMyAdmin.

Новигатор полностью передрал у них (я имею ввиду дизайн frame)

так вот у них левый frame на ссилках имеет всевозможные параметры, база данных, таблица и token с длинным параметром.

Метод GET и POST не умеют передавать массивы а только строчки, не могу же я передавать пароль открытым текстом.

Создатели PhpMyAdmin конечно хорошо постарались и код у них сложный. И разобрать откуда этот проект берет переменную token пока я не понял.
Но знаю точно в отличии от них у меня пароль авторизации а также логин не лежит в отдельном файле. У меняже происходит сверка с SQL.

Ну так вот не могли бы вы подсказать как можно передать правым фреймам нужную информацию. Как на подобие token. Я так понимаю это какойто указатель на глобальную переменную. Я бы честно это бы все дело хранил бы в переменной SESSION только во фреймах сталкиваюсь с ошибками, что сессия уже была открыта.

Скажу честно до глобальных переменных еще не дошел, и есть ли смысл. Не уничтожется ли она при открытии новой страници?

Даже на этом форуме на ссылке ответить есть идентификаторы в торох не хранится мой логин и пароль а только id_post и т.д.

  Ответить  
 
 автор: Monkey   (23.11.2008 в 14:15)   письмо автору
 
   для: Monkey   (23.11.2008 в 13:08)
 

МММ мда я так и думал что самому ковыряться прийдется :-)

  Ответить  
 
 автор: Trianon   (23.11.2008 в 14:23)   письмо автору
 
   для: Monkey   (23.11.2008 в 13:08)
 

>Я беру пример принципа работы PhpMyAdmin.
>так вот у них левый frame на ссилках имеет всевозможные параметры, база данных, таблица и token с длинным параметром.
>Метод GET и POST не умеют передавать массивы а только строчки, не могу же я передавать пароль открытым текстом.
>Но знаю точно в отличии от них у меня пароль авторизации а также логин не лежит в отдельном файле. У меняже происходит сверка с SQL.

>Ну так вот не могли бы вы подсказать как можно передать правым фреймам нужную информацию. Как на подобие token. Я так понимаю это какойто указатель на глобальную переменную.

глобальные переменные не живут между вызовами скриптов.
С некоторой натяжкой можно считать, что так живет лишь массив $_SESSION.

Я бы честно это бы все дело хранил бы в переменной SESSION только во фреймах сталкиваюсь с ошибками, что сессия уже была открыта.

Так не вызывайте session_start() несколько раз.


>Скажу честно до глобальных переменных еще не дошел, и есть ли смысл. Не уничтожется ли она при открытии новой страници?

Она уничтожится по завершении обработки http-запроса.

>Даже на этом форуме на ссылке ответить есть идентификаторы в торох не хранится мой логин и пароль а только id_post и т.д.

На этом форуме логин с паролем гоняются через cookies.

  Ответить  
 
 автор: Monkey   (23.11.2008 в 15:09)   письмо автору
 
   для: Trianon   (23.11.2008 в 14:23)
 

Я не могу понять что ему надо
ВОТ ПЕРВЫЙ ФАЙЛ КОТОРЫЙ РЕШАЕТ КУДА ОТПРАВИТЬ ЛИБО
НА ПОВТОРЫЙ ВВОД ЛОГИНА И ПАРОЛЯ ЛИБО НА НОВИГАТОР
<?php
session_start();
require_once ("./conf/connect.php"); # файл с описанем функции коннект
#$_SESSION['connect'] = в результате обритает вид одномерного массива с данными о коннекте
login,passwd,host,db

@$_SESSION['connect']=SQL_connect($_POST['host'], $_POST['login'],

$_POST['passwd'],$_POST['base']);

if (isset($_SESSION['connect'])){
/*Ага вот этого мы впустим*/
require_once './menu.php';
} else /*Возрощаем наз*/
{ require_once './index.html'; }
?>

А вот описание файла MENU.PHP

<?php

if (isset($_SESSION['connect'])) проверка производился ли коннект
{
echo '<html>';

echo '<frameset cols="250,*">.
<frame src="./left.php" name="menu" scrolling=no border=10> // а вот тут должно произойти действие
<frame src="./menu/doc.php" name="right" scrolling=no border=10> //Этот файл пустой
</frameset>
<nofarme>
</html>';
}
else
{require_once './index.html';} /* коннекта небыло посылаем на ввод логина*/
?>

Как видиш сессия открылась в первом файле при сверке авторизации

А вот и описание файла LEFT.PHP в котором то у меня и происходит ошибка

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\tools\test\left.php:1) in z:\home\localhost\www\tools\test\left.php on line 2

Notice: Undefined index: login in z:\home\localhost\www\tools\test\left.php on line 5

И так листинг LEFT.PHP

<?php
$a=array(
array('Товаров','./menu/goods.php'), //
array('Организации',"./menu/doc.php"),
array('Офисы',''),
array('Отделы',''),
array('Сотрудники',''),
array('Склад',''),
array('Виды передвижения',''),
array('Документы',''),
array('Информация о сети','')
);


echo '<HTML><BODY>';
echo '<br>';
echo "Меню склада";
echo '<br>';
echo '<table>';
$i=0;
while (count($a)<>$i)
{
echo '<tr><td><a href="'.$a[$i][1].'" target="right">'.$a[$i][0].'</a></tr></td>';
$i++;
};

echo '</table></BODY></HTML>';

?>

Прищелчке на ссылку "Товарав" открыватся страница
./menu/goods.php а уж в нем то точно нужно знать что такое SESSION а и менно на этой выдает ошибку

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at z:\home\localhost\www\tools\test\menu\goods.php:1) in z:\home\localhost\www\tools\test\menu\goods.php on line 2
&#65279;Array
Notice: Undefined index: connect in z:\home\localhost\www\tools\test\menu\goods.php on line 6

Листонг самого файла GOODS.php его задача создать select - комбобокс, выборку из базы.

Но выборка так и не происходит в результате что SESSION создать не возможно


<?php
session_start();
require_once ("../conf/addition.php"); // описание функций коннекта, и вывод на экран строк. но до этого дело еще не доходит!

echo '<HTML>
<table><br>';
echo '<tr>';
echo '<td>';

echo '</td>';

echo '</tr>';

echo cb_out($_SESSION['connect'],'type_dev','1',

array('book'),
array('id','name'),
array(array("out_storehouse=",'"n"',"and"),array("indicator=",'"i"',"")),
array(''), array('indicator'));
/*<select name="fontsize" size="1">
<option value="">Font size</option>
<option value="8pt" style="font-size: 8pt"> echhd</option>';
*/


echo ' </table> </HTML>';
?>



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

  Ответить  
 
 автор: Trianon   (23.11.2008 в 15:29)   письмо автору
 
   для: Monkey   (23.11.2008 в 15:09)
 

-

  Ответить  
 
 автор: Monkey   (23.11.2008 в 16:11)   письмо автору
 
   для: Trianon   (23.11.2008 в 15:29)
 

<?php
Исправил ошибку вот таким методом знак @ перед session_start();
@session_start();
require_once ("../conf/addition.php"); // описание функций коннекта, и вывод на экран строк. но до этого дело еще не доходит!

echo '<HTML>
<table><br>';
..........

Выход у меня получился не идеальный! Но другого выхода я на данный момент не вижу.

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

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