Autor Zpráva
Joan
Profil
Hezký den,
měla bych 2 otázky, ta druhá je spíš záhada než otázka...

1) mám formulář, který normálně funguje, ovšem Opera & všechny IE mi stabilně zobrazují špatně jeden prvek, proto díky své dřívější zkušenosti s velkou citlivostí Opery a IE na špatně zapsané nebo chybějící tagy v HTML mě napadlo kouknout do zdrojáku zpracujícího scriptu - a opravdu!
Stačí si zobrazit zdrojový kód této dočasné stránky a hned praští do očí 4 varovně červeně svítící inputy, ve kterých se nachází vložený PHP kód s echem.
Mám silný dojem, že za špatné zobrazení mého prvku může právě špatně napsaný input a prosím o radu, jak to opravit. Děkuji!

2) mám webový formulář na samostatné stránce a zpracující script na druhé. Po odeslání přesměrovávám pomocí header location zpět na stránku s formulářem. Potud nic vyjímečného, šlape to jak má. Ovšem co mi hlava nebere je, že výchozí stránka s formulářem mi ukazuje (v ladicí liště FF) Režim standardů a skutečně kódování mám pro tento režim odpovídající, ovšem po odeslání emailu, potažmo po přesměrování zpět na výchozí stránku s formulářem, se tato najednou zničehonic zobrazuje v Režimu zpětné kompatibility! Když poté kliknu na F5, adresní řádek se ani o chloupek nezmění, ale Režim je najednou zase standardní. A prvky na stránce se samozřejmě před a po kliku na F5 zobrazují trochu odlišně.
Můžete mi někdo prosím vysvětlit, jak může mít jedna a TATÁŽ STRÁNKA režim zobrazování jednou takový, podruhé makový? A především, jak to opravit na standard?
Moc děkuji předem.
panther
Profil
Joan:
ad1)
<input <?php if(!empty($chyba[2])) echo "input style='background-color: #ffcc99;'" ?> type="text" size=10 name="spam" value="...">
V případě, že bude $chyba[2] neprázdné, vypíše ti to <input input ...>. Ten v té podmínce smaž, nech jen ten první. Zároveň ti tam chybí mezera před typem, resp. za vloženým atributem style.
AM_
Profil
No, problém bych hledal především v tom, že ten server vůbec PHP nezpracuje! ve zdrojovém kódu stránky v prohlížeči už se žádné PHP objevit nemá.
Pokud jsi to dělal úmyslně, abychom viděli zdrojový kód stránky, pak je lepší využít např. http://pastebin.com a vedle odkaz na živou ukázku, jak to vypadá, když se PHP zpracovává.
Joan
Profil
panther:
Děkuji za snahu, ale bohužel ani toto můj problém neřeší...
Slovo "input" před style jsem vymazala, přidala mezeru ale nic se nezměnilo, inputy stále svítí červeně, navíc u checkboxu je červený celý úsek
<input type="checkbox" name="kopie" id="checked"
a to nevím, jak opravit. Zdroják přestane zobrazovat červené úseky v případě, že se v inputu nenachází žádný znak "<" nebo ">" ale kód <input> samozřejmě zase nefunguje.

