Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

This is my first PHP script (although I like to think I'm a good general coder).

The script accepts a number from the user, uses it to generate a regular expression, and then returns all dictionary words that match that expression.

It's currently live here, and I'd appreciate any comments on style, security, best practices, and even efficiency. Please ignore the Html for now - it's got a WordPress template to be inserted into later on.

<html>
<head>
<title>Major Analysis Number Encoder</title>
</head>
<body>
    <H1>Tool for finding keywords for major analysis</h1>
    This tool uses the numbering system shown by Derren Brown in the
    excellent book
    <a
        href="http://www.amazon.co.uk/Tricks-Mind-Derren-Brown/dp/1905026269">Trick
        of the mind</a>. For a (much better) tool that uses the older
    numbering system see
    <a href="http://www.rememberg.com/">http://www.rememberg.com/</a><br>
    <form action="majorEncoder.php" method="post">
        <label for="firstname">Number to encode (at least three digits
            please):</label> <input type="text" id="targetNumber"
            name="targetNumber" /><br /> <input type="submit"
            value="Generate results" name="submit" />
    </form>
<?php
if ($_POST != null) {

    $target = $_POST ['targetNumber'];
    if (strlen ( $target ) >= 3) {
        $f = '[waeiouyc]?';
        $regex = '/^' . $f . $target;
        echo 'You entered the target' . $target . '<br><br>';
        $regex = str_replace ( '1', 'l' . $f, $regex );
        $regex = str_replace ( '2', 'n' . $f, $regex );
        $regex = str_replace ( '3', 'm' . $f, $regex );
        $regex = str_replace ( '4', 'r' . $f, $regex );
        $regex = str_replace ( '5', '[fv]' . $f, $regex );
        $regex = str_replace ( '6', '[bp]' . $f, $regex );
        $regex = str_replace ( '7', 't' . $f, $regex );
        $regex = str_replace ( '8', '[sc]h' . $f, $regex );
        $regex = str_replace ( '9', '[gd]' . $f, $regex );
        $regex = str_replace ( '0', '[sz]' . $f, $regex );
        $lines = file ( 'words.txt' );

        $fl_array = preg_grep ( $regex . '$/', $lines );
        if (sizeof ( $fl_array ) > 0) {
            echo 'Exact matches: <br>';
            foreach ( $fl_array as $element ) {
                echo $element . '<br>';
            }
            echo '<br>';
        }
        $fl_array = preg_grep ( $regex . '/', $lines );
        if (sizeof ( $fl_array ) > 0) {
            echo 'Matches that allow trailing characters: <br>';
            foreach ( $fl_array as $element ) {
                echo $element . '<br>';
            }
        } else {
            echo "No matches found for the input $target";
        }
    } else {
        echo 'Please enter at least three digits<br>';
    }
}
?>
</body>
</html>
share|improve this question
add comment

1 Answer

One thing I would do is that str_replace can receive an array of items to look for and an array of its replacement:

PHP str_replace

// Provides: You should eat pizza, beer, and ice cream every day
$phrase  = "You should eat fruits, vegetables, and fiber every day.";
$healthy = array("fruits", "vegetables", "fiber");
$yummy   = array("pizza", "beer", "ice cream");

$newphrase = str_replace($healthy, $yummy, $phrase);

instead of going line by line to do it.

Just nit-picking but

sizeof() is an alias of count() and count() is more widely used, so use something that is more general in the PHP community

Also $_POST != null would typically be !isset($_POST) rather as explained in this post

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.