[PHP]Lege checkbox in array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RickvanHaas
  • Registratie: Oktober 2004
  • Laatst online: 15-05-2024
Hey,

Ik werk aan een online bestelformulier, waarbij naast de naam van het product een textfield is voor het aantal en een checkbox waar de gebruiker kan aangeven dat hij/zij het ingevoerde aantal daadwerkelijk wil bestellen.

Het textfield heeft de naam waarde[], en de checkbox de naam bestel_array[], beide een array dus.

De verzending loopt vrij aardig: ik kan van ieder product het aantal bestelde artikelen achterhalen. Hier zie je de betreffende code, die dus uitgevoerd wordt nadat het bestelformulier verzonden is:
<?php
echo"<h1>Bestellinggegevens</h1>";
$waarde = $_POST['waarde'];
$num_totaal = count($waarde);
$bestel_array = $_POST['bestel_array'];
$num_bestellen = count($bestel_array)+1;

if($num_totaal > 0){
echo"<table>\n
<tr>\n
<td><strong>Bestelling</strong></td>
<td><strong>Bestellen?</strong></td></tr>\n";

for($a = 0; $a < $num_totaal; $a++){
echo "<tr> <td>".$waarde[$a]."</td>
<td>".$bestel_array[$a]."</td></tr>";
}
}
echo"</table>";
?>

Probleem is nu, dat $bestel_array alleen de waarden opneemt die aangevinkt zijn. Als ik dus print_r($_POST); doe, zie ik het volgende:

[waarde] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] => 60
[6] => 40
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
)
Dat klopt helemaal, maar als we dan naar de array van de checkboxen kijken:

[bestel_array] => Array
(
[0] => bestellen
[1] => bestellen
)

Dat zou dus moeten worden:
[bestel_array] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] => bestel
[6] => bestel
[7] =>
[8] =>
[9] =>
[10] =>
[11] =>
[12] =>
[13] =>
)

Heeft iemand misschien een idee wat de oplossing hiervoor zou kunnen zijn? Dank je.

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

Indices in je checkbox naam en waarde input plaatsen, zodat je ze met elkaar kan matchen (als je erdoorheen loopt/whilet/foreacht).

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Radiobuttons gebruiken. Een checkbox wordt nou eenmaal niet verzonden als deze niet geselecteerd is.

Acties:
  • 0 Henk 'm!

  • Cavorka
  • Registratie: April 2003
  • Laatst online: 27-03-2018

Cavorka

Internet Entrepreneur

djluc schreef op 19 oktober 2004 @ 19:52:
Radiobuttons gebruiken. Een checkbox wordt nou eenmaal niet verzonden als deze niet geselecteerd is.
Workaround. Dat hoeft niet en is niet nodig in dit geval, checkbox werkt net zo goed, en dan hoef je er maar een te plaatsten, i.p.v. twee. Dat is het hele idee van een checkbox. :)

Radiobutton is voor meerdere keuzes (meer dan 2). Checkbox voor ja/nee | 1/0 | on/off.

Zie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

print "<pre>" ;
print_r($_POST) ;
print "</pre>" ;

print "<form action='form.php' method='post' name='HRNew'>  
<input type='checkbox' name='hoei[0]'>
<input type='text' name='hoei_1[0]'>

<input type='checkbox' name='hoei[1]'>
<input type='text' name='hoei_1[1]'>

<input type='Submit'>
</form>" ;

?>

[ Voor 33% gewijzigd door Cavorka op 19-10-2004 19:57 ]

the-blueprints.com - The largest free blueprint collection on the internet: 50000+ drawings.


Acties:
  • 0 Henk 'm!

  • RickvanHaas
  • Registratie: Oktober 2004
  • Laatst online: 15-05-2024
Checkboxen zouden dus moeten werken, maar de vraag voor mij blijft: hoe zorg ik dat een niet-aangevinkte checkbox in de array gewoon een '0' wordt ofzo, niet leeg iig.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dat kan niet omdat ene niet aangevinkte checkbox niet in het request meegezonden wordt. Je php script dat de pagina verwerkt kan dus onmogenlijk weten welke checkboxen er wel op die pagina stonden maar niet zijn meegestuurt. Noem ze ipv bestel_array[] gewoon bestel_array[$id] en het hele probleem is opgelost.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • RickvanHaas
  • Registratie: Oktober 2004
  • Laatst online: 15-05-2024
Dat was ook mijn eerste planning, maar ik kwam toen een beetje vast te zitten met de post-request.

Ik maak dus weer die loop aan, en kan ik hem dan gewoon ophalen als
$bestellen = $_POST['bestel".$a."'];

?

Dank je,
Rick

Acties:
  • 0 Henk 'm!

  • ATS
  • Registratie: September 2001
  • Laatst online: 18-09 15:14

ATS

Kijk eens naar de isset() functie...

[ Voor 83% gewijzigd door ATS op 20-10-2004 12:38 ]

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
4
5
if(IsSet($handel)) {
    $handel='Ja';
} else {
    $handel='Nee';
}

[ Voor 22% gewijzigd door Verwijderd op 20-10-2004 12:48 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

RickvanHaas schreef op 19 oktober 2004 @ 21:54:
Dat was ook mijn eerste planning, maar ik kwam toen een beetje vast te zitten met de post-request.

Ik maak dus weer die loop aan, en kan ik hem dan gewoon ophalen als
$bestellen = $_POST['bestel".$a."'];

?

Dank je,
Rick
Wat doe je vreemd? Waarom zou je wel kunnen werken met een array als je [] doet en niet als je [1] doet? Het enige verschil dat je krijgt is dat je nu niet een oplopende array hebt, maar gewoon met een index erbij. Probeer eens een beetje te debuggen en schrijf een klein testje. Kijk gewoon eens wat er gebeurt waneer je het volgende scriptje uitvoert:

PHP:
1
2
3
4
5
6
7
8
9
10
<html>
 <body>
<?
print_r($_POST);
?>
  <form method="post">
   <input type="text" name="bestel[10]" />
  </form>
 </body>
</html>



--

Owh, en het is ook niet nodig om onder je post je naam te zetten. Deze staat er immers ook naast ;). Algemene regels hoe je op het forum te gedragen (Netiquette) #reageren

[ Voor 10% gewijzigd door Janoz op 20-10-2004 13:19 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1