Avatar billede zappa Nybegynder
01. februar 2011 - 14:25 Der er 12 kommentarer og
2 løsninger

Hidden field,

Hej Eksperter

Jeg har en liste af personer pakket ind i en form. Jeg ønsker uden brug af Javascript eller GET at slette en person ved at trykke på knappen ud for personen. Jeg havde tænkt at bruge et 'hidden' element for hver person, men det viser sig at værdien af 'Hidden' er 2 uanset hvilken Delete knap man trykker på.

HTML'en ser sådan ud:
<form>
<td>Person 1</td><td><input type="submit" name="DeleteEvent" value="Delete"/><input type="hidden" name="Hidden" value="1" /></td>
<td>Person 2</td><td><input type="submit" name="DeleteEvent" value="Delete"/><input type="hidden" name="Hidden" value="2" /></td>
</form>

Er noget jeg har overset eller kan man lave dette på en anden måde?

Mvh. Zappa
Avatar billede jakobdo Ekspert
01. februar 2011 - 15:10 #1
Du kunne evt. bare lave et link ala:

<a href="delete.php?person=1">Slet person 1</a>
<a href="delete.php?person=2">Slet person 2</a>

osv...
Din løsning virker ikke, da du jo netop sender hele formen af sted og du har flere variabler med navnet hidden og dermed tager den den sidste.
HVis du skal have din kode til at virke, skal du pakke hver af dine personer ind i deres egen <form>...</form>
Dog tror jeg et link vil være nemmere.
Det kan du stadig style som en almindelig knap.
Avatar billede majbom Novice
01. februar 2011 - 16:37 #2
kan du ikke bruge <button> og onclick-eventen og sende dine variabler med i url'en?
01. februar 2011 - 16:49 #3
Du kan rette det ved at lave en form for hver person, altsaa:

HTML'en ser sådan ud:
<form>
<td>Person 1</td><td><input type="submit" name="DeleteEvent" value="Delete"/><input type="hidden" name="Hidden" value="1" /></td>
</form>
<form>
<td>Person 2</td><td><input type="submit" name="DeleteEvent" value="Delete"/><input type="hidden" name="Hidden" value="2" /></td>
</form>
01. februar 2011 - 16:51 #4
Beklager, jeg havde ikke laest #1 ordenligt - efter at have foreslaaet en loesning med links siges det samme som jeg siger i #3.
Avatar billede tjens Nybegynder
01. februar 2011 - 20:34 #5
Eller du kan give knapperne forskelligt navn, og så teste hvilken der er trykket:
<body>
<?php
 
  foreach ($_POST as $key => $value) {
    if ( strpos($key, "DeleteEvent") !== false ) {
      echo '<h3> Delete function found: '.$key.' : '.$value.'</h3>';
    }
  }
 
?>
  <div>
  <form method="post">
  <td>Person 1</td><td><input type="submit" name="DeleteEvent1" value="DeleteP1"/><br>
  <td>Person 2</td><td><input type="submit" name="DeleteEvent2" value="DeleteP2"/>
  </form>
  </div>
</body>

Demo: af ovenstående: http://tjens.dk/eksperten/930450/
Avatar billede jakobdo Ekspert
01. februar 2011 - 20:50 #6
Og endnu nemmere:

<body>
<?php
if(isset($_POST['DeleteEvent'])){
  echo "Vi skal slette personen med id: " . key($_POST['DeleteEvent']);
}
?>
<div>
<form method="post">
<td>Person 1</td><td><input type="submit" name="DeleteEvent[1]" value="DeleteP1"/><br>
<td>Person 2</td><td><input type="submit" name="DeleteEvent[2]" value="DeleteP2"/>
</form>
</div>
</body>
03. februar 2011 - 19:37 #7
Vi siger alle, i grunden, det samme:  Det problem du rapporterer skyldes at du placerer alle personerne med deres variable i den samme form med de samme variabel-navne.  Du maa enten lave en saerskilt form for hver person eller ogsaa maa du give submitknapperne forskellige navne for hver person eller ogsaa maa du brug een anden teknik og anvende et link for hver person.

Hvad siger du dertil?  Er du enig og var indlaeggene til hjaelp?  I saafald bed om svar fra det medlem/de medlemmer der hjalp mest.  Eller har du flere spoergsmaal?  I saafald forklar.  Eller er det i mellemtiden lige meget?  I saafald maa du lukke spoergsmaalet ved selv at oprette et svar og accepter det.  Under alle omstaendigheder lad ikke spoergsmaalet blive haengende men faa afsluttet det spoergsmaal du startede.
Avatar billede zappa Nybegynder
04. februar 2011 - 08:23 #8
Mange tak for alle svarene.

1) At bruge sende variable med i URL'en betyder at jeg skal bruge $_GET til hente dem igen. Det prøver jeg at udgår.

2) At pakke alle delete-knapper ind i hver deres form, har jeg også overvejede. Jeg håbede dog på en pænere løsning.

3) At navngive delete-knappen f.eks. "Delete 1" synes jeg ikke om selvom det er en mulighed. I mit tilfælde ville jeg har en lang liste af "Delete 1", "Delete 2" osv.

Jeg går efter mulighed 2. dvs. point går til den første der nævnte det (Christian_Belgien).

Christian_Belgien:
Jeg takker for dit resume af hvordan man begår sig her på eksperten.

Zappa
Avatar billede zappa Nybegynder
04. februar 2011 - 08:26 #9
Rettelser til min kommentar:

1) At sende variabler med i URL'en betyder at jeg skal bruge $_GET til hente dem igen. Det prøver jeg at undgå.

2) At pakke alle delete-knapper ind i hver deres form, har jeg også overvejet. Jeg håbede dog på en pænere løsning.

3) At navngive delete-knappen f.eks. "Delete 1" synes jeg ikke om selvom det er en mulighed. I mit tilfælde ville jeg have en lang liste af "Delete 1", "Delete 2" osv.

Jeg går efter mulighed 2. dvs. point går til den første der nævnte det (Christian_Belgien).

Christian_Belgien:
Jeg takker for dit resume af hvordan man begår sig her på eksperten.

Zappa
Avatar billede jakobdo Ekspert
04. februar 2011 - 08:27 #10
zappa: Det nævnte jeg godt nok allerede i #1.
Men fair nok, Christian_Belgien nævner det da også i #2.
04. februar 2011 - 09:46 #11
Svar fra mig.
Avatar billede zappa Nybegynder
04. februar 2011 - 10:54 #12
jakobdo: Min fejl. Det overså jeg. Sender du et svar?

Christian_Belgien: Beklager meget, men jakobdo var først.
Avatar billede jakobdo Ekspert
04. februar 2011 - 10:55 #13
Jeg deler gerne.
Avatar billede jakobdo Ekspert
04. februar 2011 - 12:02 #14
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester