Autor Zpráva
php_beginner
Profil *
Prosím moc o pomoc ;o/
Mám problém se stránkou ve které je formulář - do něj se zadává název spotřebiče, a 2 z veličin napětí,proud,odpor,výkon + poznámka. Zbývající 2 nevyplněné veličiny se mají vypočítat a to vše se má uložit do souboru.

Jediné co mi nefunguje je podmínka vypsaná v javascriptové funkci vypocitej(formular) pro výpočet veličin (výpočet definován přes php) - vždy se to vypočítá podle té úplně poslední podmínky else if. Zdá se, že mi to každou z těch podmínek vyhodnotí jako true a příkazy v naposledy zadané podmínce to vypočítají jako poslední (=takže je to vypočítané podlě nich, přepíší ty předchozí výpočty), nebo nějakým způsobem ty php příkazy nepodléhají podmínkám v javascriptu a jsou všechny zařazeny do spuštěného kódu. Je možné že chyba bude někde ve formuláři ve vysouvacích seznamech nebo v textových polích, ale to si nemyslím. Funkce vypocitej je voláná příkazem onClick při stisku tlačítka typu submit ve formuláři.
V kódu mi jinak vše ostatní funguje (ukládání do souboru i mazání z něj vypadá OK, uloží se mi všechny věci z formuláře, ale hodnoty veličin jsou vypočteny špatně).
Poraďte mi, prosím, buď co je špatně a jak to opravit nebo jak ty podmínky ve funkci 'vypocitej' zapsat přímo v rámci php.
DĚKUJI

Tady je kód (spouštím ho přes EasyPHP/Apache s povolenou registrací globálních proměnných):

<html>
<head>
<title>PHP</title>

<STYLE TYPE = "text/css">
<!--
body
{
font-family : Arial, Helvetica, Verdana, sans-serif;
}
h5
{
font-size : 14pt;
font-weight: 800;
text-align: center;
}
h6
{
font-size : 11pt;
text-align: center;
color : #FF0000;
line-height: normal
}
th
{
font-family : Arial, Helvetica, Verdana, sans-serif;
text-align: left;
color : #FF0000;
}
tr
{
font-family : Arial, Helvetica, Verdana, sans-serif;
}
-->
</STYLE>
<SCRIPT LANGUAGE="JavaScript">
<!--
function napole()
{
<? if ((!$zobrazit) && (!$mazat) && (!$OK) ): ?>
document.form1.prijmeni.focus()
<? endif; ?>
<? if ($mazat): ?>
document.form2.primaz.focus()
<? endif; ?>
<? if ((!$primaz) && ($OK)): ?>
document.form3.primaz.focus()
<? endif; ?>
};
/************kontrola údajů JavaScriptem************/
function validate(formular)
{
if(formular.prijmeni.value=="")
{
alert("Název spotřebiče musí být zadán");
formular.prijmeni.focus();
return false;
}
else if(formular.predmet1.selectedIndex==0 || formular.predmet2.selectedIndex==0 || formular.velicina1.value=="" || formular.velicina2.value=="")
{
alert("Musíte zadat hodnotu a typ vstupních veličin");
return false;
}
else if(formular.predmet1.selectedIndex==formular.predmet2.selectedIndex)
{
alert("Musíte zadat rozdílné veličiny");
return false;
}
else return true;
};
/************výpočet údajů************/
function vypocitej(formular)
{
if(formular.predmet1.selectedIndex==1 && formular.predmet2.selectedIndex==2)
{
<? $napeti=$velicina1; ?>
<? $proud=$velicina2; ?>
<? $odpor=$velicina1/$velicina2; ?>
<? $vykon=$velicina1*$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==2 && formular.predmet2.selectedIndex==1)
{
<? $napeti=$velicina2; ?>
<? $proud=$velicina1; ?>
<? $odpor=$velicina2/$velicina1; ?>
<? $vykon=$velicina1*$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==1 && formular.predmet2.selectedIndex==3)
{
<? $napeti=$velicina1; ?>
<? $proud=$velicina1/$velicina2; ?>
<? $odpor=$velicina2; ?>
<? $vykon=($velicina1*$velicina1)/$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==3 && formular.predmet2.selectedIndex==1)
{
<? $napeti=$velicina2; ?>
<? $proud=$velicina2/$velicina1; ?>
<? $odpor=$velicina1; ?>
<? $vykon=($velicina2*$velicina2)/$velicina1; ?>
}
else if(formular.predmet1.selectedIndex==1 && formular.predmet2.selectedIndex==4)
{
<? $napeti=$velicina1; ?>
<? $proud=$velicina2/$velicina1; ?>
<? $odpor=($velicina1*$velicina1)/$velicina2; ?>
<? $vykon=$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==4 && formular.predmet2.selectedIndex==1)
{
<? $napeti=$velicina2; ?>
<? $proud=$velicina1/$velicina2; ?>
<? $odpor=($velicina2*$velicina2)/$velicina1; ?>
<? $vykon=$velicina1; ?>
}
else if(formular.predmet1.selectedIndex==2 && formular.predmet2.selectedIndex==3)
{
<? $napeti=$velicina1*$velicina2; ?>
<? $proud=$velicina1; ?>
<? $odpor=$velicina2; ?>
<? $vykon=$velicina1*$velicina1*$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==3 && formular.predmet2.selectedIndex==2)
{
<? $napeti=$velicina2*$velicina1; ?>
<? $proud=$velicina2; ?>
<? $odpor=$velicina1; ?>
<? $vykon=$velicina2*$velicina2*$velicina1; ?>
}
else if(formular.predmet1.selectedIndex==2 && formular.predmet2.selectedIndex==4)
{
<? $napeti=$velicina2/$velicina1; ?>
<? $proud=$velicina1; ?>
<? $odpor=$velicina2/($velicina1*$velicina1); ?>
<? $vykon=$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==4 && formular.predmet2.selectedIndex==2)
{
<? $napeti=$velicina1/$velicina2; ?>
<? $proud=$velicina2; ?>
<? $odpor=$velicina1/($velicina2*$velicina2); ?>
<? $vykon=$velicina1; ?>
}
else if(formular.predmet1.selectedIndex==3 && formular.predmet2.selectedIndex==4)
{
<? $napeti=($velicina1*$velicina2)/($velicina1*$velicina1*$velicina2*$vel icina2); /*blbý vzorec tady-to ale zatím neva*/?>
<? $proud=($velicina2/$velicina1)/(($velicina2/$velicina1)*($velicina2/$v elicina1)); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $odpor=$velicina1; ?>
<? $vykon=$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==4 && formular.predmet2.selectedIndex==3)
{
<? $napeti=($velicina1*$velicina2)/($velicina1*$velicina1*$velicina2*$vel icina2); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $proud=($velicina1/$velicina2)/(($velicina1/$velicina2)*($velicina1/$v elicina2)); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $odpor=$velicina2; ?>
<? $vykon=$velicina1; ?>
}
};
// -->
</SCRIPT>
</head>

