Validatie script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dennis Fei

Dennis Fei

26/06/2012 11:20:05
Quote Anchor link
Ik heb hier een validatie script voor een 2-tal inputvelden voor user en color.
Er zitten echter fouten in maar ik kan ze niet achterhalen. Iemand een idee?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

if($_POST['sent'] == 1)    {

     if($_POST['color'] == NULL) {
   $message1 = 'Please enter a color';
   $class1 = 'bad';
  
   }
else{
     $myColor = $_POST['color'];
     $message1 = 'Success!';
       $class1 = 'good';
}


    if($_POST['user'] == NULL) {
          $message2 = 'Please enter your name';
           $class2 = 'bad';
       }
else{
         $myName = $_POST['user'];
         $message2 = 'Success!';
         $class2 = 'good';
   }
  
}

?>
Gewijzigd op 26/06/2012 12:09:03 door Dennis Fei
 
PHP hulp

PHP hulp

26/12/2024 07:12:03
 
Obelix Idefix

Obelix Idefix

26/06/2012 12:43:38
Quote Anchor link
Dennis Fei op 26/06/2012 11:20:05:
Er zitten echter fouten in maar ik kan ze niet achterhalen. Iemand een idee?

En waarom zitten er, volgens jou, fouten in? Misschien handig om dat ook even aan te geven...

Controleren doe je, volgens mij, overigens met isset.
 
Mebus  Hackintosh

Mebus Hackintosh

26/06/2012 12:43:41
Quote Anchor link
Zoveel gebruikers online en niemand die reageert. Dan moet het script wel heel erg slecht zijn. Of misschien omdat je zelf niet eerst heb gekeken wat er wel en niet werkt. Wat heb je zelf al uit uitgezocht? Misschien een PHP-beginners handboek kopen? Online tutorials op phphulp doorlezen? FAQ?
 
Reshad F

Reshad F

26/06/2012 12:59:47
Quote Anchor link
omdat je heel fout bezig bent.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php

//array aanmaken
$errors = array();

// controleren of er gepost is doe je zo
if($_SERVER['REQUEST_METHOD'] == 'POST')
{

  if( !isset($_POST['user']) || $_POST['user'] == '' )
  {

    // Naam is niet ingevuld
    $errors[] = 'hier de error melding';
  }

  if( !isset($_POST['color']) || $_POST['color'] == '' )
  {

    // Kleur niet opgegeven
    $errors[] = 'hier de error melding';
  }


  if( count($errors) == 0 )
  {

    // hier je script runnen als alles goed is
  }
  else
  {
    $errors[] = 'je krijgt de volgende foutmeldingen!';
  }
}

?>


#fouten weergeven
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php if( count($errors) > 0 ) :
      // Er zijn errors gevonden ?>

    <div class="error">
      <ul>
      <?php foreach( $errors as $err ) : ?>
        <li><?php echo $err; ?></li>
      <?php endforeach; ?>
      </ul>
    </div>
  <?php endif; ?>
Gewijzigd op 26/06/2012 16:26:41 door Reshad F
 
John Cena

John Cena

26/06/2012 13:00:56
Quote Anchor link
reshad, foei!

CODE tags!
 
Reshad F

Reshad F

26/06/2012 13:01:28
Quote Anchor link
sorry :( #aangepast
Gewijzigd op 26/06/2012 13:01:40 door Reshad F
 
- SanThe -

- SanThe -

26/06/2012 13:08:03
Quote Anchor link
Chi Lion op 26/06/2012 13:00:56:
reshad, foei!

CODE tags!


Sorry hoor, maar ik schoot hiervan behoorlijk in de lach.
Super ;-)
 
B Polak

B Polak

26/06/2012 16:12:07
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

// check if set
if (isset($_POST['sent'])) {

// execute validation
if ($_POST['user'] == "" && $_POST['color'] == "") {
$message = "Please enter color and name";

}
else if ($_POST['user'] == "" && $_POST['color'] != "") {
$message = "Please enter a name";

}
else if ($_POST['user'] != "" && $_POST['color'] == "") {
$message = "Please enter a color";

}
else {
// validated - OK
}

}

?>
 
Wouter J

Wouter J

26/06/2012 16:23:45
Quote Anchor link
B Polak, even een tip: spring je code wat netter in, dan wordt het veel beter leesbaar. Tevens mis je de isSet controlle en moet je niet kijken met isset of een formulier verzonden is, maar met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if ('POST' == $_SERVER['REQUEST_METHOD']) {
    // verzonden

    // ...

}
?>


Vervolgens zou ik niet else if doen, maar meteen alles kijken. Is wel altijd zo fijn als je alle fouten meteen in 1 keer krijgt.
Dan moet je van $message een array maken (en dan even hernoemen naar $messages) en dan elke keer een item aan de message toevoegen.
Vervolgens kijk je of hij leeg is met count en dan kun je de code plaatsen bijv 'validated - OK'.

Eigenlijk heeft Reshad hier dus al de correcte code geplaatst en begrijp ik echt niet waarom je nu nogmaals een foutere code plaatst.

Offtopic:
Ja, ik kraak hier jou weer af en ik reageer weer alleen op jou berichtje, maar nee dat doe ik niet omdat jij het bent. Als Reshad, Piet, Henk of Jan dezelfde code had geplaatst had ik hetzelfde gezet. Voel je niet persoonlijk aangevallen, maar zie het als punten om je code te verbeteren, en her en der misschien een beetje van jezelf



Reshad, die else op regel 24 staat daar een beetje dom... Als er een error is ga je die hele variabele weer reseten en plaats je daar een nieuwe error in? waarschijlijk bedoel je $errors[], maar alsnog is het dan een vreemde if. Waarom nog een error plaatsen als er een error is? Volgens mij kan die gewoon helemaal weg.
Gewijzigd op 26/06/2012 16:24:05 door Wouter J
 
