echo variable?

nbacool2

Registered
Здравейте. Когато имам

file.php

<?php
$var="hello";
$var .= ", whats up?";
echo $var;
?>

и

index.php

<html>
<body>
<div>
<?php include "file.php"; ?>
</div
</body>
</html>

Всичко е ОК и както трябва, но когато имам

file.php

<?php
$var="hello";
$var .= ", whats up?";
?>

и

index.php
<?php
include "file.php";
?>

<html>
<body>
<div>
<?php echo $var; ?>
</div>
</body>
</html>


не дава грешки, но и нищо не визуализира?

***************************************************

още едно нещо

защо ако имам

file2.php
<?php
echo "Better, faster, stronger";
?>

и

index.php

<html>
<body>
<div>
съдържание
съдържание
съдържание
съдържание
</div>
<div>
<?php include "file2.php"; ?>
</div>



и след като го изпълня вместо да инклудва файл2, където му е мястото, го изобразява веднага - най-отгоре в ляво, т.е преди всичко останало.
 
Нормално, променливата е валидна само в файла който инклудваш. Ако започнеш да използваш ООП можеш да направиш товам което искаш, но това е за по напреднали и иска четене. ООП му е майката, иначе само си губиш времето ( лично мнение, базирано на опита ми с доста програмни езици)
 
Ами ако я декларирам като global $var; ?

и също ако може да погледнеш другия случай.

А и имам основни познания по ООП, но досега не съм ги прилагал. Ще дадеш ли пример с него как може да стане?
 
Ако е декларирана като глобална мисля, че ще стане.
Ето ти пример (пиша псевдо код)

Код:
# Person.class.php

class Person{
# Идялния варянт ще са private и ще имаш гетъри и сетъри
  public $name = ""
  public $age = 0

# Инициализираш си променливите
  function __construct($p_name, $p_age) {
       $this->$name = $p_name;
       $this->$age = $p_age;
   }
}


Код:
# person.php

$person = new Person("Ivan Ivanov", 32);
print $person->name.' is '.$person->age;

Това е само да добиеш представа, ак си добре с английския виж това:
http://www.killerphp.com/tutorials/object-oriented-php/
 
Току-що пробвах с global и пак не стана. Иначе предпочитам книгите пред клиповете за обучение. Ще започвам beginning PHP 5.3, въпреки че съм чел и PHP5: професионално програмиране :D
 
animatora каза:
Ако е декларирана като глобална мисля, че ще стане.
Ето ти пример (пиша псевдо код)

Код:
# Person.class.php

class Person{
# Идялния варянт ще са private и ще имаш гетъри и сетъри
  public $name = ""
  public $age = 0

# Инициализираш си променливите
  function __construct($p_name, $p_age) {
       $this->$name = $p_name;
       $this->$age = $p_age;
   }
}


Код:
# person.php

$person = new Person("Ivan Ivanov", 32);
print $person->name.' is '.$person->age;

Това е само да добиеш представа, ак си добре с английския виж това:
http://www.killerphp.com/tutorials/object-oriented-php/

Ако трябва да смятам опита ти с ООП, няма да е много.

PHP:
$this->$name = $p_name;
$this->$age = $p_age;

това трябва да е така

PHP:
$this->name = $p_name;
$this->age = $p_age;

макар че не само това ти е грешка. Кажи ми какъв е смисъла да подаваш още отначало празен низ ( "|" ) ? Да не говорим, че си изтървал да затвориш реда с точка и запетая ( ; ), но да предположим, че това е станало в бързината.



колкото до автора пробвай нещо подобно...

PHP:
if(isset($GLOBALS['var'])){
        echo $GLOBALS['var'];
}

и да ти кажа не си личи да си чел книгата PHP 5: Професионално програмиране + това, то не става само с четене в тази сфера, иска се практика(както не само в тази сфера де).
 
На мен ми трябват обяснения и решения, а не някакви лични мнения за нещо си. Защото това е процедурен, а не ООП код. А и пак не се получава с твоя вариант.
 
