Enkele PHP-vraagjes

Status
Niet open voor verdere reacties.

Kligham

Gebruiker
Lid geworden
7 jan 2009
Berichten
389
Hallo,

Ik ben nu al een heel stukje verder met mijn registratie pagina, maar ben ondertussen op nog een aantal vraagjes gestoten:

1) Ik heb een aantal invoer-vakjes in mijn pagina, waar de mensen hun gegevens moeten invullen. Ik controleer de gegevens die ze invoeren op een aantal dingen met behulp van de ereg() functie. Dit lukt mij al. Het enigste probleem is dat als ik iets invoer met een spatie tussen vb. Maalse Steenweg dan geeft hij een foutmelding omdat mijn ereg() functie geen spaties toelaat. Is er een manier waarop je spaties kunt toelaten in de ereg()? Als dit niet mogelijk is, is er dan een functie waar je ervoor kunt zorgen dat spaties in de invoer eruit gehaald worden, zodat ze kunnen gecontroleerd worden door mijn ereg() functie. Ik weet in ieder geval dat de trim() dit niet kan.

2) Nu is het zo dat de gegevens in een database worden opgeslaan. Ik weet ondertussen al dat er backslashes moet worden toegevoegd aan speciale karakters om ervoor te zorgen dat er geen problemen plaatsvinden. Nu is het zo dat ik niet weet of ik daarvoor moet gaan kiezen tussen addslashes() (en bijgevolg stripslashes() bij het terughalen uit de database of de mysql_real_escape_string(). Ik heb ook al gelezen dat de tweede ervoor zorgt dat er geen sql injection kan gebeuren.

Wat zijn de verschillen tussen beide, en welke is daarom het beste te gebruiken?

3) Er is ook nog zoiets als striptags(). Moet je deze functie ook consequent bij elke invoer naar je database gebruiken?

mvg,

Peter
 
Laatst bewerkt:
Weet er iemand een antwoord op vraag 1. Op de andere heb ik al min of meer een antwoord gevonden in andere scripts op het internet.
 
Er is voor reguliere expressies een token voor 'whitespace', ie: alle tekens die je niet kunt zien. Misschien heb je daar wat aan.

(Het token is \s , je kunt ook ff googlen)
 
Ik maak nu gebruik van de posix character [:blank:] om enkel een spatie toe te laten. Het probleem is nu wel zo dat ze ook meer dan 1 spatie kunnen zetten.
bvb. Jan (spatie spatie spatie spatie spatie spatie) Aap (spatie spatie spatie spatie spatie spatie) Wax

Op dit forum kan je bijvoorbeeld niet meer dan 1spatie tussen 2 woorden hebben, en dat is eigenlijk wat ik zou willen, alleen hoe moet dit dan)

Ik heb dit al geprobeerd tegen te gaan door te zetten:
ereg('^[[:blank:]{0,1}A-Za-z0-9]+$') en ereg('^[[:blank:{0,1}]A-Za-z0-9]+$'

maar dat helpt niet, nl. in het eerste geval kan ik er blijven typen en in het 2de geval kan ik geen spatie typen omdat ik [:blank:] verstoor.

Is dit dan niet mogelijk of doe ik het verkeerd?
 
Laatst bewerkt:
Je kunt ook zoiets gebruiken om spaties te strippen ->

PHP:
function strip_spaces ( $string ) {
    while ( strpos ( $string, '  ' ) !== false ) { $string = str_replace( '  ', ' ', $string ) } 
    return $string;
}
 
Ik heb het geprobeerd te integreren in mijn validatie maar ik zit daarbij met een probleempje. Die functie moet een aantal keer hergebruikt worden, en moet daarbij natuurlijk in verschillende $... zoeken. Aangezien ik nog niet zo goed overweg kan met php, weet ik niet hoe ik ervoor moet zorgen dat de bovenstaande functie niet in $string gaat zoeken maar in bvb $gebruikersnaam.

Hier is jou script en waar ik hem graag wil gebruiken:

PHP:
function strip_spaces ($string ) {
    while ( strpos ( $string, '  ' ) !== false )
    	{ $string = str_replace( '  ', ' ', $string );
    } 
    
    return $string;
}

PHP:
//Validatie gebruikersnaam
function valid_gebruikersnaam($gebruikersnaam, $minlength = 2, $maxlength = 16){

	$gebruikersnaam_check = trim($gebruikersnaam);
 
	strip_spaces($gebruikersnaam_check);
	
    if (empty($gebruikersnaam_check))
    {
        return false; // Het veld is leeg
    }
    
    if (strlen($gebruikersnaam_check) > $maxlength)
    {
        return false; // De gebruikersnaam is te lang
    }
    
    if (strlen($gebruikersnaam_check) < $minlength)
    {
        return false; // De gebruikersnaam is te kort
    }
    
    //Connectie met database
    $connection = db_connect();
    
    //Controle of gebruikersnaam uniek is
    $query = $connection->query("select * from gebruiker where gebruikersnaam ='" . $gebruikersnaam_check. "'");
    if (!$query){
    	throw new Exception('De query kon niet uitgevoerd worden');
    }
    
    if ($query->num_rows > 0){
    	return false; //Er is al zo'n gebruikersnaam aanwezig
    }
    
    $check = ereg('^[[:alnum:][:blank:]]+$', $gebruikersnaam_check); //A-Z, a-z, 0-9 en spaties zijn toegelaten
 
    if ($check)
    {
        return true; // Er zijn geen verkeerde tekens gevonden
    } else
    {
        return false; //Er zijn verkeerde tekens gevonden
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan