Avaleht
uus teema   vasta Tarkvara »  WWW »  <form> müstiline käitumine o_O märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 17:08:31 <form> müstiline käitumine o_O vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.09.2008 17:36:06 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 17:41:44 vasta tsitaadiga

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? icon_rolleyes.gif

Koodi varjamine on turvaline koodi suhtes. icon_smile.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.09.2008 18:04:14 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
linnumees
HV kasutaja

liitunud: 15.06.2005




sõnum 12.09.2008 18:22:06 vasta tsitaadiga

http://ee.php.net/manual/en/faq.html.php#faq.html.arrays

Edu.
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 20:46:04 vasta tsitaadiga

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? icon_biggrin.gif 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. icon_rolleyes.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
linnumees
HV kasutaja

liitunud: 15.06.2005




sõnum 12.09.2008 20:52:41 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 20:56:52 vasta tsitaadiga

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... icon_rolleyes.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.09.2008 21:01:17 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 21:16:27 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.09.2008 21:32:00 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 12.09.2008 21:46:11 vasta tsitaadiga

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. icon_biggrin.gif Takistuseks saabki see, et järelikult <form> ei saa teise sees olla.
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 12.09.2008 22:20:18 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 13.09.2008 09:12:20 vasta tsitaadiga

See ei olnud php, vaid juba välja renderdatud kood, nagu ma eelmise postituse alguses märkisin. icon_smile.gif
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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 13.09.2008 10:04:28 vasta tsitaadiga

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:
  1.  
  2. <form action="file.php" method="post">
  3. <input name="nupp" value="Nupp" type="submit">
  4.  
  5. box: <input name="ch[1]" value="1" type="checkbox">
  6.  
  7.     <input name="tekst[1]" type="text">   
  8.     <input name="id[1]" type="hidden" value="1">
  9.     <input name="nupp2[1]" type="submit" value="Nupp 2">
  10. ....
  11.  
  12. box: <input name="ch[2]" value="2" type="checkbox">
  13.  
  14.     <input name="tekst[2]" type="text">   
  15.     <input name="id[2]" type="hidden" value="2">
  16.     <input name="nupp2[2]" type="submit" value="Nupp 2">
  17. ....
  18.  
  19. box: <input name="ch[3]" value="3" type="checkbox">
  20.  
  21.     <input name="tekst[3]" type="text">   
  22.     <input name="id[3]" type="hidden" value="3">
  23.     <input name="nupp2[3]" type="submit" value="Nupp 2">
  24. ....
  25.  
  26. <input name="nupp" value="Nupp" type="submit">
  27. </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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 13.09.2008 10:34:38 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 13.09.2008 11:03:07 vasta tsitaadiga

mikk36, ei olnud nagu küll nii minuteada icon_rolleyes.gif
_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 13.09.2008 11:31:26 vasta tsitaadiga

mnjaa, õigus isegi sul
toimib täitsa
http://mikk36.eu/test/form_array.php
http://mikk36.eu/test/form_array.phps
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 13.09.2008 11:39:02 vasta tsitaadiga

Sain asja toimima, nuputasin veidi aega ja midagi panin kokku, nagunii kilplase/kirve moodi, aga näitan kohe siin ära. icon_biggrin.gif

<?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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 13.09.2008 12:22:20 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004



Online

sõnum 13.09.2008 12:23:52 vasta tsitaadiga

andrusny, name[] kujul olevad nimed tõlgib php automaatselt array'ks
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 13.09.2008 12:30:24 vasta tsitaadiga

Sorry, minu viga. Pean veel palju õppima.
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
SGM
HV kasutaja
SGM

liitunud: 04.12.2005



Autoriseeritud ID-kaardiga

sõnum 13.09.2008 12:36:15 vasta tsitaadiga

andrusny kirjutas:
Pean veel palju õppima.

Seda tahaksin ka mina enda kohta öelda. icon_smile.gif
Harjutades ja siin mõtteid vahetades õpib ka päris hästi. thumbs_up.gif
Kommentaarid: 4 loe/lisa Kasutajad arvavad:  :: 1 :: 1 :: 0
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  <form> müstiline käitumine o_O
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.