Avatar billede Mivia Nybegynder
09. november 2009 - 16:55 Der er 8 kommentarer og
1 løsning

php formular - skal tjekke for om brugeren har krydset _begge_ felter af...

Hej eksperter.
Jeg er selv ikke en haj til php, så denne lidt indviklede kode virker for mig en smule uoverskuelig.

Koden kommer fra et webshop-system, hvor den anvendes til at tjekke om brugeren har afkrydset en checkbox til at acceptere handelsbetinelser. Hvis ikke de er accepteret, får man ikke lov til at komme videre.

Jeg har brug for at have endnu en checkbox, som brugeren også skal udfylde for at komme videre.

Til en start, har jeg meget simpelt kopieret den første checkbox, således at jeg har de 2 boxe jeg vil have.
Mit problem er nu, at formularen bliver godkendt hvis bare 1 af de to boxe er krydset af.

Så hvordan gør jeg det til et krav at begge boxe er krydset af?

Koden som den ser ud nu:

<?php if (!$this->getAgreements()) return; ?>
<form action="" id="checkout-agreements" onsubmit="return false;">
<ol class="checkout-agreements">
<?php foreach ($this->getAgreements() as $_a): ?>
    <li>
        <p class="agree">
            <input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" /> 
        Jeg frasiger mig returretten for produkter der tilpasses specielt til mine behov.
        </p>
      <div class="agreement-content"<?php echo ($_a->getContentHeight() ? ' style="height:' . $_a->getContentHeight() . '"' : '')?>>
            <?php if ($_a->getIsHtml()):?>
                <?php echo $_a->getContent() ?>
            <?php else:?>
                <?php echo nl2br($this->htmlEscape($_a->getContent())) ?>
            <?php endif; ?>
        </div>
        <p class="agree">
            <input type="checkbox" id="agreement-<?php echo $_a->getId()?>" name="agreement[<?php echo $_a->getId()?>]" value="1" /> 
            <label for="agreement-<?php echo $_a->getId()?>"><?php echo $_a->getCheckboxText()?></label>
        </p>

    </li>
<?php endforeach ?>
</ol>
</form>
Avatar billede repox Seniormester
09. november 2009 - 17:49 #1
Ja, det er da en noget uoverskuelig kode...
Hvordan validerer du?
Avatar billede Slettet bruger
09. november 2009 - 17:57 #2
Du skal bare give din anden checkbox en value som eks 2.

Og så checke om

checkbox1 == 1; && checkbox2 == 2;
Avatar billede Mivia Nybegynder
09. november 2009 - 17:58 #3
Validerer... i hvilken sammenhæng?
Er som sagt ikke ret godt inde i php...
Avatar billede Slettet bruger
09. november 2009 - 17:58 #4
Bare uden mine semikolons på nederste linie ofc.
Avatar billede Mivia Nybegynder
09. november 2009 - 17:59 #5
@Zeska: det vil jeg da lige prøve... :)
Avatar billede Mivia Nybegynder
09. november 2009 - 18:12 #6
Ved at ændre den første del af koden til:

<?php if ((!$this->getAgreements()) && box1 == 2)  return; ?>
<form action="" id="checkout-agreements" onsubmit="return false;">
<ol class="checkout-agreements">
<?php foreach ($this->getAgreements() as $_a): ?>
    <li>
        <p class="agree">
            <input type="checkbox" id="box1" name="box1" value="2" />&nbsp;
...
...
...

Er den nu blevet ligeglad med om min første checkbox er afkrydset. Det er altså kun boks nummer to den tjekker (den oprindelige).
Men eftersom jeg ikke er helt med på hvor den laver responset på tjekket, har jeg nok ikke sat tjekket for min egen "box1" korrekt ind... (?)
Avatar billede repox Seniormester
09. november 2009 - 19:50 #7
Du har et virvar af objekter som gør nogle forskellige ting i forbindelse med din validering.
Det er umuligt at se hvad det er meningen der skal ske uden at se hvad dit objekt gør.
Avatar billede Mivia Nybegynder
09. november 2009 - 21:59 #8
Ja, den er urimeligt uoverskuelig, for at man skal kunne hente de forskellige værdier mv. fra et brugervenligt interface. Men det virker lige modsat, når man prøver at forstå koden bag.

Om muligt, så kan jeg blive nødt til at kassere de mest komplicerede, og skrive det om på en mere enkelt måde.
Det eneste der er vigtigt fra den oprindelige kode, er tekst-boxen, som bare skal kunne læses.
Resten kan nok improviseres til ikke at skulle afhænge af udenforstående oplysninger.
Avatar billede Mivia Nybegynder
18. august 2010 - 20:44 #9
Spørgsmålet er forældet, så lukker det.
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