Проблема е изцяло в теб или да кажем в сървъра ти. Какъв сървър използваш, защото при мен няма проблем, а и по принцип не трябва да има.
Това се отнася и за двата случая! :)
 
В процедурен код, като направиш include променливите не важат в главния файл ? И му препоръчвате да почне директно OOP !? Айде обратно в първи клас :)

Имаш file1.php, include-ваш го във file2.php
Самия include го разбирай като copy/paste на сорса на единия файл в другия. Няма причина да не работи, ако го правиш правилно.

Но да му препоръчвате директно OOP, заради един include е меко казано смешно :) (нищо лично)
 
Като е процедурен код променливите важат само в инклуднатия файл?! :D $GLOBALS? :D Предполагам, че знаеш на кой адрес е документацията http://bg2.php.net/manual/en/function.include.php

Нали това е основната идея на include. Да се прехвърлят променливи 0.o Ясно, че знаете ООП, ама е странно да го карате да го учи по тая причина :D
 
idevbg каза:
Като е процедурен код променливите важат само в инклуднатия файл?! :D $GLOBALS? :D Предполагам, че знаеш на кой адрес е документацията http://bg2.php.net/manual/en/function.include.php

Нали това е основната идея на include. Да се прехвърлят променливи 0.o Ясно, че знаете ООП, ама е странно да го карате да го учи по тая причина :D

Да, $GLOBALS! Не се ли замисляш, че щом така не му изважда променливата, значи конфигурацията на сървъра му нещо куца.
А колкото до ООП, аз на него не съм му предлагал, просто поправих @аниматора.
 
When a file is included, the code it contains inherits the variable scope of the line on which the include occurs. Any variables available at that line in the calling file will be available within the called file, from that point forward. However, all functions and classes defined in the included file have the global scope.
ДА :!: . От къде ли идва грешката при мен???
 
Нещо не ни даваш като код. Пробва ли си примерите? В смисъл... направи си 2 файла, копирай си примерите вътре и пробвай. И включи всички видове error reporting
 
Аз всички примери ги пробвах в моя скрипт и не се получаваше, но преди малко реших да го дам моя код и смалих скрипта до съществените неща - само съдържанието и структурата за променливата, която трябва да се визуализира и се оказа, че този път съдържанието си излиза както трябва??? А като е цялото съдържание не се.
 
Ето, че си ни спестил информация значи. Отидоха 2 страници, защото автора не ни е казал всичко.

Та, както и да е... вече сам можеш да се досетиш, че нещо в кода ти не е наред. Или го потърси сам проблема, или пусни цялото съдържание, за да открием проблема ти от къде идва.
 
login.php

Код:
<?php

if (isset($_SESSION["logged"])) {
if ($_SESSION["logged"] == 1) {
    $login .= "Вече сте влезли с потребителското име " . $_SESSION["username"] . ". Върнете се в началото";
    exit();
}
}
elseif (isset($_POST['submit'])) {
    require_once SITE . "helpers/db_connect.php";

    $username2 = trim($_POST["username"]);
    $password2 = $_POST["password"];
    $remember_user = false;

    if ($password2 == "") {
        $login .= "Не е въведена парола";
        exit();
    }
    if ($username2 == "") {
        $login .= "Не е въведено потребителско име";
        exit();
    }
    if (isset($_POST["remember_user"])) {
    $remember_user = true;
    }

    $sql = "SELECT user_name, user_password FROM users WHERE user_name = '" . $username2 . "' AND user_password = '" . $password2 . "'";

    $result = mysql_query($sql) or die(mysql_error());

    if (mysql_num_rows($result ) !=0) {

    $row = mysql_fetch_assoc($result) or die(mysql_error());
    $_SESSION["logged"] = 1;
    $username3 = $row["user_name"];
    $password3 = $row["user_password"];
    $_SESSION['username'] = $username3;
    $_SESSION['password'] = $password3;

        if ($remember_user) {
            $cookie_user = $username3;
            $cookie_password = $password3;
            setcookie("Cookie_name", $cookie_user, $cookie_password, time()+60*60*24*30);
            $_COOKIE["username"] = $cookie_user;
            $_COOKIE["password"] = $cookie_password;
         }
    else {
    $_COOKIE[] = null;
    }
    $login .= "Влязохте успешно. ";
    
    }
    else {
        $login .= "Няма такъв потребител";
    }
   
}
else {
$login .= "<form name=\"memberLogin\" action='http://" . $_SERVER['HTTP_HOST'] . "/index.php?page=login' method=\"POST\">";
$login .= "<input type=\"text\" name=\"username\" class=\"txtBox\"  />";
$login .= "<input type=\"password\" name=\"password\" class=\"txtBox\"  />";
$login .= "<a href=\"" . $_SERVER['HTTP_HOST'] . "/index.php?page=register\">Регистрация</a>";
$login .= "<input type=\"submit\" name=\"submit\" value=\"\" class=\"login\" />";
$login .= "<br class=\"spacer\" />";
$login .= "</form>";
}