<body ONLOAD="napole()">
<?
/************zobrazení textového souboru************/
if ($zobrazit):
@$radky=file("pokusy.txt");
if (!$radky) :
echo("Soubor nelze otevřít");
else :
?>
<table width="100%">
<tr>
<th>Název spotřebiče
<th>Napětí [U]
<th>Proud [A]
<th>Odpor [Ohm]
<th>Výkon [W]
<th>Poznámka
<?
$pocrad=count($radky);
for ($j=0;$j<$pocrad;$j++):
$pole=Explode(";",$radky[$j]);
?>
<tr>
<?
$pocpole=count($pole);
for ( $i=0 ; $i < $pocpole ; $i++):
?>
<td>
<?
echo $pole[$i];
endfor;
endfor;
?>
</table>
<?
endif;
?>
<FORM METHOD="POST">
<INPUT TYPE="submit" name="odeslat" value="Přidat další spotřebič">
<INPUT TYPE="submit" name="mazat" value="Smazat spotřebič(e)">
</FORM>
<?
exit;
endif;
/************mazání záznamu************/
if ($mazat):
/*****dotaz na jméno*****/
?>
<h5>Zadejte část názvu spotřebiče</h5>
<FORM METHOD=POST NAME="form2">
<INPUT TYPE="text" NAME="primaz" size="30" maxlength="30">
<INPUT TYPE="submit" name="OK" value=" OK ">
</FORM>
<?
exit;
endif;
if ($OK):
if (!$primaz) :
/*****nevyplněno*****/
?>
<h5>Zadejte <font color="#FFOO00">část</font> názvu spotřebiče</h5>
<FORM METHOD=POST NAME="form3">
<INPUT TYPE="text" NAME="primaz" size="30" maxlength="30">
<INPUT TYPE="submit" name="OK" value=" OK ">
</FORM>
<?
exit;
endif;
/*****hledání záznamu*****/
@$radky=file("pokusy.txt");
if (!$radky) :
echo("Soubor nelze otevřít");
exit;
else :
$uspech=0;
$pocrad=count($radky);
for ($j=0;$j<$pocrad;$j++):
$pole=Explode(";",$radky[$j]);
$a=" ".$pole[0];
if (StrPos($a,$primaz)):
$radky[$j]="";
$uspech++;
endif;
endfor;
/*****nový zápis souboru*****/
if ($uspech):
$pocrad=count($radky);
@$soubor=fopen("pokusy.txt",w);
if (!$soubor) :
php_beginner
Profil *
echo("Soubor nelze otevřít");
exit;
else :
$pocrad=count($radky);
for ($j=0;$j<$pocrad;$j++):
fwrite($soubor,$radky[$j]);
endfor;
fclose($soubor);
endif;
endif;
endif;
if ($uspech):
?>
<h5>Vymazání bylo úspěšné</h5>
<h6>Počet smazaných záznamů: <?echo $uspech; ?> </h6>
<?
else:
?>
<h5>Spotřebič nenalezen</h5>
<?
endif;
?>
<FORM METHOD=POST>
<INPUT TYPE="submit" name="zobrazit" value=" OK ">
</FORM>
<?
exit;
endif;
/************zobrazení formuláře************/
if ($odeslat):
if (!$prijmeni || $predmet1=="není"):
/*****špatně vyplněno*****/
?>
<h5>Pro přidání spotřebiče vyplňte tento formulář</h5>
<h6>Musíte vyplnit povinné údaje. Jsou označeny červeně.</h6>
<?
/*****viz kousek nad - php kontrola - naprosto "nanic" když je tam ten validační javascript, zatím upraveno a ponecháno*****/
else :
/*****uložení do textového souboru*****/
$text="$prijmeni;$napeti;$proud;$odpor;$vykon;$poznamka\n";
@$soubor=fopen("pokusy.txt",a);
if (!$soubor) :
echo("Soubor nelze otevřít");
else :
fwrite($soubor,$text);
fclose($soubor);
/*****nulování proměnných*****/
$prijmeni=$velicina1=$velicina2=$poznamka="";
$predmet1=$predmet2="není";
/*****nulování proměnných 2 - není nezbytné, ale nic se tím nezkazí :o)*****/
$napeti=$proud=$odpor=$vykon="";
endif;

