Valideren van teksten en namen (met toegestane vreemde tekens)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Hans De Ridder

Hans De Ridder

23/10/2017 23:51:54
Quote Anchor link
Ik gebruik in een javascript een pre-validatie voor de teksten in een form.
Want met de teksten wordt ook een bestand meegestuurd.
En wil voorkomen dat een bestand onnodig temp wordt opgeslagen
als er iets niet klopt in de tekst.
Nu is die validatie alphanumeriek met wat extra tekens.
Weet iemand hoe ik dit kan bereiken met PHP?
De code in javascript:
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
function isAlphaNumericplus(str) {

  var code, i, len;

  for (i = 0, len = str.length; i < len; i++) {
    code = str.charCodeAt(i);
    if (!(code > 47 && code < 58) && // numeric (0-9)
        !(code > 64 && code < 91) && // upper alpha (A-Z)
        !(code > 96 && code < 123) && //lower case (a-z)
    !(code == 32) && // spatie
    !(code == 96) && // '
    !(code > 191 && code < 256)) // extra tekens {

document.getElementById('red').innerHTML = "6 Gebruik niet toegestane tekens. Herstel en kies bestand.";
return false;    
    }
  }
  return true;
};
Gewijzigd op 23/10/2017 23:52:26 door Hans De Ridder
 
PHP hulp

PHP hulp

29/11/2024 23:46:49
 
- Ariën  -
Beheerder

- Ariën -

24/10/2017 00:12:40
Quote Anchor link
Quote:
En wil voorkomen dat een bestand onnodig temp wordt opgeslagen

Eh.. leg uit?
 
Thomas van den Heuvel

Thomas van den Heuvel

24/10/2017 00:26:49
Quote Anchor link
Zoals je zegt, het is een pre-validatie op de computer van de gebruiker - de JavaScript wordt daar uitgevoerd. Dus er wordt nog niets geupload omdat het formulier nog niet naar de webserver verzonden is.

Is er verwarring over wat waar wordt uitgevoerd? JavaScript is aan de client zijde actief (op de machine van de persoon die via een webbrowser dit formulier bekijkt), PHP is aan de server zijde actief (webserver). Er wordt pas informatie verzonden (al dan niet inclusief bestanden) wanneer het formulier wordt verstuurd van webbrowser naar webserver. Dit heb jezelf in beheer want dit regel je via JavaScript.
 
Hans De Ridder

Hans De Ridder

24/10/2017 00:39:48
Quote Anchor link
Ik gebruik een form.
In dit geval inputs met de locatie (cafe, theater, enz.)
Het complete adres.
En de datum.
Samen met deze gegevens wordt een bestand meegestuurd ( flyer in jpg).

Dit valideer ik clientside.
Daarmee probeer ik te voorkomen dat het bestand onnodig serverside wordt opgeslagen (kan tot 4Mb per bestand)
terwijl er in de locatie, de datum, en adres fouten kunnen zitten.
Dit kunnen best veel bestanden worden.
Vandaar dat ik ook beperkingen heb met betrekking tot het tijdstip van inleveren en verschijnen op de website.
ik weet dat er gerotzooid kan worden met clientsidescripts.
Vandaar dat deze validatie ook meer preventief is.
Ook serverside wordt de validatie uitgevoerd.
Ik vind de temp oplag serverside bij grote bestanden nogal traag.

Aan serverside kan ik wel valideren in alphanumeric.
Maar dat extra (speciale tekens) weet ik (nog) niet te regelen.
Vandaar het voorbeeld in javascript.
Bedankt overigens voor jullie snelle reactie...
Vandaar deze vraag.
Gewijzigd op 24/10/2017 00:46:15 door Hans De Ridder
 
Jan R

Jan R

24/10/2017 07:04:03
Quote Anchor link
Als je de tekst omzet naar allemaal hoofd of allemaal kleine letters werkt de validatie sneller. Een controle minder.
 
Rob Doemaarwat

Rob Doemaarwat