?>


index.php


<?php
Код:
include_once SITE . "helpers/configuration.php";
require_once SITE . "helpers/db_connect.php";
include_once SITE . "modules/bottom_one.php";
include_once SITE . "modules/bottom_two.php";
include_once SITE . "modules/bottom_three.php";
 include_once SITE . "modules/login.php";

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php echo SITE_NAME; ?></title>
<link href="templates/individual/css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
<?php
if (isset($_GET['page'])) {
if ($page == "add_article") {
    echo $head_add_article;
}
elseif ($page == "article_action") {
    echo $head_article_action;
}
}
?>
</head>
<body>
	
	<div id="top">
  <a href="<?php echo $_SERVER['HTTP_HOST'] . "/index.php";?>"><img src="<?php echo "http://" . $_SERVER['HTTP_HOST'] . "/templates/individual/images/logo.png";?>" alt="individual" width="286" height="66" border="0" /></a>
  </div>
  <div id='menu' style="margin: 20px 0 0 0;">
  <ul>
  <?php
                include_once SITE . "modules/navmenu.php";
  ?>
  </ul>
  </div>
	
	
	
	
	<div id="body">
	
  
  <div id="left">
   <div id='content' >
    <?php 
    if (isset($_GET['page'])) {
switch ($page) {
    case "blog" :
       include_once SITE . "modules/blog.php";
       break;
   
   case "login" :
       include_once SITE . "components/login.php";
       break;
   case "confirm" :
       include_once SITE . "components/confirm.php";
       break;
   default:
       include_once SITE . "components/home.php";
       break; 
}
}
else {
     include_once SITE . "components/home.php";
}
    ?>
   </div>
  </div>
   
    
	<div id="right">
	<?php echo $login; ?>
        <p class="bottom2"></p>
	<h2 class="solution">Категории:</h2>
	<ul>
	
	</ul>
	<br class="spacer" />
	</div>
	
	
	<div id="bodyBottom">
	<ul>
	<li class="one"><?php echo $bottom_one_name; echo $bottom_one_content ?></li>
	<li class="two"><?php echo $bottom_two_name; echo $bottom_two_content ?></li>
	<li class="three"><?php echo $bottom_three_name; echo $bottom_three_content ?></li>
	</ul>
	<br class="spacer" />
	</div>
	
	<br class="spacer" />
	</div>
	
	
	<div id="footerMain">
	<div id="footer">
	<ul>
	 <?php
                include_once SITE . "modules/footer.php";
  ?>
	</ul>
	<p class="copyright"><?php include_once SITE . "modules/copyright.php"; ?></p>
	<a href="http://validator.w3.org/check?uri=referer" target="_blank" class="xht"></a>
	<a href="http://jigsaw.w3.org/css-validator/check/referer" target="_blank" class="cs"></a>
	<p class="design">Designed By : <a href="http://www.templateworld.com/" target="_blank" class="link">Template World</a></p>
	</div>
	</div>
	
</body>
</html>

db_connect.php

Код:
<?php
require_once SITE . 'configuration.php';
$connect = mysql_connect(DB_HOST, DB_USER, DB_USR_PASSWORD) or die(mysql_error());