Proč to tak usilovně řeším:
oznámení o odeslání se mi má zobrazovat současně s vloženou animací (animace.gif je v CSS vložena do dolního paddingu h3, kteréžto vypisuje oznámení o odeslání.
Ve Firefoxu 3 je vše podle mého přání (sice se z nějakého důvodu smrskne horní vodorovné menu na menší šířku, ale to není podstatné)



a zobrazí se VEDLE FORMULÁŘE.

Ovšem Operu ruku v ruce s IE neumím ke stejnému chování donutit, animace se neustále zobrazuje NAD ZÁHLAVÍM a to se mi vůbec nelíbí:



Formulář plave vlevo, animace vpravo, nic složitého. Přesto nespolupracuje.
Na můj formulář je možné kouknout a vyzkoušet, kdyby tak náhodou někdo přišel na důvod špatného zobrazení animace v Opeře & IE, byla bych mu velmi vděčná! To je totiž to poslední, co mi brání "vypustit" formulář do světa...
Díky předem!
Joan
Profil
AM:
Přesně tak, schválně jsem kód php převedla do html, aby byl zobrazitelný, jinak to neumím. Na Tvůj odkaz kouknu, díky!
panther
Profil
Joan:
ale nic se nezměnilo, inputy stále svítí červeně
protože pokud se nezpracuje PHP, nemají tam jeho počáteční a koncové značky co dělat. Podstatné je výsledné HTML, tedy to, které vyleze se zpracovaným PHP - odkaz na web ve [#4]. Tam je vše v pořádku, chybu nevidím.

Jen tak na okraj. Hodnota atributu „for“ v <label> se odkazuje na ID objektu, nikoliv na jeho name. Přidej ke každému inputu ještě atribut id se stejnou hodnotou jako name.
Joan
Profil
panther:
pokud se nezpracuje PHP, nemají tam jeho počáteční a koncové značky co dělat
Áá, toto mi nedošlo.
Rozumím-li tomu správně, tak s "name" pracuje php, na "id" odkazuje html. Taky se mohli dohodnout, aby stačilo jen jedno :-)

Opravila jsem, ale na zobrazení animace to vliv zase nemá. Chytám se každé naděje a jsem upřímně zvědavá, v čem je zakopaný pes v špatném zobrazení animace
Big_G
Profil
Nevím,jestli je tomu H3 někde definovaná šířka. Já ji tam nenašel.
Mimochodem, to CSS je hrůza. Spousta naprosto stejných definic. Zbytečná data na transfer.Chtělo by to ty definice sjednotit.
Možná by pomohlo hodit to spíš do <div>.

Co se týče id a name. Tak name je název vstupního prvku. Data z tohoto prvku jsou uložena v proměnné právě s tímto jménem. Respektive v PHP je to $_POST['atribut_name'] nebo $_GET['atribut_name'].
Na stránce může být více formulářů a v každém z nich klidně prvek se stejným name. Nikdy by ale na stránce neměly být dva či více jakýchkoliv prvků (nejen formulářových) se stejným ID.

V JS bych raději používal document.getElementById('name').value místo webový.name.value
panther
Profil
Big_G:
máš pravdu, že CSS je trochu ukecané, nicméně tímto „Možná by pomohlo hodit to spíš do <div>“ bylo myšleno co? Snad bys Joan nedoporučil ten web na<dív>at. Joan má krásné, relativně čisté HTML, tak sem nepleť tahle moudra.

Joan:
Rozumím-li tomu správně, tak s "name" pracuje php, na "id" odkazuje html.
ano, chápeš naprosto správně. Kromě HTML s ID pracuje i JS.

Opravila jsem, ale na zobrazení animace to vliv zase nemá.
ať dělám, co dělám, animaci u formuláře nevidím... Kdepak má být?
Joan
Profil
Big_G:
V JS bych raději používal document.getElementById('name').value místo webový.name.value
Tvoje řešení je 2x delší než moje, v čem spočívá jeho výhoda? (dobu učení se Javascriptu počítám zatím na hodiny...)

panther:
Joan má krásné, relativně čisté HTML...
teda, ani nevíš, jak mě to potěšilo, snažím se, seč můžu :-)
Ta animace se totiž zobrazuje jen a pouze po úspěšném odeslání. Když už mám na titulní stránce webu pod odkazem na formulář obrázek Zlatky se zavináčem v "puse", tak stejnou myšlenku jsem použila i při oznámení o odeslání formuláře. Však formulář vyzkoušej - už mi aspoň jedno "bleble" na mail došlo :-)
panther
Profil
Joan:
teda, ani nevíš, jak mě to potěšilo, snažím se, seč můžu :-)
za tu krátkou dobu, co jsem tě tu začal registrovat, děláš - oproti ostatním - pokroky.

K té animaci, už jsem jí konečně viděl (zkoušel jsem ve dvou prohlížečích, tak se omlouvám za více zpráv). Problém je v tom, že se ti animace vykresluje na začátek kódu, tedy před všechno. Můžeš přinutit, aby se vypisovala na příslušné místo v kódu, zároveň bych se nebál dát jí v tomto případě absolutní pozici.
Joan
Profil
Mě jen zarazilo, že Firefox vykresloval hned správně a Opera spolu s IE špatně. Jak ti dva zobrazují svorně shodně, už mám díky dřívější zkušenosti (zapomenutá ostrá závorka u tagu) hned podezření, že jsem někde něco zapomněla.
No to je fakt, vždyť já mám napřed script, uvnitř nějž je nakódováno zobrazení animace a až potom formulář kvůli odesílání hlaviček. Takže absolutním pozicováním to přebiju, díky za tip a měj se hezky :-)
AM_
Profil
Joan:
hned podezření, že jsem někde něco zapomněla.

