| Autor | Zpráva | ||
|---|---|---|---|
| php_beginner Profil * |
#1 · Zasláno: 18. 12. 2005, 17:52:07
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 * |
#2 · Zasláno: 18. 12. 2005, 17:52:52
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 * |
#3 · Zasláno: 19. 12. 2005, 09:39:33
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 * |
#4 · Zasláno: 19. 12. 2005, 16:35:19
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 * |
#5 · Zasláno: 20. 12. 2005, 10:01:17
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 * |
#6 · Zasláno: 20. 12. 2005, 10:02:29
napeti=<?=($velicina1/$velicina2); ?>
zapomnej jsem na rovna se nebo lepe echo napeti=<? echo ($velicina1/$velicina2); ?> |
||
| peta Profil * |
#7 · Zasláno: 20. 12. 2005, 10:06:12
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 |
#8 · Zasláno: 21. 12. 2005, 02:42:50
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 |
||
|
Časová prodleva: 20 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0