mysql_select_db(DB_NAME);
?>
 
Боже, кой ти е писал кода бе човек.

1. Защо след всяка проверка даваш exit(). Не забравяй, че ти го инклъдваш този файл в index.php, и когато една от проверките се обади ще прекъсне кода ти ОТТАМ нататък, което ще рече, че и в index.php кода ти под include login.php ще изчезне.

2. $_COOKIE["password"] = $cookie_password; защо добавяш паролата в бисквитка и преди това в сесия? Напълно незащитено. Така или иначе я взимаш от базата данни, няма смисъл да я слагаш в сесия или бисквитка. Едно, че е безсмислено, друго, че е опасно да слагаш тази информация в тези методи.

3. Видях, че присвояваш по следния начин $login .= "...". Защо използваш .= след като преди това не си дефинирал променливата.

4. Нещп бъркаш параметрите на setcookie(). Третия параметър не е за да подадеш паролата. Третия параметър е за времето, което в случая си го сложил като 4-ти параметър на функцията.

5. Защо $var == "" условния оператор, като си има функция !isset() или по-скоро empty().

6. В квадратните скоби ($_COOKIE[..]) пиши имената не с двойни кавички, а само с апострофи.

7. $_COOKIE[] = null; какво е това ?

8. Формата така не ти ли изглежда сега грозно. Защо не прекъснеш PHP, да напишеш формата с чист HTML и пак да си отвориш PHP-то.

9(може би спада към останалите точки). Защо просто не инклъднеш login.php на мястото, където искаш в index.php вместо да присвояваш всичко на променлива. Ползвай си директно print или echo формата, а за грешките можеш да ги събираш в променлива, но ги разделяй с нов ред, когато ги извеждаш на екрана.

10. db_connect.php го викаш няколко пъти в различни файлове, както и configuration.php

Сигурно има и други неща, по които мога да дам коментар, но не ми се гледа усърдно целия код. Минах набързо с погледа и видях, че като цяло подхода ти е доста грешен, объркващ и сложен. Има далеч по-лесни варианти за това.

Някой ден може да пусна някой урок за това как да си подреждаме кода, как да го правим по-удобен за работа, как да си разпределим папките и т.н.

Това е от мен сега. Та общо взето има доста неща заради, които да ти прави този проблем.
 
Аз съм писал кода.

1. Да така е, но в общия случай, в какъвто съм тествал скрипта, си стига докрая и на променливата й се присвоява стойност и скрипта продължава да се изпълнява.. А и понякога го ползвам, защото иначе трябва да го направя с много if(else) конструкции и става доста трудно за проследяване.
2., 4., 7. - Да знам, че не е правилен синтаксиса и кода и всъщност ще го махна, защото не ми трябва.
3. Това не е задължително просто при настройка на error reporting-a на E ALL ще ми изкарва Notice, но не е фатално. А и съм го сложил ако от друг скрипт също има същата променлива и й е присвоена стойност.
5. Въпрос на избор. Аз си ползвам или "", или isset()

6 Защо?

8. Това е "прототип" и в момента това не ми е на първо място. Може би ще използвам HEREDOC

9 Защото така става по-четлив кода, ако всички външни файлове са ти дадени на едно място, а и + това можеш да променяш или да добавяш в промеливите и след това където искаш и на няколко места да ги извикаш.

10. Ползвам include_once и require_once , така че мисля, че това не е съществено.

И все пак нещо по конкретния проблем?
 
Когато изготвяш сайта, задължително си пусни да ти се виждат всички грешки.

Ще продължа и аз с въпросите, за да може всичко да се изясни...


В index.php имаш променлива $page, която не виждам от къде идва. Първо проверяваш дали е сетнат $_GET['page'] , а след това проверяваш дали $page == "..." . От къде идва това $page ?

И другото... ти кой login.php си постнал? От modules или от components ?

И трето... ти как си пишеш кода. Пишеш по един начин и след това го променяш напълно? Интересен метод, но щом си го разбираш - добре :)
 

Back
Горе