Autor Zpráva
mirio
Profil
Ahoj,

napsal jsem si primitivní miniscript pro ověření "neprázdnosti" formuláře, ale nedělá mi to vůbec nic a přitom myslím, že je to správně. Co s tím?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Testovací stránka | Test page</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<script language="javascript" type="text/javascript">
<SCRIPT LANGUAGE="JavaScript">
<!--
function Kontrola()
{
if (document.formular.jmeno.value == "")
{
document.formular.jmeno.focus();
alert ("Nezadali jste vaše jméno");
return false;
}
alert ("Formulář byl odeslán. Nenalezena chyba.");
}
// -->
</SCRIPT>

</head>
<body>


<form name="formular" action="komentar_add.php" method="POST" onsubmit="return Kontrola();">
<input type=hidden name="id" value="<? echo $id ?>">

<div align="center">

<p class="formular"><input type="text" name="jmeno" size="30"> Jméno</p>
<p class="formular"><input type="text" name="email" size="30"> E-mail</p>
<p class="formular"><input type="text" name="url" size="30"> Www</p>
<p class="formular"><input type="text" name="predmet" size="30"> Předmět</p>
<p class="formular">Váš komentář, prosím:</p>
<p class="formular"><textarea rows="3" name="text" cols="30"></textarea></p>
<p class="formular"><input type="submit" value="Odeslat"></p>

</div>
</form>

</body>
</html>

Tady je to v celé své nefunkční "kráse":
http://mirio.borec.cz/pomoc/test.php
Anonymní
Profil *
přdpokládam, že formulář zpracováváš pomocí PHP, tak pole kontroluj pomocí jeho a hlášku vypiš pomocí echa nebo printu. Tenhle JS fungovat nemůže už jen pro to, že se ti nikdy nespustí - ničim ho nezpouštíš.
roberta
Profil
máš 2x definíciu javascriptu v heade, takže 6. riadok vymaž, alebo ukonči tag "script"
6ty riadok: <script language="javascript" type="text/javascript">
roberta
Profil
Anonymní

on sa ho snaží spustiť týmto:
<form name="formular" action="komentar_add.php" method="POST" onsubmit="return Kontrola();">

ale keďže má nesprávne definovaný JS v heade, tak mu to padá...
mirio
Profil
přdpokládam, že formulář zpracováváš pomocí PHP, tak pole kontroluj pomocí jeho a hlášku vypiš pomocí echa nebo printu. Tenhle JS fungovat nemůže už jen pro to, že se ti nikdy nespustí - ničim ho nezpouštíš.
Nerozumím, a tohle: onsubmit="return Kontrola();" je potom co?
Anonymní
Profil *
je sorry, to jsem přehlídnul, tak jako tak je lepší to úž rovnou spojit s PHP protože pak je kontrola jistá ikdyž má někdo JS vypnutý
mirio
Profil
je sorry, to jsem přehlídnul, tak jako tak je lepší to úž rovnou spojit s PHP protože pak je kontrola jistá ikdyž má někdo JS vypnutý
To je fakt, ale v PHP si na to netroufám. Nějaké pošťouchnutí správným směrem, prosím? :-)
mirio
Profil
máš 2x definíciu javascriptu v heade, takže 6. riadok vymaž, alebo ukonči tag "script"
6ty riadok: <script language="javascript" type="text/javascript">

Ano, to bylo ono! Jak jsem to jen mohl přehlídnout? Dělám deset věcí naráz a pak to tak dopadá... Díky.
Anonymní
Profil *
a jak ten formulář spracováváš? hoď sem ten script
Anonymní
Profil *
nebo tě jen nakopnu:
    if (($jmeno=="") or ($url=="") or ($predmet=="") or ($email=="")):

echo "Nejsou vyplněny požadované údaje";
else: { ..................zbytek scriptu....................
}
mirio
Profil
Mno, já to měl takto:

<p class="formular"><input type="text" name="jmeno" size="30" value="
<?
if ($jmeno=="" || $email=="" || $text==""): echo $jmeno;
endif;
?>
"> Jméno</p>

<p class="formular"><input type="text" name="email" size="30" value="
<?
if ($jmeno=="" || $email=="" || $text==""): echo $jmeno;
endif;
?>
"> E-mail</p>

atd. Jenže mi to nefungovalo a v JS je to tak jednoduché, ale zase strašně lehce občůratelné...
peta
Profil *
mirio
"Jenže mi to nefungovalo"
:)
Zalezi na tom, co jsi chtel docilit.
PHP je nastroj, ktery vygeneruje HTML stranku, tu posle uzivateli, kde uz zadne PHP nefiguruje a se neprovadi!
JS proti tomu je soucasti HTML stranky, takze je mozne nejake funkce spustit zvlast u uzivatele, treba kontrola zadanych udaju.
U PHP bys tentyz system mohl pouzit za predpokladu, ze stranku odesles na server a ten vygeneruje novou.
A to je ten zpusob, jak to mas napsane, ze predpoklada navrat na stejny formular.

<input type="text" name="jmeno" size="30" value="
<?
if ($jmeno=="" || $email=="" || $text==""): echo $jmeno;
endif;
?>
"> Jméno</p>

Jenze toto predpoklada, ze mas globalni promenne v PHP aktivni, coz vetsina hostingu (php.ini) z duvodu bezpecnosti nema.
Znamena to asi tolik, ze
$jmeno = $_POST["jmeno"] = $_GET["jmeno"] (to GET=POSt, tim si nejsem jistej)
a mam pocit, ze se to rovna i $_SESSION["jmeno"]
A jestlize toto pravidlo neplati, pak kazda z techto promennych ma jinou hodnotu.

Dale posilas stranku na: action="komentar_add.php" , coz ja nevim, jestli je ta sama stranka. Predpokladejme, ze ano. V tom pripade ti to bude fungovat, jestlize misto
$jmeno a pod pouzijes $_POST["jmeno"]

Dalsi problem nastava pri nastaveni error_reportingu (http://cz2.php.net/error_reporting) na hodnotu ALL. Pak ti $_POST["jmeno"] bude hlasit jako chybu, protoze pri prvnim nacteni stranky je $_POST prazdny, resp. neni definovany. Cili podminku je nutne rozsirit o existenci:
( isset($_POST["jmeno"]) && $_POST["jmeno"]!=="" )
A uz to zacina byt celkem dost komplikovane, proto si ja zakladam pole, ktere na zacatku zkontroluji a dole jen vypisuji vysledky.

A jeste je tu takova zalezitost se syntaxi:
<?=$aaa?>
<? echo $aaa; ?>
<?php echo $aaa; ?>
je vesmes totez, 100% by mel fungovat posledni radek. Opet zalezi na nastaveni hostingu (php.ini)

cili v mem pripade by to vypadalo nejak takto:
<?php
$data = array();
$a = "jmeno"; $data[$a] = ( isset($_POST[$a]) && $_POST[$a]!=="" ) ? $_POST[$a] : "";
$a = "email"; $data[$a] = ( isset($_POST[$a]) && $_POST[$a]!=="" ) ? $_POST[$a] : "";
?>
..........
<input type="text" name="jmeno" size="30" value="<?=$data["jmeno"]?>"/>
<input type="text" name="email" size="30" value="<?=$data["email"]?>"/>

A protoze kdyz neni nic nastavene, ma se vypssat prazdny retezec, tak nevim proc bych kontroloval, zda je hodnota rovna prazdnemu retezci???
S pouzitim pole:
<?php
$x = array("jmeno","email");
foreach ($x as $key => $value)
{$y = isset($_POST[$value]) ? $_POST[$value] : "";
echo "\n<input type=\"text\" name=\"$value\" size=\"30\" value=\"$y\"/>";
}
?>
Toto téma je uzamčeno. Odpověď nelze zaslat.

0