V čem HTML píšeš? pořiď si nějaký editor se zvýrazněním syntaxe (od jednoduchých jako PSPad po složité IDE jako Netbeans), tam z obarvení hned vidíš, kde je něco špatně.
Joan
Profil
AM_:
Píšu v PSPadu už od prvopočátku a na tu zmiňovanou chybějící ostrou ZÁVORKU na ukončení tagu mě PSPad neupozorní, alespoň netuším, kde konkrétně toto nastavit. Syntaxi zvýrazněnou mám.
Big_G:
Spousta naprosto stejných definic...
Pořád přemýšlím, co máš na mysli a napadá mě snad jen že např. záhlaví mám definováno pro každou stránku zvlášť a že je jich hodně! Což bych samosebou nemusela, pokud bych neměla v budoucnosti v plánu do každého dosud jednobarevného záhlaví vložit obsah složený ze tří obrázků k tématu stránky, jako mám např. u Akcí a fotogalerií 2008 (= proč má den jen 24hodin?)
panther:
Tak absolutní pozicování zabralo! Jen jsem přišla při tom na věci, které jsem dřív nepostřehla (zatím testuji na localhostu ve WAMPu):

- Firefox 3 bezkonkurenčně zobrazuje můj vývor nejlíp. Nic nemění, po F5 pouze zmizí info o odeslání
- Opera 10.10 po odeslání znatelně zvětší písmo , což zřetelně vidím např. na horním zeleném záložkovém menu, kdy je najednou přes 2 řádky a pravý okraj textarea se hoodně zvětší. Tím pádem animace mi ubíhá dost doprava. Po refresh stránky přes F5 se vše vrátí k "normálu" . Po posunu v okně prohlížeče dolů (aby celý prvek s animací zmizel z dohledu) a zpátky nahoru se animace kupodivu znova zobrazí. Vím, že Opera někdy až nepříjemně cachuje - souvisí to s tím?
- IE6 po odeslání výrazně zvětší písmo a taky pravý okraj textarea a zelené záhlaví je najednou nalepené na horním okraji okna
- IE7 dtto IE6 a navíc pod patičkou obrovský spodní okraj, přestože svislý jezdec je k dispozici - toto netuším proč dělá.

Můj závěr je ten, že všechny testované prohlížeče (IE8 vyzkouším až doma na PC s netem) vyjma FF3 zvětšují po odeslání písmo formuláře do té míry, že mi odsunou zobrazení animace nepříjemně hodně doprava a vytvoří abnormálně velký pravý padding u formuláře. Navíc FF mi ukazuje, že po odeslání je stránka překvapivě v Režimu zpětné kompatibility, přestože je kódována pro Režim standardů a po refresh F5 je najednou zase zpátky v Režimu standardů. Chytám se myšlenky, že právě tato pro mě zatím nevysvětlitelná změna režimu má za následek zvětšování písma na stránce a poněkud rozhození layoutu.

Kdo má chuť a čas, klidně může testovat můj formulář, vůbec mi nevadí více příchozích mailů typu "bleble" pokud pomohou rozlousknout, proč se tak náhle mění Režim stránky.
Díky předem za nápady!
panther
Profil
Joan:
Pořád přemýšlím, co máš na mysli
namátkově tento kus kódu
#menu a#a:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 66px;}
#menu a#b:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 133px;}
#menu a#c:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 129px;}
#menu a#d:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 266px;}
#menu a#e:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 150px;}
#menu a#f:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 203px;}
jde zkrátit na
#menu a:hover img {position: absolute; top: 240px; left: 25px; width: 150px; height: 66px;}
#menu a#b:hover img {height: 133px;}
#menu a#c:hover img {height: 129px;}
#menu a#d:hover img {height: 266px;}
#menu a#e:hover img {height: 150px;}
#menu a#f:hover img {height: 203px;}
a tak dále.

Opera 10.10 po odeslání znatelně zvětší písmo
protože je ta animace před doctypem. Vypiš jí někam do body, absolutní pozici jí nech, ať zůstane na svém místě.

