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
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?
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.
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" );