We hebben de laatste tijd last van spookklanten, maar de voeren in het telefoon nummer veld vaak letters in.
Nu heb ik gekeken dat het alleen mogelijk in om cijfers in te voeren, maar ik krijg dit niet werkend in het script.

ps. de tabbellen(zie onderstaande script) worden uit een ander script gehaald d.m.v include("reg_form.php");

Het script staat wel geplaatst in een soort variable (dat verklaart ook de "\ "\ in de tabellen).

$reg_form = "
/////code(tabel)/////
";


onderstaand het stukje code van de telefoon nummers


	if (!isset($telefoon)) $telefoon = "";
	if (!isset($mobiel)) $mobiel = "";


			  <tr>
				<td width=\"23\">&nbsp;</td>
				<td width=\"150\">Telefoon</td>
				<td>      <input name=\"telefoon\" type=\"text\" class=\"textfield\" value=\"$telefoon\"  size=\"40\" /></td>
				</tr>
			  <tr>
				<td width=\"23\">&nbsp;</td>
				<td width=\"150\">Mobiel</td>
				<td>      <input name=\"mobiel\" type=\"text\" class=\"textfield\" value=\"$mobiel\"  size=\"40\" /></td>
				</tr>
			  <tr>

Patrick cos op 30/07/2013 15:18:37

Mensen kunnen gewoon nog steeds cijfers gebruiken, zonder dat dit een fout geeft.


	if (is_numeric($_POST['mobiel']) && strlen($_POST['mobiel']) == 10)
    {
        // veld is invalid, doe iets
        $message[] = 'Het telefoon nummer was niet juist ingevuld!';
    }



Mogelijk dat ik de vraag niet begrijp, maar je wilt toch alleen cijfers/nummers? Dan moet er toch ook geen fout volgen als dat alleen wordt ingevoerd?
De code: als het numeriek is en 10 posities, dan is het veld 'invalid'? Juist niet toch?
Bedankt, alleen krijg ik het niet werkend in mijn script.
een telefoonnummer moet bestaan uit 10 cijfers en alleen numerieke karakters.


<?

	include("inc/start.php"); 

if ($username) {
	//Doorsluisen naar pagina 'gegevens'
	header("Location: /gegevens"); // Redirect browser 
	exit; 
}

if (isset($_POST)) {


	foreach($_POST as $key => $value) {
	  $$key = htmlspecialchars($value);
	  $$key = addslashes($$key);
	}

	if ($referer == "http://www.website.nl/account/" && $password == "") header("Location: /registreren");

	$testquery = // Kijken of de usernaam al bestaat
	"SELECT
		username
	 FROM  
		users
	 WHERE
		username = '$form_reg_username'
	 LIMIT 1
	";
	
	$testresult = mysql_query($testquery)or die(mysql_error());							
	
	if (mysql_num_rows($testresult)==0) {
		$unicode = substr(md5($email),5,8);
		
		//Opslaan in de database
 		$query = "INSERT INTO `users` (`username` , `password` , `b_naam` , `cp_naam` , `email` , `telefoon` , `mobiel`, `fax` , `f_naam` , `f_adres` , `f_pcode` , `f_plaats` , `f_land` , `a_naam` , `a_adres` , `a_pcode` , `a_plaats` , `a_land` , `newsletter` , `htmlmail` , `inschrijfdatum`, `last_ip`, `referer`, `unicode`) "
				. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');"; 
			mysql_query($query)or die(mysql_error());
 		
		//Inloggen
			$query = 
				"SELECT  
					userID
				 FROM  
					users 
				 WHERE
					username = '$form_reg_username'
				 LIMIT 1
				";
			
			$result = mysql_query($query)or die(mysql_error());
			
				while ($row=mysql_fetch_array($result)) {
					$userID = $row["userID"];
						
						$_SESSION ['session_username'] = $form_reg_username;
						$_SESSION ['session_userID'] = $userID;
						
						setcookie("koekkie_username", $form_reg_username, time()+ "10000000", "/", ".website.nl");
						setcookie("koekkie_userID", $userID, time()+ "10000000", "/", ".website.nl");
										}
		
		//Doorsluisen naar pagina 'gegevens'
	 		header("Location: /gegevens"); // Redirect browser 
			exit; 
	} 
	
	if (mysql_num_rows($testresult)==0) {
		$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
	}

}
	


$target = "registreren";
$button = "<input name=\"Registreer\" type=\"Submit\" class=\"submit\" value=\"Registreer\">";

include("reg_form.php");

$content .=  $message . $reg_form;

$paginaTitel = "Registreren | website.nl";
$description = "";
$keywords  = "";

include("page.php"); 
	
?>
Je kunt met javascript al voorkomen dat er wat anders dan een getal ingevoerd worden:

<input type="text" onkeyup="this.value=this.value.replace(/[^\d]/,'')" />