/*****přidání dalšího po správném vyplnění*****/
?>
<h5>Pro přidání spotřebiče vyplňte tento formulář</h5>
<h6>Musíte vyplnit povinné údaje. Jsou označeny červeně.</h6>
<?
endif;
else :
/*****přidání dalšího - první otevření*****/
?>
<h5>Pro přidání spotřebiče vyplňte tento formulář</h5>
<h6>Musíte vyplnit povinné údaje. Jsou označeny červeně.</h6>
<?
endif;
?>
<form name="form1" method="post" >
<table width="400">
<tr>
<td><font color="#FF0000">Název spotřebiče :</font></td>
<td>
<input type="text" name="prijmeni" size="15" value="<?echo $prijmeni ?>" maxlength="30">
</td>
</tr>
<tr>
<td><font color="#FF0000">1.veličina :</font></td>
<td>
<input type="text" name="velicina1" size="15" value="<? echo $velicina1 ?>" maxlength="15">
</td>
<td>
<select name="predmet1">
<option <? echo $predmet1=="není" ? "selected" : "" ?>>není</option>
<option <? echo $predmet1=="Napětí [V]" ? "selected" : "" ?>>Napětí [V]</option>
<option <? echo $predmet1=="Proud [A]" ? "selected" : "" ?>>Proud [A]</option>
<option <? echo $predmet1=="Odpor[Ohm]" ? "selected" : "" ?>>Odpor[Ohm]</option>
<option <? echo $predmet1=="Výkon[W]" ? "selected" : "" ?>>Výkon[W]</option>
</select>
</td>
</tr>
<tr>
<td><font color="#FF0000">2.veličina :</font></td>
<td>
<input type="text" name="velicina2" size="15" value="<? echo $velicina2 ?>" maxlength="15">
</td>
<td>
<select name="predmet2">
<option <? echo $predmet2=="není" ? "selected" : "" ?>>není</option>
<option <? echo $predmet2=="Napětí [V]" ? "selected" : "" ?>>Napětí [V]</option>
<option <? echo $predmet2=="Proud [A]" ? "selected" : "" ?>>Proud [A]</option>
<option <? echo $predmet2=="Odpor[Ohm]" ? "selected" : "" ?>>Odpor[Ohm]</option>
<option <? echo $predmet2=="Výkon[W]" ? "selected" : "" ?>>Výkon[W]</option>
</select>
</td>
</tr>
<tr>
<td>Poznámka :</td>
<td>
<input type="text" name="poznamka" size="15" value="<? echo $poznamka ?>" maxlength="15">
</td>
</tr>
<tr>
<td>
<input type="submit" name="odeslat" value="uložit" onClick="return validate(form1);vypocitej(form1)">
</td>
<td>
<div align="right">
<input type="submit" name="zobrazit" value="zobrazit">
</div>
</td>
</tr>
</table>
</form>
</body>
</html>
peta
Profil *
Ciste nahodou, forum PHP ti nic nerika?
A takhle se to rozhodne nedela. Je nejaky specialni duvod proc kombinujes PHP a JS spolu v takovemto chaosu?

