Valideren van teksten en namen (met toegestane vreemde tekens)
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
};
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
Quote:
En wil voorkomen dat een bestand onnodig temp wordt opgeslagen
Eh.. leg uit?
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.
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
Als je de tekst omzet naar allemaal hoofd of allemaal kleine letters werkt de validatie sneller. Een controle minder.
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)
1
2
3
4
5
6
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();
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
https://www.phphulp.nl/php/forum/topic/form-submit-probleem-met-filehidden-inputs-validate/101696/
Daarin staat onder andere als reactie:
Lijkt me de meest eenvoudige oplossing.
Je vraag klinkt voor mij als een variant op 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.
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
ñ heet …
Ik denk dat je validatie van namen beter kunt vereenvoudigen tot: is er tekst ingevuld? Klaar.
En Den Haag heeft een restaurant dat Ik denk dat je validatie van namen beter kunt vereenvoudigen tot: is er tekst ingevuld? Klaar.
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.
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.
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? ;=)
En waarom niet? Met htmlspecialchars() komt alles weer precies zoals ingevoerd op het scherm.
Ward van der Put op 24/10/2017 11:42:43:
Voor een algoritme dat de namen van horeca-gelegenheden herkent? ;=)
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.
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
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