Autor Zpráva
Edy
Profil *
Dobrý den,
zkouším si udělat web, jehož obsah se načítá z meta.php. Pomocí příkazu echo načtu title z meta.php, který se skládá ze dvou slov. V každé stránce chci mít maličký formulář na dotazy k té konkrétní stránce. Tento formulář vkládám do stránky pomoci include, protože je pro všechny stránky stejný. Když ale chci využít hodnoty title jako součást skrytého pole(abych věděl, kde dotyčný vyplnil formulář) vyplní se mi pouze první slovo. Zkoušel jsem nastavit size na 30, ale nepomohlo to. Nepomohlo ani to, že bych nevyužíval hidden, ale normální textové pole s definovanou hodnotou - vždy se vyplní pouze první slovo, ale když název zobrazím pomocí echo je dvouslovný.
mimochodec
Profil
Vůbec ti nerozumím, ale myslím, že problém je v tomto:
input ... value=dvě slova ...

Použij uvozovky
input ... value="dvě slova" ...
Edy
Profil *
index :
<?PHP include "meta.php"; ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <title><?PHP echo "$title"; ?></title>
  </head>
  <body>
<?php 
require $id.".php";
include "formular.php"; 
include "paticka.php"; 
?>
  </body>
</html>
ve formuláři formular.php
<form action="mail.php" method="post">

<?PHP echo "$nadpis"; ?>

<input type="text" name="předmět" value= <?PHP echo "$nadpis"; ?>>
<input type="submit" value="Odeslat" />
<input type="reset" />

</form> 

a výsledek :
title = EcoSorb GXB
hodnota předmět = EcoSorb
mimochodec
Profil
Edy:
Takže jsem to trefil:

<input type="text" name="předmět" value= "<?PHP echo $nadpis; ?>">

Kromě toho:
- nepoužívej v proměnných a id a name diakritiku (viz tvůj "předmět")
- nauč se používat uvozovky:

echo "$title";  // nesmysl, i když to funguje
echo "něco".$title  ;  // smysl
echo $title  ;  // smysl
Edy
Profil *
Děkuji za radu, budu si muset opravdu dát bacha na uvozovky:(
jenikkozak
Profil
mimochodec:
Proč by zápis echo "$title"; měl být nesmysl? Není důvod, aby nebylo pochopeno, že to, co je obaleno uvozovkami a začíná znakem dolaru, je proměnnou uvnitř řetězce. Můžeš uvést příklad (klidně dva či tři), proč by se mělo jednat o nesmysl?
Ugo
Profil
jenikkozak:
souhlasím s tím že je to hnus, racionální příklad ti dát nemůže asi nikdo protože to funguje, někdy to je dokonce nejlepší řešení (když je třeba mít z jinýho typu string..i když já to raději přetypuju přes (string)), ale nepodloženě se domnívám že to bude pomalejší a čitelnost je rozhodně horší, bez uvozovek je to jasnější a čistší. Když na to budeš moc spoléhat tak ti to může udělat i problémy se špatně napsanym polem nebo volánim na objektu, minimálně označovače pak často ztrácej šajn, je lepší spojovat a nebo klidně čárkovat v případě echa.
mimochodec
Profil
jenikkozak:
Jsem toho názoru, že beztečkové spojování řetězců a proměnných kód znepřehledňuje a když to používá začátečník, který na spojování tečkami nutně dřív nebo později někde narazí, tak v tom musí mít nutně chaos. Být po mém, nefungovalo by to bez teček vůbec. To je ale můj názor, samozřejmě.

Není důvod, aby nebylo pochopeno, že to, co je obaleno uvozovkami a začíná znakem dolaru, je proměnnou uvnitř řetězce.
Mám ti tady v diskusi najít dvacet případů, kdy to pochopeno nebylo? Účel je mimo mé chápání. Jestli to je k něčemu jinému, než zmatení, budu rád za vysvětlení.
jenikkozak
Profil
mimochodec:
Mám ti tady v diskusi najít dvacet případů, kdy to pochopeno nebylo?
I kdybys jich našel dvacet jedna, neznamená to, že ten způsob zápisu (použití proměnné uvnitř uvozovek) je nesmyslný. To, že někdo při hraní si s PHP zapomene na základy HTML (a sice že hodnoty atributů obsahující mezeru musejí být obaleny uvozovkami nebo apostrofy), neznamená, že jde o zásadní chybu PHP, jejíž využívání by bylo nesmyslné.
Neříkám, že použití proměnných jako součástí řetězců je přehlednější, neříkám, je že rychlejší (rozdíly by stejně byly zanedbatelné). (Čistota a přehlednost závisí stejně jen na subjektivním pocitu.) Tvrdím jen, že tento zápis není chybný či nesmyslný.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0