24/10/2017 08:56:25
Quote Anchor link
Als je met echte platte ASCII werkt (dus 256 karakters = geen Unicode) komt je validatie overeen met de volgende regular expression
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
/^[0-9a-zA-Z '\xBF-\xFF]*$/

Dit betekent: Van begin (^) tot eind ($) mag de tekst enkel bestaan uit de karakterreeksen tussen de blokhaken (waarbij x80-xFF ASCII 191 t/m 256 is - hexadecimaal). In plaats van het sterretje (dit betekent "0 of meer karakters" kun je ook nog "+" gebruiken (1 of meer karakters), of {x,y} = x tot y karakters.

Deze kun je zowel in Javascript als in PHP gebruiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
//javascript
if(!str.match(/^[0-9a-zA-Z '\xBF-\xFF]*$/)) //let op: geen quotes om de regular expression
  showJavascriptError();
//PHP
if(!preg_match("/^[0-9a-zA-Z '\xBF-\xFF]*$/",$str) //hier wel gewoon quotes (string)
  geefMeldingInPhp();

Als je pagina wel in Unicode is (bijvoorbeeld UTF-8) dan heeft dat laatste stuk mbt die ASCII 191 t/m 255 niet zoveel zin, want dan werkt het helemaal anders (sowieso: waarom wil je ASCII 191 t/m 255 wel toestaan - in mijn ASCII tabel staan daar de "teken symbolen / lijnen" en de Griekse letters in?).
Gewijzigd op 24/10/2017 08:58:17 door Rob Doemaarwat
 
Obelix Idefix

Obelix Idefix

24/10/2017 09:16:53
Quote Anchor link
Je vraag klinkt voor mij als een variant op https://www.phphulp.nl/php/forum/topic/form-submit-probleem-met-filehidden-inputs-validate/101696/

Daarin staat onder andere als reactie:

Thomas van den Heuvel op 21/10/2017 18:46:08:
Als het foutloos invullen van het formulier zo'n heikel punt is zou je de bestanden apart kunnen uploaden (in een apart formulier - zie voor inspiratie bijvoorbeeld hoe je in gmail attachments kunt toevoegen), maar dit houdt dan ook in dat je het verwijderen (naast het verplaatsen naar een permanente(re) locatie) van bestanden zelf zult moeten regelen.


Lijkt me de meest eenvoudige oplossing.
 
Hans De Ridder

Hans De Ridder

24/10/2017 10:35:37
Quote Anchor link
Bedankt vroege vogels voor de snelle reacties...
Het gaat vooral om het eerste inputveld, de locatie.
Cafe's en andere gekegenheden gebruiken nogal eens aparte namen met leestekens.
Dat vang ik niet met uitsluitend alphanumeric valideren
Je kunt ook niet alles vangen.
Maar er zijn wel tekens die veelvuldig voor kunnen komen.
Ik kopieer en plak meestal zulke namen, haha
Ik sluit niet uit dat anderen dat ook zullen doen.
Het gaat ook niet om wachtwoorden of gebruikersnamen.
Dus ook spaties worden toegestaan.
Hier wat voorbeelden:

Sems restaurant/wijncafé
Café ‘t Golden Fust
Cafe Thús
3JO Campus Café
CULINAIRE GILDE BRABANÇONNE
 
Ward van der Put
Moderator

Ward van der Put

24/10/2017 11:12:24
Quote Anchor link
En Den Haag heeft een restaurant dat ñ heet …

Ik denk dat je validatie van namen beter kunt vereenvoudigen tot: is er tekst ingevuld? Klaar.
 
Hans De Ridder

Hans De Ridder

24/10/2017 11:30:12
Quote Anchor link
Ward van der Put op 24/10/2017 11:12:24:
En Den Haag heeft een restaurant dat ñ heet …

Ik denk dat je validatie van namen beter kunt vereenvoudigen tot: is er tekst ingevuld? Klaar.


Dat zit er ook al ingebakken....
Maar het is ook een experimentele site.
Waar ik behoorlijk wat zaken uitprobeer aan mogelijkheden.
En dan komen deze vragen ook voorbij.
Het aardige van dat javascript is dat er ook per letter of teken gevalideerd kan worden.
Wat ik heb begrepen is, dat het ook sneller zou zijn dan de regexper.
Maar met een korte regel maakt dat niet uit.
 
Ward van der Put
Moderator

Ward van der Put

24/10/2017 11:42:43
Quote Anchor link
Hans De Ridder op 24/10/2017 11:30:12:
Maar het is ook een experimentele site.

Voor een algoritme dat de namen van horeca-gelegenheden herkent? ;=)
 
Rob Doemaarwat

Rob Doemaarwat

24/10/2017 12:16:50
Quote Anchor link
Kun je het niet beter omdraaien: welke tekens wil je niet toestaan?

En waarom niet? Met htmlspecialchars() komt alles weer precies zoals ingevoerd op het scherm.
 
Hans De Ridder

Hans De Ridder

24/10/2017 12:19:11
Quote Anchor link
Ward van der Put op 24/10/2017 11:42:43:
Hans De Ridder op 24/10/2017 11:30:12:
Maar het is ook een experimentele site.

Voor een algoritme dat de namen van horeca-gelegenheden herkent? ;=)


Gaat me niet om horeca alleen.
Ik ben niet zo'n drankorgel, haha
Maar wel om naar keuze per type letter of teken te valideren.
Ik weet ook wel dat de meesten toch creatief zijn om gewone letters te gebruiken.
Maar ik wil toch bepaalde tekens uitsluiten...
Dat kan in die javascript prima.
Maar was benieuwd of iets vergelijkbaars ook met PHP kan.
 
Thomas van den Heuvel

Thomas van den Heuvel

24/10/2017 14:54:07
Quote Anchor link
Misschien even een bezinningsmoment, wat is nu precies het probleem? Het correct valideren van textuele invoer, of het (onnodig) uploaden van bestanden -wat blijkbaar nogal lang duurt- waardoor het des te belangrijker is dat de eerdergenoemde validatie goed verloopt?

Even een andere draai misschien. Wie is de persoon die deze informatie inklopt en upload? Zijn dit individuele gebruikers of is dit doorgaans maar één persoon? En als dit meerdere personen zijn, mogen deze dan informatie van elkaar zien? Ik ga er hierbij vanuit dat er een soort afgeschermd beheersysteem is voor deze functionaliteit. Wellicht is het een optie om bestanden apart te uploaden en daarna te koppelen aan eerder ingevulde informatie? Zo scheid je deze handelingen zodat deze ook in afzondering behandeld kunnen worden. Misschien is dat in dit geval wel een betere oplossing.

Het op voorhand uitsluiten van tekens lijkt mij overigens niet de juiste strategie. Wat @Ward aangeeft lijkt mij dan ook een beter plan: controleer simpelweg of er iets ingevuld is. EDIT: dit omdat niet echt op voorhand vastgesteld kan worden wat de vorm van deze tekst is. Noch qua lengte, noch qua tekengebruik.

Quote:
Kun je het niet beter omdraaien: welke tekens wil je niet toestaan?

Het inzetten van een blacklist is meestal ook niet zo handig. Zo kan de lijst van "verboden" zaken nogal lang worden en als je een of meer gevallen vergeet (dus op het moment dat deze incompleet is) is je blacklist in zekere zin nutteloos.

En ten overvloede, zoals in het andere topic aangegeven, tenzij je de geuploade bestanden op de webserver tijdens de uitvoering van het verwerk-script verplaatst naar een definitieve locatie worden deze vanzelf opgeschoond. Er is dan dus geen sprake van "onnodige (permanente) opslag". Ook bandbreedte is tegenwoordig niet zo'n dingetje meer, tenzij je het over giga/terabytes (of meer) hebt.
Gewijzigd op 24/10/2017 14:55:56 door Thomas van den Heuvel
 
Hans De Ridder

Hans De Ridder

24/10/2017 15:18:53
Quote Anchor link
Bedankt Thomas....
Dat omdraaien is inderdaad wel een optie.
Bepaalde letters of tekens verbieden.
De gegevens met bestand kunnen worden verstuurd door uitsluitend de leden.
Vandaar dat ik ook zoveel aandacht geef aan het validatieproces en de beveiliging.
(Ook op grond van de tips die leden van het forum hebben gegeven)
Het bestand los zien van de tekst is geen optie.
Want de aangeleverde info wordt verwerkt in de flyer.
Nu kan ik na het uploaden direct de gegevens in de flyer zetten (IPTC),
omdat alle gegevens dan bekend zijn, zowel van het bestand als de teksten.
Dat werkt nog steeds prima.
Bij de uitdraai komt de info uit de flyer weer deels op de website terecht.
Dit stukje validatie is het laatste wat er nog overbleef.
Maar zal het inderdaad eens omdraaien, en met verboden letters en tekens bekijken.

Overigens wordt het bestand ook al aan de clientside gevalideerd op grootte en type.
Dat is ook al gereed aan de serverside.

Bedankt allemaal voor de inbreng...
Gewijzigd op 24/10/2017 15:23:48 door Hans De Ridder
 



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.