controleren verzenden formulier

Status
Niet open voor verdere reacties.

falcojugger

Gebruiker
Lid geworden
29 dec 2008
Berichten
279
Hallo allemaal,

Ben momenteel bezig met mijn loginscript uit te breiden.
Ik wil een tekstregel weer laten geven op het moment dat iemand op de login-button drukt en vergeten is iets in te vullen.
Ik heb er een functie van gemaakt:

PHP:
function checklogin() {
if(isset($_POST['submit']) && empty($_POST['gebruiker']) && !empty($_POST['wachtwoord'])){
$opmerking = "* U heeft geen gebruikersnaam ingevuld.";}
elseif(isset($_POST['submit']) && !empty($_POST['gebruiker']) && empty($_POST['wachtwoord'])){
$opmerking = "* U heeft geen wachtwoord ingevuld.";}
elseif(isset($_POST['submit']) && empty($_POST['gebruiker']) && empty($_POST['wachtwoord'])){
$opmerking = "* U heeft nog niets ingevuld.";}
else{
$opmerking = "";}

print "<font color='#FF0000' size='1'> ".$opmerking." </font>";
}

waarom werkt dit niet? of tenminste: het werkt wel, maar hij pakt elke keer de ELSE
(niks dus)
 
Ik zou ipv

PHP:
empty($waarde)

gebruiken:

PHP:
trim($waarde) == ''

Dan kijk je meteen of er niet alleen een spatie in staat.
 
oke, dat is waar.
ik heb het aangepast, maar zoals ik al verwachte verandert dat niks.
het is wel raar dat als ik iets bij wachtwoord invul (onzin) en op de login-button druk, firefox dit wel ziet en vraagt of ik het wil onthouden.
misschien is dat een hint voor degenen die mij willen helpen.
 
Oké, misschien een beetje obvious, maar je hebt als method wel "POST" opgegeven?
 
Nee, helaas die gaat het niet worden. heb netjes method=post opgegeven:
PHP:
<form method="post" action="<?php $_SERVER["PHP_SELF"] ?>">

!@#&6!@#*&)!71$!

sorry ik kom er net zelf achter, in het formulier was ik vergeten de submit button een naam te geven, hij kon deze dus nooit terugvinden. topic opgelost en bedankt voor de trim-tip!
 
Ik zou hem trouwens zo schrijven:

PHP:
function checkLogin( ) {
  $aError = array( );
  if( $_SERVER['REQUEST_METHOD'] == 'POST' ){
    if( trim( $_POST['gebruiker'] ) == '' ) { $aError[] = "Gebruikersnaam"; }
    if( trim( $_POST['wachtwoord'] ) == '' ){ $aError[] = "Wachtwoord"; }
  }
  return $aError;
}

$aErrors = checkLogin();
if( count( $aErrors ) > 0 ) {
  echo 'U heeft de volgende velden niet correct ingevuld:';
  echo '<ul>';
  foreach( $aErrors as $sError ) {
    echo '<li>', $sError, '</li>';
  }
  echo '</ul>';
}

EDIT: De fout die je net zelf aangaf is ook de reden om die manier van validatie niet te gebruiken. De manier om te kijken of een formulier verzonden is, is:

PHP:
$_SERVER['REQUEST_METHOD'] == 'POST'
 
Laatst bewerkt:
Persoonlijk zou ik een functie niet met $_POST-functies gebruiken.

Ik zou eerder dit doen:

functions.php
PHP:
function checkLogin($user, $password) {
  if(trim($user) == '' || trim($password) == '') {
    $return = "Gebruikersnaam en/of wachtwoord"; }
  } else {
    $return = true;
  }
  return $return;
}

Om vervolgens op je verwerking dit te doen:
PHP:
<?php
require_once("functions.php");
if($_SERVER['REQUEST_METHOD'] == "POST") {
  $emptyInput = checkLogin($_POST['gebruiker'], $_POST['wachtwoord']);
  if($emptyInput === true) {
    // Allebei niet leeg -> verwerken
  } else {
    echo $emptyInput;
  }
}
?>
Tis maar net wat je gewend bent maar functies gebruik je over het algemeen vaker dan 1x.
 
Klopt, ik had m'n functie meer toegespitst op wat de TS al had staan, jouw manier is inderdaad makkelijker ivm hergebruik.
 
Hallo,

Als je in php een formulier naar de huidige server wilt versturen, kun je de volgende opties gebruiken:

- <form method="POST" action="<?=$_SERVER['php_self'];?>"
- <form method="POST" action="">
- <form method="POST" action="<?php echo $_SERVER['php_self']; ?>"

Deze opties hebben allemaal dezelfde functie, de 2e heeft mijn voorkeur:p
Als je het over effientie hebt.

Met vriendelijke groet,

B. Jones
 
Haha, daarom zeg ik;

de 2e heeft mijn voorkeur. Maak je geen gebruik van php_self
 
Dan vind ik het wel vreemd dat je juist in deze vraag wél PHP_SELF aan iemand anders "aanbeveelt" :rolleyes:

Maar goed, we dwalen af :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan