Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 17:08:31
<form> müstiline käitumine o_O |
|
|
Imelik asi juhtus, mis rikub lehe funktsionaalsuse ära.
Alguses on <form action="file.php" method="post">, vahepeale mahub submit button, siis tuleb while(), mille vahel on checkbox'e, tekstiväljasid ja hidden väljasid oma submit buttoniga. Pärast while() lõppu on </form>. Müstika algab sealt, et millegipärast ei sisesta see vahepeal olev button tekstivälja väärtust $_POST-i. Hidden väärtus aga läheb edasi küll. Ma pole varem sellise struktuuriga vormi teinud. Kui panen keskel olevatele elementidele omakorda <form> ümber, siis toimib kõik kenasti, kuni kasutan Firefox-i. IE paneb segast nagu alati. Dreamweaver ka siis näitab, et see form sinna vahele mitte ei taha minna. Keegi oskab midagi soovitada? Et kuidas textivälja väärtust edastada normaalselt, ilma selle vahepealse form-ita?
Struktuur on umbes selline:
<form action="file.php" method="post">
<input name="nupp" value="Nupp" type="submit">
<?php
while (midagi...) {
?>
box: <input name="ch" value="1" type="checkbox">
<input name="tekst" type="text">
<input name="abc" type="hidden" value="123">
<input name="nupp2" type="submit" value="Nupp 2">
<?php
}//while
?>
</form>
|
Kui vajutada "nupp", siis checkboxi väärtus edastub. Kui vajutada "nupp2", siis edastub "abc", aga MITTE "tekst". Vot sellest ma ei saa aru! Kas see häirib, et seal while() vahel on veel eraldi mitu korda submit? Nagu öeldud, asi toimis siis (ainult Firefoxiga), kui panin "tekst"-i ja "nupp2" ümber veel ühe <form>-i.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.09.2008 17:36:06
|
|
|
tsitaat: |
Kui vajutada "nupp2", siis edastub "abc", aga MITTE "tekst". |
Kõik toimib, ka tekst väli liigub, proovisin. Kui mingi viga, siis seal while vahel. Kuna sa kiivalt oma koodi varjad on raske aidata. Vajutasin nii esimest nuppu, kui teist ja mõlemad saadavad ilusti andmed edasi. Milleks mitu nuppu? Need toimivad ju kõik sarnaselt, saadavad formi minema.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 17:41:44
|
|
|
andrusny kirjutas: |
Milleks mitu nuppu? Need toimivad ju kõik sarnaselt, saadavad formi minema. |
While vahel see "abc" on iga kuvamise korral eri väärtusega ja iga väärtuse juures on tekstiväli, mis peab seostuma just selle väärtusega. Et kui "abc" on 987 ja ma just selle juures kirjutan "blaa" ja vajutan "nupp2", siis soovin, et see "blaa" edastuks koos 987-ga ja mitte ühegi teise välja ega teise "abc" väärtusega. Et just ainult selle juurest, kus nuppu vajutan.
Seletan keeruliselt?
Koodi varjamine on turvaline koodi suhtes.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.09.2008 18:04:14
|
|
|
Kui sa tahad, et saadetaks ainult näiteks sellest koodist tekst ja abc siis pead neile eraldi formid tegema, kuna saadetakse ju ikkagi kõik mis on <form></form> vahel. Nüüd, kui sa räägid, kuidas su kood on ehitatud, siis tundub, et teed mitu samanimelist välja ja seetõttu sul see saatmis jama tekibki.
<form action="fail.php" method="post">
box: <input name="ch" value="1" type="checkbox">
<input name="tekst" type="text">
<input name="abc" type="hidden" value="123">
<input name="nupp2" type="submit" value="Nupp 2">
</form>
<form action="fail.php" method="post">
box: <input name="ch" value="1" type="checkbox">
<input name="tekst" type="text">
<input name="abc2" type="hidden" value="123">
<input name="nupp2" type="submit" value="Nupp 2">
</form>
|
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
linnumees
HV kasutaja
liitunud: 15.06.2005
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 20:46:04
|
|
|
hmm... selle array põhimõttega käivad need checkboxid, aga tekstiväljaga on nii, et iga tekstiväli peab olema nagu individuaalne ja sõltumatu sellest ülemisest buttonist "nupp". Sellepärast ma ka neid <form>-isid sinna sisse toppisin, kuigi nii ei tohi. FF ei pahanda, aga IE ja DW pahandasid, IE-ga teadagi ei toiminud ka.
Võibolla on mul jälle pikad juhtmed, äkki keegi suudaks puust ja punaseks teha? Kui sedasi üldse võimalik on? Kaalun juba loobumist, et teha üldse nii, et see leht ilma while()-värgita, et vaid 1 eksemplar jääb lehele; väga ebamugav oleks, aga vähemalt töötaks.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
linnumees
HV kasutaja
liitunud: 15.06.2005
|
12.09.2008 20:52:41
|
|
|
Kui form on sama, siis ei saa ta mitte mingi nipiga sõltumatu olla. :p
|
|
Kommentaarid: 3 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
3 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 20:56:52
|
|
|
linnumees kirjutas: |
Kui form on sama, siis ei saa ta mitte mingi nipiga sõltumatu olla. :p |
Eks seda siis oligi vaja teada. Mõtlen mingi muu lahenduse välja...
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.09.2008 21:01:17
|
|
|
Kas see ei toiminud, mis ma eelmises postituses näitasin? Peaks ju toimima. Teed eraldi formid. Aga sa ei tohi neid omakorda formi sisse panna nagu ma su tegevusest aru sain.
Edit: Mida see ülemine nupp tegema peaks, ma ei saa pihta. Kui selgitad, ehk oskan aidata. Üksikult need teised töötavad, kui on eraldi formid. Kas see peaks nad kõik korraga saatma?
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 21:16:27
|
|
|
Ei saa nii, et eraldi formid on. Siis saaks, kui seda ühte peaformi poleks. See ülemine nupp sisestab checkboxide väärtused. Aga need textiväljad koos nupp2-ga on kõik individuaalsed ja iga tekstivälja sisu peab saama ERALDI sisestada välja all olevast nupust, sõltumata peaformist. Sellepärast asi metsa kisubki.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.09.2008 21:32:00
|
|
|
tsitaat: |
See ülemine nupp sisestab checkboxide väärtused |
´JavaScript??
See ei pea ju üldse formi sees sel juhul olema. Midagi sellist äkki? Su eesmärgid väga segased ei saa sisule pihta.
<input type="submit" value="Sisestus nupp" onclick="document.getElementById('z1').value = 1; document.getElementById('z2').value = 2;document.getElementById('z3').value = 3;">
<br><br><br>
<form action="fail.php" method="post">
box: <input name="ch" value="" type="checkbox" id="z1">
<input type="text" name="tekst" size="40" maxlength="256">
<input type="submit" value="ss">
</form>
<form action="fail.php" method="post">
box: <input name="ch" value="" type="checkbox" id="z2">
<input type="text" name="abc" size="40" maxlength="256">
<input type="submit" value="ss">
</form>
<form action="fail.php" method="post">
box: <input name="ch" value="" type="checkbox" id="z3">
<input type="text" name="ch" size="40" maxlength="256">
<input type="submit" value="ss">
</form> |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
12.09.2008 21:46:11
|
|
|
Mul oli asi nii, mis toimib vaid FF peal, see oleks siis renderdatud kujul, mitte php-koodina:
<form action="file.php" method="post">
<input name="nupp" value="Nupp" type="submit">
box: <input name="ch[1]" value="1" type="checkbox">
<form action="file.php?page=2" method="post">
<input name="tekst" type="text">
<input name="id" type="hidden" value="1">
<input name="nupp2" type="submit" value="Nupp 2">
</form>
....
box: <input name="ch[2]" value="2" type="checkbox">
<form action="file.php?page=2" method="post">
<input name="tekst" type="text">
<input name="id" type="hidden" value="2">
<input name="nupp2" type="submit" value="Nupp 2">
</form>
....
box: <input name="ch[3]" value="3" type="checkbox">
<form action="file.php?page=2" method="post">
<input name="tekst" type="text">
<input name="id" type="hidden" value="3">
<input name="nupp2" type="submit" value="Nupp 2">
</form>
....
<input name="nupp" value="Nupp" type="submit">
</form>
|
Selline põhimõte oli asjal ja kui see teema korrektselt toimiks, oleks äge. Takistuseks saabki see, et järelikult <form> ei saa teise sees olla.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
12.09.2008 22:20:18
|
|
|
Sa soovid, et kui vajutada Nupp , siis checkbox väärtused (ch[1] jne.) saaksid täidetud ja seejärel saaksid sa teisi nuppe klasutada (täita saaksid neid ju sellega <input type="submit" value="Sisestus nupp" onclick="document.getElementById('z1').value = 1; document.getElementById('z2').value = 2;document.getElementById('z3').value = 3;">). Milleks need checbox id üldse on sul? Kuna nad on teistest formidest väljas pole neist sulle ju nende juures kasu. need toimiks nagu ainult siis, kui vajutad Nupp. Katsu selgitada, mida see värgendus tegema peab. Ära kirjuta koodi vid selle vajalik toimimine.
Edit: kui sa tahtsid nii, et see chec oleks iga selle formiga kaasas, mis sa eraldi saadad, siis pane ta selle formi sisse Kus kohast tuleb ch[1] ? mis keel see on kui php siis ikka $ch[1] ?? ja siis ka süntaks vale.
<form action="file.php?page=2" method="post">
box: <input name="ch[1]" value="1" type="checkbox">
<input name="tekst" type="text">
<input name="id" type="hidden" value="1">
<input name="nupp2" type="submit" value="Nupp 2">
</form> |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
13.09.2008 09:12:20
|
|
|
See ei olnud php, vaid juba välja renderdatud kood, nagu ma eelmise postituse alguses märkisin.
Checkboxid peavad olema väljaspool seda nupp2-ga vormi, sest nad ei puutu sellesse vaid on esimese vormi ("nupp") osad.
Kui märgin checkboxe, vajutan "nupp", siis peavad ühed väärtused (iga while-tsükli jaoks eri väärtus) muutuma. Aga iga tsükli juures peab olema ka tekstiväli oma nupuga ("nupp2"), millelt saab eraldi sisestada just selle tsükli kohta mingit infot.
PHP kujul on see array asi nii:
<input name="ch[<?=$id?>]" value="<?=$id?>" type="checkbox">
|
Ja see renderdatakse HTML-ina välja ju nii:
<input name="ch[1]" value="1" type="checkbox">
<input name="ch[2]" value="2" type="checkbox">
<input name="ch[2]" value="3" type="checkbox">
jne...
|
Hakkasin mõtlema, et kui see iga tsükli individuaalne tekstiväli siduda esimese ja üldise tsüklivälise form-iga, panna ka sinna need array-d vahele, et siis äkki toimiks? Aga siis ta jälle vist läheb kokku "nupp"-ga, aga mitte "nupp2"-ga, viimane peab olema iga tekstivälja taga. "nupp" aga esineb vaid korra ja enne while-tsükleid.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
13.09.2008 10:04:28
|
|
|
SGM, kas sa ise ka aru saad mida sul vaja on?
Kusjuures sellist asja ei ole olemas, et paned ühe form'i teise sisse.
Kui sul on vaja, et see kõik oleks üks FORM siis tee nii:
html:
|
<form action="file.php" method="post"> <input name="nupp" value="Nupp" type="submit"> box: <input name="ch[1]" value="1" type="checkbox"> <input name="tekst[1]" type="text"> <input name="id[1]" type="hidden" value="1"> <input name="nupp2[1]" type="submit" value="Nupp 2"> .... box: <input name="ch[2]" value="2" type="checkbox"> <input name="tekst[2]" type="text"> <input name="id[2]" type="hidden" value="2"> <input name="nupp2[2]" type="submit" value="Nupp 2"> .... box: <input name="ch[3]" value="3" type="checkbox"> <input name="tekst[3]" type="text"> <input name="id[3]" type="hidden" value="3"> <input name="nupp2[3]" type="submit" value="Nupp 2"> .... <input name="nupp" value="Nupp" type="submit"> </form>
|
ja PHPs tegele siis tsüklitega edasi.
$_POST['ch'][1]
$_POST['tekst'][1]
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
13.09.2008 10:34:38
|
|
|
oot kas html's arrayd kujutades mitte ei olnud asi nii, et numbreid jne ei saa kasutada seal ? (et lihtsalt järjekorra järgi automaatselt, mitte et käsitsi määrad)
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
13.09.2008 11:03:07
|
|
|
mikk36, ei olnud nagu küll nii minuteada
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
13.09.2008 11:39:02
|
|
|
Sain asja toimima, nuputasin veidi aega ja midagi panin kokku, nagunii kilplase/kirve moodi, aga näitan kohe siin ära.
<?php
if(isset($_POST["nupp2"]))
{
$id_array = $_POST["id"];
$text_array = $_POST["text"];
foreach($text_array as $id => $text_value)
{
if($text_value) //saame selle ÜHE ja õige elemendi kõigi tsüklite hulgast
{
echo $text_value;
}
}
}
?>
<form action="fail.php" method="post">
<input name="nupp" value="Nupp" type="submit">
<?php
while(.........)
{
?>
<input name="ch[<?=$id?>]" value="<?=$id?>" type="checkbox">
.....
<input name="text[<?=$id?>]" type="text">
<input name="id[<?=$id?>]" type="hidden" value="<?=$id?>">
<input name="nupp2" type="submit" value="Nupp 2">
<?php
}//while
?>
</form>
|
Korraga tohib olla väärtus vaid ühel tekstiväljal, sellepärast seal vahel see if();
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
13.09.2008 12:22:20
|
|
|
Nüüd sain alles aru, kuid see, mis sa sinna checkbox name paned ei ole sul mitte array vaid lihtne string, mis juhuslikult näeb välja nagu array. sa võid seal täiesti edukalt kirjutada ka
<input name="ch<?=$id?>" value="<?=$id?>" type="checkbox"> |
ja toimib täpselt sama moodi eeldusel, et sa ka võtad vastu sama nimelisi box' se. (ch1, ch2 jne.)
<?php
$id=3;
echo $p=$_POST['ch'.$id];
?>
<form action="" method="post">
<input name="ch<?=$id?>" value="<?=$id?>" type="checkbox">
<input type="submit" value="dd">
</form> |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004

|
13.09.2008 12:23:52
|
|
|
andrusny, name[] kujul olevad nimed tõlgib php automaatselt array'ks
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
13.09.2008 12:30:24
|
|
|
Sorry, minu viga. Pean veel palju õppima.
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
SGM
HV kasutaja

liitunud: 04.12.2005
|
13.09.2008 12:36:15
|
|
|
andrusny kirjutas: |
Pean veel palju õppima. |
Seda tahaksin ka mina enda kohta öelda.
Harjutades ja siin mõtteid vahetades õpib ka päris hästi.
|
|
Kommentaarid: 4 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
1 :: |
0 |
|
tagasi üles |
|
 |
|