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

Форум PHP

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

 

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

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

тема: Передача в функцию значения
 
 автор: Лена   (31.01.2009 в 17:45)   письмо автору
 
 

Проблема такая: Если я делаю глобальной $page_id, запрос ее "не видит". Если $page_id вставляю непосредственно в функцию, то все нормально. Почему?
Другие же переменные, которые я получаю $_GET-методом, передаются (global $id,$offs_out)
И почему я не могу передать $page_id как аргумент функции? Тоже не работает.


<?php
$id 
$_GET['id'] ? intval($_GET['id']) : false;
//$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : false;
$offs_out $_GET['offset'] ? intval($_GET['offset']) : false

function 
offset($mod){
global 
$link,$id,$offs_out;
$page_id $_GET['page_id'] ? intval($_GET['page_id']) : false;

$sql "SELECT * FROM `texts` WHERE `id_mod` = " $mod " AND `page_id` = " $page_id
.....
//работа функции...
}
//вызов функции
offset(11);
?>

  Ответить  
 
 автор: Trianon   (31.01.2009 в 17:52)   письмо автору
 
   для: Лена   (31.01.2009 в 17:45)
 

приведенный текст не иллюстрирует ни один из вопросов.
В нем Вы не делаете $page_id глобальной.
И не пытаетесь передать её как аргумент.

  Ответить  
 
 автор: Лена   (31.01.2009 в 18:02)   письмо автору
 
   для: Trianon   (31.01.2009 в 17:52)
 

>приведенный текст не иллюстрирует
Я показала код, когда все получается.
Иллюстрирую.
Делаем $page_id глобальной:

<?php 
include("configs/dbopen.php"); 
$id $_GET['id'] ? intval($_GET['id']) : false;
$page_id $_GET['page_id'] ? intval($_GET['page_id']) : false;
$offs_out $_GET['offset'] ? intval($_GET['offset']) : false

function 
offset($mod){
global 
$link,$id,$offs_out,$page_id;
$sql "SELECT * FROM `texts` WHERE `id_mod` = " $mod " AND `page_id` = " $page_id
//работа функции
}
//вызов функции
if($id){
offset(11);
}

Не работает. Пишет: Error in SELECT * FROM `texts` WHERE `id_mod` = 11 AND `page_id` = 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 '' at line 1

Если передавать $page_id как аргумент, получилось только что, поняла, в чем ошибка.

  Ответить  
 
 автор: nikita2206   (31.01.2009 в 18:08)   письмо автору
 
   для: Лена   (31.01.2009 в 18:02)
 

попробуйте так:
<?
$sql 
"SELECT * FROM `texts` WHERE `id_mod` = '" $mod "' AND `page_id` = '" $page_id.'\'';

  Ответить  
 
 автор: Trianon   (31.01.2009 в 18:10)   письмо автору
 
   для: Лена   (31.01.2009 в 18:02)
 

>$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : false;

>Не работает. Пишет: Error in SELECT * FROM `texts` WHERE `id_mod` = 11 AND `page_id` = 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 '' at line 1

это результат того, что false преобразуется к пустой строке в случае, когда get-аргумент не задан.
Ни с передачей параметров , ни с управлением областью видимости переменной это никак не связано.
Если Вы хотите по-другому сформировать запрос при отсутствии get-аргумента, то это надо явным образом написать (через условный оператор или условную операцию или еще как-то ... но как-то надо.)

  Ответить  
 
 автор: Лена   (31.01.2009 в 18:36)   письмо автору
 
   для: Trianon   (31.01.2009 в 18:10)
 

Как у меня get-аргумент не задан, если он у меня задан.
Делаю вот так, привожу к числовому типу, если get-аргумент отсутствует:
$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : 0;
Почему до функции значение приходит, а внутри функции пропадает?
Хоть убейте, не пойму.

  Ответить  
 
 автор: Trianon   (31.01.2009 в 19:00)   письмо автору
 
   для: Лена   (31.01.2009 в 18:36)
 

>$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : 0;
>Делаю вот так, привожу к числовому типу, если get-аргумент отсутствует:
к числовому - если присутствует. Если отсутствует - здесь - просто заменяете на нуль.

в таком виде он, само собой вызывать ошибку синтаксиса не будет.
Но и данных запрос, вероятно, тоже никаких не выдаст, поскольку условие в запросе никогда выполнено не будет.
Если, конечно, у Вас нет записей с page_id =0

  Ответить  
 
 автор: Лена   (31.01.2009 в 19:20)   письмо автору
 
   для: Trianon   (31.01.2009 в 19:00)
 