což zřetelně vidím např. na horním zeleném záložkovém menu, kdy je najednou přes 2 řádky
asi tě nepříjemně překvapím, ale já mám menu přes dva řádky i v normálním stavu před odesláním (FF 3.6.6, tuším ten nejnovější)
Joan
Profil
Jo ták, už chápu, díky, opravím si to.

protože je ta animace před doctypem. Vypiš jí někam do body...
Přiznám se, že teď nevím, jak to lze provést: prvek h3 s animací vypisuji echem pomocí
$_SESSION["zprava"]= "<h3 id='anim'>Zpráva byla úspěšně odeslána</h3>";

a toto přece nemůžu umístit mimo script, abych to dostala do <body>?
A pomocí CSS nejde přesouvat prvky.
Jinak už mi svítá: protože animace není za Doctype, tak se chová jako v quirku tj. jinak než potřebuji. A to je to, co mi rozsypává layout a mění Režim, že?
Prosím, poraď mi ještě, jak to vypsat do <body> , díky moc :-)
panther
Profil
Joan:
a toto přece nemůžu umístit mimo script, abych to dostala do <body>?
PHP můžeš startovat kdekoliv, klidně několikrát.
<?php //zpracovani formulare ?>
<!DOCTYPE>
<head>...</head>
<body><?php echo $_SESSION['zprava ?> dalsi obsah stranky</body>


A to je to, co mi rozsypává layout a mění Režim, že?
tak tak.
Joan
Profil
Ahááá :-)
Díky Ti moc, to mi už bude stačit!
Joan
Profil
Tak tedy, ehm, i když jsem princip pochopila, tak ani poněkolika hodinách se mi nepodařilo rozchodit zobrazování animace v těle body...

Dospěla jsem mnoha pokusy k tomuto kódu (nepodstatné vynecháno či zkráceno), u nějž jsem si dělala plané naděje, že už by to konečně mohlo šlapat:

<?php
session_start();
$_SESSION["jeden"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána</h3>";
$_SESSION["dva"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána<br />Zpráva byla odeslána i na Vaši adresu</h3>";
?>
...
<?php
if ($_POST["poslano"])
//kontrola vsech vlozenych udaju
{
$chyba = array();
...
if (empty($chyba))
      {
      cs_mail("zlatberry@email.cz", $predmet, "--$nick--\n".$zprava, "From: $email\n");
      header("location: http://localhost/zlatberry/mail_formular.php");
$_SESSION["jeden"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána</h3>";
      }
      if (isset($_POST["kopie"]) == "ano" and (empty($chyba))) 
      {
cs_mail($email, $predmet2, "Z formuláře na webu zlatberry.cz jste odeslali tuto zprávu:\n---------------------------------------------------------------------------\n\n $zprava", "From: no-reply@zlatberry.cz\n");
header("location: http://localhost/zlatberry/mail_formular.php");
$_SESSION["dva"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána<br />Zpráva byla odeslána i na Vaši adresu</h3>";          
      exit; 
          }                   
       }
   if (!$poslano || $chyba)
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
  </head>
<body id="formular">
<?php
if (isset($_SESSION["jeden"]) and (empty($chyba)))
echo $_SESSION["jeden"];
if (isset($_SESSION["dva"]) and (isset($_POST["kopie"]) == "ano") and (empty($chyba)))
echo $_SESSION["dva"];
?>
<form name=...>formulář s již vyplněnými údaji</form>
<?php
}
?>


Protože potřebuji zobrazovat DVĚ rozdílné hlášky o odeslání v případě, že si uživatel zatrhne v checkboxu kopii, byla jsem nucena i v <body> použít konstrukci IF. Zpráva s výše uvedeným kódem se odešle bez problému buď na jednu nebo podle volby na dvě adresy, akorát - bohužel nezobrazí ani písmenko hlášky, tím pádem samozřejmě ani animaci.
Obávám se, že jsem už vyčerpala všechny svoje nápady a dosavadní pidiznalosti, prostě to $_SESSION["jeden"] ani $_SESSION["dva"] se mi v body nevypisuje a nevypisuje...
Joan
Profil
Nedá mi to, musím si nasypat popel na hlavu, protože jsem tak dlouho nepřicházela na správné řešení, leč v noci jsem na to konečně kápla!!
Všechno trápení spočívalo v mém tragickém nepochopení rady [#17] resp. jsem si to z neznalosti přesného fungování session vyložila bohužel dost jiným způsobem:
původně jsem měla v souboru s formulářem úplně nahoře kód
<?php session_start();
if (isset($_SESSION["zprava"]))
{
echo $_SESSION["zprava"];
unset ($_SESSION["zprava"]);
}

a v scriptu ve zpracujícím souboru
if (empty($chyba))
      {
      cs_mail("adresa@email.cz", $predmet, "--$nick--\n".$zprava, "From: $email\n");
      header("location: http://localhost/adresa/mail_formular.php");
$_SESSION["zprava"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána</h3>";
      }
      if (isset($_POST["kopie"]) == "ano" and (empty($chyba)))
      {
cs_mail($email, $predmet2, "Z formuláře na webu adresa.cz jste odeslali tuto zprávu:\n---------------------------------------------------------------------------\n\n $zprava", "From: no-reply@adresa.cz\n");
header("location: http://localhost/adresa/mail_formular.php");
$_SESSION["zprava"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána<br />Zpráva byla odeslána i na Vaši adresu</h3>";          
      exit;
          }  

což šlapalo bezvadně, až na ten quirk.
Já jsem si totiž nesprávně myslela, že to
$_SESSION["zprava"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána</h3>"; 
a
 $_SESSION["zprava"] = "<h3 id='anim'>Zpráva byla úspěšně odeslána<br />Zpráva byla odeslána i na Vaši adresu</h3>";

musím z výše uvedeného kódu vyjmout a šoupnout na stránce dolů pod Doctype a hodit mezi <?php echo ... ?> . Až mnoha pokusy jsem dospěla k názoru, že po přesunu jinam se session vypaří a není už jak oznámení o odeslání přenést na půvpdní stránku s formulářem.
Nakonec jsem sama přišla na řešení, kdy na stránku se zpracujícím scriptem (která obsahuje výše uvedený kód) jsem vůbec nesahala a pouze na stránce s formulářem jsem úplně nahoře ponechala
<?php session_start();?>

a právě ten nejdůležitější kousíček kódu
<?php if (isset($_SESSION["zprava"]))
{
echo $_SESSION["zprava"];
unset ($_SESSION["zprava"]);
} ?>
jsem na téže stránce přesunula dolů pod Doctype - a bylo vymalováno :-))

Taky jsem si myslela, že
<?php session_start();
if (isset($_SESSION["zprava"]))
{
echo $_SESSION["zprava"];
unset ($_SESSION["zprava"]);
} ?>

musí zůstat pohromadě, nenapadlo mě dlouho, že tento kód jde rozdělit a spodní kousek šoupnout úplně jinam.

Uff, teď už vím, že $_session je křehká jako víla a nelze s ní pohybovat v kódu kdekoliv.
Hezký den!
panther
Profil
Joan:
Uff, teď už vím, že $_session je křehká jako víla a nelze s ní pohybovat v kódu kdekoliv.
toto je hezky řečeno. Sessions tak křehké nejsou, jen se s nimi musí umět zacházet. Tak mě napadá, že tys je vlastně nepotřebovala, stačilo ti místo vypisování session vypsat echem přes podmínku prostý text.

Jinak samozřejmě volat a plnit session můžeš kdekoliv, jen na každé stránce musí být na začátku (před veškerým výstupem) session_start(). Toť vše.
Joan
Profil
Neumíš si ani představit, kolik variant kódu jsem vyzkoušela :-) . A session_start(); jsem měla na obou stránkách na začátku skutečně vždy.
Třeba tuto variantu jsem zkoušela, když jsem si v jistém zoufalství začala i myslet, že pro dva různé výpisy musím mít dvě různé proměnné (nebo indexy?). Pokud jsem text k vypsání spolu s podmínkou napsala rovnou do stránky s formulářem, kam se potom přesměrovává, tak se mi zpráva o odeslání zobrazila vždy, i při nevyplněných políčkách (vypnula jsem si schválně Javascript, abych byla nucena spoléhat na ochranu správného vyplnění pomocí PHP). Taky se mi povedlo zobrazit obě hlášky naráz, přes sebe.
No, chybami se člověk učí :-)

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