Dark
Dark

Reputation: 90

PHP OOP newbie - Need to get $_POST data into a variable

I was basically playing around with OOP and was creating a way to validate and sanitise input when I started to run into problems sanitising and then performing further validation. What I'm looking for is to take the posted $_POST['name'] data, sanitise the input to remove any numbers and validate that the data left is neither null or numeric characters.

But I cant get the sanitised input saved to $sanitised, It seems to be empty, but when I replace

$sanitised=$fv->noNumbers($_POST['name']);

with

$sanitised=preg_replace('/[0-9]/', '', $_POST['name']);

everything works fine, so I think I'm messing up something in this $sanitised variable.

I wanna learn so either a solution to this or a "you're an idiot and doing it all wrong" would be much appreciated.

<?php
    class formSanitise {

        public function noNumbers($value) {
            $value = preg_replace('/[0-9]/', '', $value);
        }
        public function isEmpty($value) {
                    return (!isset($value) || trim($value) == '') ? true : false;
        }
        public function isAlpha($value) {
            return preg_match('/[^a-z]/i', $value) ? false : true;
        }
?>

processor.php

<?php
    include('class.formSanitise.php');
    $fv = new formSanitise();

    $sanitised= $fv->noNumbers($_POST['name']);

    if ($fv->isEmpty($sanitised)) {
        $fv->addError('Name', 'Please enter something');
    }
    if (!$fv->isAlpha($sanitised)) {
        $fv->addError('Name', 'Please enter your name');
    }
?>

Upvotes: 2

Views: 597

Answers (2)

SomeKittens
SomeKittens

Reputation: 39532

You'll either need to create a return in noNumbers or pass $value by reference.

Return method:

public function noNumbers($value) {
            return preg_replace('/[0-9]/', '', $value);
        }

Reference

public function noNumbers(&$value) {
            $value = preg_replace('/[0-9]/', '', $value);
        }

returning a value means that $value is an entirely different variable, and will be assigned to $sanitized when it's returned from the function. Passing by reference means that $value is the exact same variable as the one you passed to noNumbers and as such, anything that happens to the variable inside the function will happen to the variable that has been passed in.

Upvotes: 1

Rubin Porwal
Rubin Porwal

Reputation: 3845

In the above code snippet the function noNumbers does not return any value.The argument passed to the function has a scope within that function only and in order to make that value available to calling function there must be a return statement within function which will return the value to the calling function .Alternatively you can pass the value to function by reference .

Upvotes: 0

Related Questions