"While updating on some delightfully unorganized PHP code (no indentation at all, split over hundreds of randomly named files, many included dozens of times), I kept running across comparisons such as:

if (MatchField($login->Value("admin"), "==", "1")) {

"and

if (IsTrue($admin)) {

"I assumed these must have some complicated logic behind them that could be the source of the bug I was hunting down," Ben writes, "so I popped open the include to try to debug them, only to find this:

function MatchField($field, $cond, $value)
{
    if ($cond == '<')
        return $field < $value;
    if ($cond == '<=')
        return $field <= $value;
    if ($cond == '==')
        return $field == $value;
    if ($cond == '!=')
        return $field != $value;
    if ($cond == '>=')
        return $field >= $value;
    if ($cond == '>')
        return $field > $value;

    if ($cond == 'like')
        return indexof("$field", "$value") >= 0;
    if ($cond == 'in')
        return indexof("$value", "$field") >= 0;

    return false;
}

"(and yes, this developer's indexof() method is a poorly written duplicate of strpos())

function IsTrue($expression)
{
    return $expression;
}

"And for good measure, a few more gems:

function ReturnTrue()
{
    return true;
}

function truth($fieldValue)
{
    if ($fieldValue == "no" || $fieldValue == "false" || $fieldValue == "off") {
        return false;
    } else {
        return $fieldValue;
    }
}

// -----------------------------------------------------------------------------
// These functions allow the passing of sensitive information over a URL.  They
// store the infomation in the session, and pass a randomly-generated key to it.

function obscure($plaintext)
{
    global $obscureData;

    reset($obscureData);
    while (list($key, $value) = each($obscureData)) {
        if ($value == $plaintext) {
            return $key;
        }
    }

    //
    // Not found; need to add...
    //
    $key = rand();
    $obscureData[$key] = urlencode($plaintext);
    return $key;
}

function unobscure($key)
{
    global $obscureData;
    return urldecode($obscureData[$key]);
}

function GetFormValue($name)
{
    global $HTTP_GET_VARS;
    global $HTTP_POST_VARS;

    if (isset($HTTP_GET_VARS[$name])) {
        return stripslashes($HTTP_GET_VARS[$name]);
    } else if (isset($HTTP_POST_VARS[$name])) {
        return stripslashes($HTTP_POST_VARS[$name]);
    } else if (isset($HTTP_GET_VARS["~$name"])) {
        return stripslashes($HTTP_GET_VARS["~$name"]);
    } else if (isset($HTTP_POST_VARS["~$name"])) {
        return stripslashes($HTTP_POST_VARS["~$name"]);
    } else if (isset($HTTP_GET_VARS[$name . "_x"])) {
        return "image button hit";
    } else if (isset($HTTP_POST_VARS[$name . "_y"])) {
        return "image button hit";
    } else {
        return "_no_form_value";
    }
}

"...And my personal favorite:"

// Split up a string of the form "arg1=val1&...&argN=valN" into an array
// of argument value pairs.

function queryStringToArray($queryString)
{
    global $GL_strlen;
    global $GL_strpos;
    if ($GL_strlen($queryString) == 0) {
        return array();
    }
    $queryArray = array();
    $args = explode("&", $queryString);
    for ($i = 0; $i < sizeof($args); $i++) {
        if ($GL_strpos($args[$i], "=")) {
            list($param, $value) = explode("=", $args[$i]);
            $queryArray[$param] = $value;
        } else {
            $queryArray[$args[$i]] = "";
        }
    }
    return $queryArray;
}

"You know, because why use $_GET, $_POST, or $_REQUEST? ...This is going to be a long project."

Don't lose too much hope, Ben! Maybe you'll find some of those functions to be useful in general.