Nejdriv si udelame jasno, jak co pracuje...
PHP - toto se zpracovava na serveru, cili pri odesilani stranky nekomu. Takze hodnoty bud poslane pres GET/POST nebo hodnoty pred zobrazenim stranky.
JS - to pracuje na strane klienta, cili az pri zobrazovani u nekoho.

Z toho vyplyva, ze tato podminka se vyhodnoti jako:
function napole()
{
<? if ((!$zobrazit) && (!$mazat) && (!$OK) ): ?>
document.form1.prijmeni.focus()
<? endif; ?>
<? if ($mazat): ?>
document.form2.primaz.focus()
<? endif; ?>
<? if ((!$primaz) && ($OK)): ?>
document.form3.primaz.focus()
<? endif; ?>
};

if (!0 !0 !0) cili if (111) cili 1
protoze jeste nedostal zadna data
Takze klientovi se posle JS
document.form1.prijmeni.focus()
Coz je podle mne spravne, jak jsi to chtel, ne? Aspon podle napsaneho.
Az zmacknes odeslat a jestli se neprovede pri odeslani nic, jen posle na server, pak se ti vrati novy JS s jinymi podminkami (pokud ti funguje spravne GET POST)
Pro zajimavost, nech si vypsat obsah promennych, ktere te zajimaji...

echo "<br />zobrazit=".$zobrazit;
echo "<br />smazat=".$smazat;
echo "<br />OK=".$OK;
<SCRIPT LANGUAGE="JavaScript">
<!--
function napole()
{
<? if ((!$zobrazit) && (!$mazat) && (!$OK) ): ?>
...

Jak bych to delal ja?
Cele pochopitelne v JS, pokud se hodnoty nemusi ukladat a staci je jen zobrazit na obrazovce. (<form onsubmit="spocitej()"> na method post bych se vykaslal, prebirani hodnot viz script treba http://www.volny.cz/peter.mlich/www.htm#lmoje - nakupni kosik nebo nejaka JS hra)
Nebo cele v PHP.
php_beginner
Profil *
Moc díky za pomoc...spíš mě šlo o to, proč se mi nevyhonocuje podmínka ve funkci vypocitej, funkce napole funguje (naštěstí...) dobře.
Nevíš prosímtě jak udělat ty samé podmínky jako jsou ve funkci vypocitej v php? Já to zkoušel a nejde mi to.
Btw tuhle šílenou kombinaci musím udělat, já bych do toho normálně nikdy nešel, ale mám to zadaný jako seminárku a chtěj to po mě takhle...takže udělat to "jakkoliv rozumněji" nemůžu :((((
Funkci vypocitej najdete hned v <head> tuším jako 3. funkci.
Kdyby někdo měl nějaké návrhy prosím sem s nimi. Děkuji všem kteří si tu šílenost alespoň zkouknou :P
peta
Profil *
Snazil jsem se ti rici, ze jsi asi nepochopil PHP a JS. Viz vcera 1 clovek na PHP foru.
PHP se zpracuje na serveru a az pak se ti odesle HTML+JS kod, ktery zpracovava tvuj prohlizec.

else if(formular.predmet1.selectedIndex==3 && formular.predmet2.selectedIndex==4)
{
<? $napeti=($velicina1*$velicina2)/($velicina1*$velicina1*$velicina2*$vel icina2); /*blbý vzorec tady-to ale zatím neva*/?>
<? $proud=($velicina2/$velicina1)/(($velicina2/$velicina1)*($velicina2/$v elicina1)); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $odpor=$velicina1; ?>
<? $vykon=$velicina2; ?>
}
else if(formular.predmet1.selectedIndex==4 && formular.predmet2.selectedIndex==3)
{
<? $napeti=($velicina1*$velicina2)/($velicina1*$velicina1*$velicina2*$vel icina2); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $proud=($velicina1/$velicina2)/(($velicina1/$velicina2)*($velicina1/$v elicina2)); /*blbý vzorec tady-to ale zatím neva*/ ?>
<? $odpor=$velicina2; ?>
<? $vykon=$velicina1; ?>

Toto znamena, ze mas jakysi html kod do ktereho vlozis cisla vysledku z PHP
A funguje to uplne stejne, jako kdyz napises...

---pr1---

<?
$x=156;
$y="maminka sla nakoupit"
?>

<p>text<?=$x?></p>
<p>text<?=$y?></p>

Cili, nejdriv se vyhodnocuji PHP vyrazy! Mozna to lip pochopis na tomto

--- pr2 ---
<?
$a=1;
$b=4;
$c=2;
?>
<script>
if (...) {<? $a=$b/$c ?>}
if (...) {<? $a=$b+$c ?>}
if (...) {<? $a=$b-$c ?>}
if (...) {<? $a=$b*$c ?>}
</script>
<p><?=$a?></p> (alias echo $a)
Postup zpracovani...
PHP - internetovy server
a=1,b=4,c=2
a=2 (b/c)
a=6 (b+c)
a=2
a=8
HTML (JS) - webrowser
if (...) {}
if (...) {}
if (...) {}
if (...) {}
<p>8</p>

vzdy 8, protoze posleni matematicka operace s $a byla 8 a zavorky v JS jsou prazne, protoze tam nepises zadny kod, pouze neco pocitas v PHP.

Takze cely priklad lze napsat jako (a vysledek bude uplne ten samy, jen je to jinak zapsane)
<?
$a=1;
$b=4;
$c=2;
$a=$b/$c;
$a=$b+$c;
$a=$b-$c;
$a=$b*$c;
?>
<script>
if (...) {}
if (...) {}
if (...) {}
if (...) {}
</script>
<p><?=$a?></p> (alias echo $a)

Chapes?

Takze bud to pocitej cely PHP nebo JS, nebo do JS zapis vysledky!!!
if (...){
napeti=<?$velicina1/$velicina2; ?>
proud=<?$velicina2; ?>
odpor=<?$velicina1/($velicina2*$velicina2); ?>
vykon=<?$velicina1; ?>
}
t='\n<p>'.
'\n<br>napeti = '+napeti+
'\n<br>proud = '+proud+
'\n<br>odpor = '+odpor+
'\n<br>vykon = '+vykon+
'\n<\/p>';
document.write(t);
Script v tomto pripade ale musis dat do BODY nebo volat z BODY, protoze jinak ti prepise stranku.
peta
Profil *
napeti=<?=($velicina1/$velicina2); ?>
zapomnej jsem na rovna se nebo lepe echo
napeti=<? echo ($velicina1/$velicina2); ?>
peta
Profil *
A jeste dalsi drobnost, v JS je misto "." "+" , radeji to posledni napisi cele znova... Snad to bude dobre

if (...) {
napeti = <?=($velicina1/$velicina2); ?>;
proud = <?=($velicina2); ?>;
odpor = <?=($velicina1/($velicina2*$velicina2)); ?>;
vykon = <?=($velicina1); ?>;
}
t='\n<p>'+
'\n<br>napeti = '+napeti+
'\n<br>proud = '+proud+
'\n<br>odpor = '+odpor+
'\n<br>vykon = '+vykon+
'\n<\/p>';
document.write(t);
Georgík
Profil
Dobrý den!

Jo, Péťa na to jde docela dobře.

peta - klobouk dolů :-). P.S.: Na čem jsi se takhle naučil PHP?

Beginner by IMHO měl Péťovi důvěřovat, i když ani on to nemá a ještě chvíli nebude mít lehké, pamatuji.

Jirka
Toto téma je uzamčeno. Odpověď nelze zaslat.

0