>и данных запрос, вероятно, тоже никаких не выдаст
Выдает, ту же ошибку.
Делаю перед функцией print $page_id - выводится номер страницы. А внутри функции она не видна.

  Ответить  
 
 автор: serjinio   (31.01.2009 в 19:52)   письмо автору
 
   для: Лена   (31.01.2009 в 19:20)
 

А если типа так..
<?
$id 
= isset($_GET['id']) ? intval($_GET['id']) : '';
$page_id = isset($_GET['page_id'])? intval($_GET['page_id']) : '';
$offs_out = isset($_GET['offset']) ? intval($_GET['offset']) : ''

function 
offset($mod,$link,$id,$offs_out,$p_id)
{
$xx=!empty($p_id)? "AND `page_id` = '$_id'" :' '
mysql_query("SELECT * FROM `texts` WHERE `id_mod` = '$mod'  $xx "); 
.....
//работа функции...
}
//вызов функции
offset(11,$link,$id,$off,$page_id);

  Ответить  
 
 автор: Лена   (31.01.2009 в 21:39)   письмо автору
 
   для: serjinio   (31.01.2009 в 19:52)
 

Нет, так не идет. При клике на любую ссылку "висит" один и тот же текст.

  Ответить  
 
 автор: Trianon   (31.01.2009 в 20:40)   письмо автору
 
   для: Лена   (31.01.2009 в 19:20)
 

а строка
$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : 0;
тоже в какой-то функции находится?

  Ответить  
 
 автор: Лена   (31.01.2009 в 21:37)   письмо автору
 
   для: Trianon   (31.01.2009 в 20:40)
 

>тоже в какой-то функции находится?
Нет. В другом скрипте, к которому подключается данный.
Есть content.php - вывод контента.
Там и прописаны вот эти строки(попутный вопрос: может, это можно как-то покороче написать?)

<?php
if (isset($_GET['id'])&&isset($_GET['offset'])&&isset($_GET['page_id'])){
$id $_GET['id'] ? intval($_GET['id']) : false;
$page_id $_GET['page_id'] ? intval($_GET['page_id']) : 0;
$offs_out $_GET['offset'] ? intval($_GET['offset']) : 0
intval($_GET['id']) ? $mode $err 2;
intval($_GET['page_id']) ? $mode $err 2;
intval($_GET['offset']) ? $mode $err 2;
}
?>


В зависимости от режима, подключается определенный файл, в данном случае это ad_content.php:

<?php
if (!empty($err)) header("Location: moduls/errors.php?err=$err");
  else { 
    
    switch (
$mode) {
    case 
: include("moduls/gor_menu_content.php");
        break;
    case 
: include("moduls/advices/ad_content.php");
        break;
                             
//ну и так дальше... 

В ad_content.php и включается файл с функцией:

<?php
include("offset.php");
if(
$id){
offset(11,$id,$offs_out);
}

В offset.php определение и тело функции.

  Ответить  
 
 автор: sim5   (01.02.2009 в 04:07)   письмо автору
 
   для: Лена   (31.01.2009 в 21:37)
 

if (isset($_GET['id'])&&isset($_GET['offset'])&&isset($_GET['page_id']))
для
$id = $_GET['id'] ? intval($_GET['id']) : false;
$page_id = $_GET['page_id'] ? intval($_GET['page_id']) : 0;
$offs_out = $_GET['offset'] ? intval($_GET['offset']) : 0;
странная запись.
Если эти три переменных определяются одним запросом, то какая-то из этих переменных является определяющей. Инициализация переменных $id, $page_id, $offs_out есть, и если определяющей является $id, то:
if($id) {
действия
}
Вот это вообще не понятное занятие:
intval($_GET['id']) ? $mode = 2 : $err = 2;
intval($_GET['page_id']) ? $mode = 2 : $err = 2;
intval($_GET['offset']) ? $mode = 2 : $err = 2;

То, что вы в конечном итоге вместо значения получаете "пусто" в MySQL-запросе, может связано с тем, что подключение файла происходит до того, как переменная была определена.

  Ответить  
 
 автор: nikita2206   (31.01.2009 в 18:00)   письмо автору
 
   для: Лена   (31.01.2009 в 17:45)
 

можно использовать массив $GLOBALS

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

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