Reshad F

Reshad F

26/06/2012 16:27:37
Quote Anchor link
ja, je hebt gelijk het moest een toevoeging zijn aan de error page.. had het even snel overgetikt ^^
 
Wouter J

Wouter J

26/06/2012 16:29:45
Quote Anchor link
Nu klopt hij nog steeds niet. Tevens zal ik die melding gewoon in de HTML plaatsen, zoiets zal de designer moeten regelen, niet de developer.

waarom klopt ie niet? Omdat hij nu die melding als laatst weergeeft. Dat staat een beetje vreemd:
  • U heeft geen naam ingevuld
  • U heeft geen kleur ingevuld
  • U krijgt de volgende foutmeldingen


Als je dit alsnog zou willen, zou ik niet doen wat die laatste melding hoort niet in een lijst, zal je het moeten doen met array_unshift.
Gewijzigd op 26/06/2012 16:31:16 door Wouter J
 
- Mark -

- Mark -

26/06/2012 16:37:13
Quote Anchor link
De manier waarop de foutmeldingen worden weergeven vind ik ook niet echt mooi. Je switched veels te vaak van php naar html.

Ik doe het meestal zo

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php

    if(count($errors) > 0){
    
        echo '<div class="error"><ul><li>'.implode('</li><li>', $errors).'</li></ul></div>';
    }


?>
Gewijzigd op 26/06/2012 16:40:57 door - Mark -
 
Wouter J

Wouter J

26/06/2012 16:41:10
Quote Anchor link
Mark, ik vind het juist mooi van Reshad. Hou de scripttalen lekker gescheiden. Al is een template engine als Twig natuurlijk helemaal het best! ;-)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
{% if errors %}
    <div class=error>
        <ul>
            {% for error in errors %}
                <li>{{ error }}
            {% endfor %}
        </ul>
    </div>
{% endif %}
 
- Mark -

- Mark -

26/06/2012 17:03:22
Quote Anchor link
Van Twig heb ik nog nooit van gehoord, ik zal er eens naar kijken.

Ik ben het met je eens dat het zoveel mogelijk scheiden van talen zeer zeker goed is maar om nu voor dat beetje html elke keer alles te sluiten en her openen is wat overdreven.

Mijn eerste voorbeeld was wel een beetje teveel op elkaar gepropt. Op zijn minst kun je de foreach eruit slopen. Dat scheelt weer wat geopen en gesluit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php

    if(count($errors) > 0){
    
?>


<div class="error">
    <ul>
        <?php echo '<li>'.implode('</li><li>', $errors).'</li>'; ?>
    </ul>
</div>

<?php

    }
    
?>
 
Wouter J

Wouter J

26/06/2012 17:07:30
Quote Anchor link
Ik zou, als je PHP gebruikt, dan wel gebruik maken van de alternatieve syntax voor statements:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php if (count($errors) > 0) : ?>
  <div class=error>
    <ul>
      <?php echo '<li>...'; ?>
    </ul>
  </div>
<?php endif ?>

Of als je PHP5.4.* gebruikt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php if (count($errors) > 0) : ?>
  <div class=error>
    <ul>
      <?='<li>...' ?>
    </ul>
  </div>
<?php endif ?>


En Twig is een template taal die gebruikt wordt in Symfony. Ik ben er erg tevreden over, zie ook de website: http://twig.sensiolabs.org/
 
- Mark -

- Mark -

26/06/2012 17:24:26
Quote Anchor link
Die laatste was me nog onbekend, al zou ik die nog niet gebruiken omdat er nog niet zoveel webhosts met 5.4 zijn of wel? De meeste die ik zo zie gebruiken 5.3.* De eerste is natuurlijk een optie al zie ik er niet direct de voordelen van in.

Bedankt voor de link, ik zal er vanavond eens naar kijken.
 
Wouter J

Wouter J

26/06/2012 17:25:51
Quote Anchor link
Nee, maar ik plaats tegenwoordig al wel in mijn berichten mogelijkheden voor het script in PHP5.4.*. Zo heb je iets om vooruit te kijken en is het berichtje later ook nog te gebruiken.
 
B Polak

B Polak

26/06/2012 18:17:23
Quote Anchor link
Wouter J op 26/06/2012 16:23:45:
B Polak, even een tip: spring je code wat netter in, dan wordt het veel beter leesbaar. Tevens mis je de isSet controlle en moet je niet kijken met isset of een formulier verzonden is, maar met:


Ok thanks!

Uiteraard laat ik codes verspringen.
Echter weet ik nog niet hoe ik het moet laten verspringen op dit forum.
Ik zoek het straks wel uit.

En ieder zijn methode van code schrijven. Maar ik waardeer je feedback.
Ik zal het meenemen.
Gewijzigd op 26/06/2012 18:33:41 door B Polak
 
Reshad F

Reshad F

26/06/2012 18:51:40
Quote Anchor link
Wouter J op 26/06/2012 16:29:45:
Nu klopt hij nog steeds niet. Tevens zal ik die melding gewoon in de HTML plaatsen, zoiets zal de designer moeten regelen, niet de developer.

waarom klopt ie niet? Omdat hij nu die melding als laatst weergeeft. Dat staat een beetje vreemd:
  • U heeft geen naam ingevuld
  • U heeft geen kleur ingevuld
  • U krijgt de volgende foutmeldingen


Als je dit alsnog zou willen, zou ik niet doen wat die laatste melding hoort niet in een lijst, zal je het moeten doen met array_unshift.


ah ja hehe, je kan hem ook weglaten ik had het maar als voorbeeld even snel getikt voor hem je kan er ook iets in zetten als. bericht niet verstuurd. dan past het weer wel.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.