21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Milan1236000
Profil
Zdravím,
mám tuhle strukturu:
zakladnistranka.php, v ní require 'x.php';
v x.php <?php echo ('nějaký text ... require 'y.php'; ';?>
v y.php <?php echo ('nějaký text'); ?>
Při načtení stránky se zobrazí, že je chyba v souboru x.php na řádku, kde je require 'y.php';.
Co je tam špatně? Ta samá chyba se zobrazuje i při odstranění echa v y.php nebo při výměně require 'y.php'; za ' . require 'y.php'; . '.
lionel messi
Profil
Milan1236000:
1. Zátvorky okolo reťazcov vypisovaných pomocou echo sú zbytočné, echo je jazyková konštrukcia, nie funkcia.
2. Správna verzia súboru x.php:

<?php
echo 'nějaký text';
require 'y.php';
?>
Keeehi
Profil
Dá se vypisovat i "návratová hodnota" require, pak by tam mezi tím řetězcem a require musela být tečka. Ale předpokládám, že to není to, co ty chceš.

Ještě lionel messi zapomněl zmínit apostrofy které máš v tom kódu taky špatně.
Milan1236000
Profil
lionel messi:
Já právě potřebuji text z y.php vypsat do x.php, které to potom vypíše na stránku. Dobrá, dám to sem přesně tak, jak to mám:

zakladnistranka.php
... <body>... <?php require 'x.php'; ?> </body> ...

x.php
<?php
echo 'text 1' . require 'y.php'; . ' pokračování textu 1';
?>

y.php
<?php
echo 'text 2';
?>

Keeehi:
Kde přesně jsou špatně ty apostrofy?
lionel messi
Profil
Milan1236000:
x.php

<?php
echo 'text 1';
require 'y.php';
echo ' pokračování textu 1';
?>
Milan1236000
Profil
lionel messi:
Tahle varianta mě také napadla, ale je problém, že to mám ještě složitější: x1.php, x2.php, ... A v každém právě jedno y.php. To bych to pak měl ještě složitější než teď: x1_1.php + y.php + x1_2.php, x2_1.php + y.php + x2_2.php, ...
Proč vůbec nefunguje:
<?php
echo 'text 1' . require 'y.php'; . ' pokračování textu 1';
?>
? Mělo by, ne?
Keeehi
Profil
Require funguje zjednodušeně jako nahrazení. Vezme se soubor x.php, v něm se zjistí, že je řádek s require, takže ten řádek se smaže a na jeho místo se vloží celý obsah souboru y.php.

Pro představu:
Soubor x.php
echo "x1";
require "y.php";
echo "x2":

Soubor y.php
echo " y";

Tak se z toho vlastně vytvoří:
echo "x1";
echo "y";
echo "x2";

Milan1236000:
To bych to pak měl ještě složitější než teď: x1_1.php + y.php + x1_2.php, x2_1.php + y.php + x2_2.php, ...
Evidentně na to jdeš že špatné strany a někde ti něco hapruje v návrhu. Když nám řekneš, o co se snažíš místo používání pseudo x a y, tak ti budeme schopni poradit jak se to dá navrhnout lépe.
Milan1236000
Profil
Milan1236000, Keeehi:
Dobře, při nejhorším to tak udělám. Mám to asi takhle:
zakladnistranka.php představuje klasickou stránku.
x.php představuje záhlaví a menu, které se přidá na každou stránku (mám 5 verzí toho menu).
y.php přidá pouze vyhledávač do záhlaví. Schválně jsem to nepřidal přímo do x.php, protože ten vyhledávač budu postupem času hodně upravovat, takže abych to nemusel dělat 5 krát u každého x.php
Keeehi
Profil
Milan1236000:
V tom případě je to jak jsme říkali my. require je samostatný příkaz který se do žádného echa necpe. Protože aby se vypsal jeho obsah, tak to je zaručeno automaticky, takže psát před něj ještě echo je chyba.
Milan1236000
Profil
Ok. Díky za rady oběma.
yFang
Profil
Milan1236000:
Ještě jde udělat tohle:

a.php
<?php
echo 'a' . require 'b.php';

b.php
<?php
return 'b';
Keeehi
Profil
yFangův kód je správný a funkční. Jen ho prosím Milane nikde nepoužívej. Musíš vědět přesně co děláš a proč to tak děláš, jinak ti to přinese jen problémy.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0