if (isset($_POST)) {

controleren of een formulier verzonden is:
if($_SERVER['REQUEST_METHOD'] == "POST")



	foreach($_POST as $key => $value) {
	  $$key = htmlspecialchars($value);
	  $$key = addslashes($$key);
	}

Wat is hier je doel?

	$testquery = // Kijken of de usernaam al bestaat
	"SELECT
		username
	 FROM  
		users
	 WHERE
		username = '$form_reg_username'
	 LIMIT 1
	";

Variabele buiten quotes. Gebruik in een query mysql(i)_real_escape_string.
Waarom limit 1?

	
	$testresult = mysql_query($testquery)or die(mysql_error());							

Bouw nette foutafhandeling in ipv or die. Zeker in een live-site wil je niet dat bezoekers foutmeldingen te zien krijgen.

 		$query = "INSERT INTO `users` (`username` , `password` , `b_naam` , `cp_naam` , `email` , `telefoon` , `mobiel`, `fax` , `f_naam` , `f_adres` , `f_pcode` , `f_plaats` , `f_land` , `a_naam` , `a_adres` , `a_pcode` , `a_plaats` , `a_land` , `newsletter` , `htmlmail` , `inschrijfdatum`, `last_ip`, `referer`, `unicode`) "
				. " VALUES ('$form_reg_username' , '$password' , '$b_naam' , '$cp_naam' , '$email' , '$telefoon' , '$mobiel', '$fax' , '$f_naam' , '$f_adres' , '$f_pcode' , '$f_plaats' , '$f_land' , '$a_naam' , '$a_adres' , '$a_pcode' , '$a_plaats' , '$a_land' , '$newsletter', '$htmlmail', NOW(), '$ip', '$referer', '$unicode');"; 

Het gebruik van backticks (`) hoort eigenlijk niet in query's. Ook hier: gebruik mysql(i)_real_escape_string.


$query = 
	"SELECT  
	userID
	FROM  
	users 
	 WHERE
	username = '$form_reg_username'
	 LIMIT 1
	";

Ook hier: waarom limit 1?

while ($row=mysql_fetch_array($result)) {

while-lus is niet nodig; er is immers maar 1 resultaat.


if (mysql_num_rows($testresult)==0) {
		$message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";

Denk dat het hier niet 0 maar 1 moet zijn.
Verder is inline css niet meer van deze tijd en zou ik geen " gebruiken in php. Voordeel: je hoeft niet meer te escapen.
Dit script is inderdaad niet van deze tijd, dit script komt nog ergens uit 2007.
Ik ben het huidige script wat aan het verbeteren.

Bedankt voor je tips.


Het rare is zodra ik de 0 naar een 1 verander of ELSE gebruik dan blijft de 'message' standaard bovenin het scherm staan.
Zodra ik mezelf nu aanmeld dan krijg ik geen melding, indien ik een bestaande account gebruikt dan krijg ik netjes de 'message'.


if (mysql_num_rows($testresult)==0) {
        $message = "<font color=\"#FF0000\">De door uw gekozen gebruikersnaam is reeds in gebruik. Kies een andere gebruikersnaam.</font>";
Telefoonnummers HOEVEN niet uit 10 nummers te bestaan.

+3161234567 is geldig
112 is geldig
0800-8090 is geldig
0184-123456 is ook geldig
1234.456.7890 is geldig
+20 100 123 2372 is geldig (Egypte)
(+31) 062344873 is geldig

Laat mensen gewoon alles intypen wat ze willen.
Strip er zelf de zooi uit met een EREG_REPLACE
En kijk daarna of het 10 cijfers zijn, als het Nederlands is.

Kortom: wat wil je precies? Een goed telefoonnummer?
Of een paar cijfers?
En wat ga je met het nummer doen? Als het geautomatiseerd moet gaan, dan moet je het wel goed formatten. Bij mensen voldoet alles.
Je kan zelf de spaties/punten/streepjes eruit vissen.

Toevoeging op 31/07/2013 13:13:32:

En op PHPhulp zelf: http://www.phphulp.nl/php/script/data-verwerking/valideer-telefoonnummer/708/
Eddy E op 31/07/2013 13:13:03

Laat mensen gewoon alles intypen wat ze willen.
Strip er zelf de zooi uit met een EREG_REPLACE
En kijk daarna of het 10 cijfers zijn, als het Nederlands is.

Helemaal mee eens, op ereg_replace na:
This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged. --> preg_replace()
Wat gebeurd er in dit geval als spookklanten zich aanmelden met 'letters' ipv van een telefoonnummer?
de klanten vullen het in het algemeen wel gewoon goed in.

Of is er een eenvoudigere manier om dit te voorkomen?
http://www.stopforumspam.com/ heeft bijvoorbeeld 99% van de ip's van de spookklanten die bij ons komen.
Maar 5miljoen ip's in .htpaccess is ook geen optie.
Ik heb toch maar de module van stopforumspam toegevoegd.
Alleen wil ik nu nog tellen hoeveel spook klanten gestopt worden, dit doe ik met de onderstaande regel.
zodra een spook de pagina bezoekt dan komt er niet +1 in de database maar +4
ook als ik een mail funtie in het script zet dan wordt deze ook 4x verstuurd, enig idee waarom?

mijn script staat hierboven (30/07/2013 16:48:35)




	mysql_query("UPDATE spook SET aantal = aantal + 1 LIMIT 1" );

Reageren