Странная логическая реакция - PullRequest
1 голос
/ 15 марта 2011
$alerter2="false";
for ( $counter = 0; $counter <= count($filter); $counter++) {
    $questionsubmitted=strtolower($_POST[question]);
    $currentcheck =$filter[$counter];
    $foundvalue=stripos((string)$questionsubmitted,(string)$currentcheck);
    echo $foundvalue;
    if ($foundvalue==0) {
        $alerter2="true";
    } else { }
}

if (!($alerter2=="true")) {
    $sql="INSERT INTO Persons (Name, Email, Question)
        VALUES
        ('$_POST[name]','$_POST[email]','$_POST[question]')";
} else {
    echo "Please only post appropriate questions";
}

По какой-то причине, когда я запускаю это, stripos возвращает 0 каждый раз для каждой итерации. Это должен быть фильтр, и, используя echo, я обнаружил, что stripos = 0 каждый раз, когда он появляется. Однако, когда я использую 0 в if, он возвращает true даже для тех, у кого нет слова.

Где я должен использовать mysql_real_escape_string? После запроса? Обратите внимание, я делаю это фрагмент кода, где я хочу, чтобы пользовательский ввод был сохранен в базе данных.

Ответы [ 3 ]

2 голосов
/ 15 марта 2011

stripos возвращает false, если значение не найдено, или 0, если это первый символ. Проблема в том, что php автоматически приводит логическое значение к целому числу 0 или 0 к значению false. Поэтому я думаю, что здесь происходит бросок, и поэтому условие не делает то, что вы хотите.

Вы также можете использовать ===, чтобы также проверить тип переменной:

if ($foundvalue === 0) {
    $alerter2="true";
}

Более подробную информацию об этой проблеме можно найти в связанной документации для stripos.

Вам также следует удалить пустое предложение else для более чистого кода и использовать mysql_real_escape_string для очистки значений перед их помещением в базу данных.

0 голосов
/ 15 марта 2011

Кроме того,

$questionsubmitted=strtolower($_POST[question]);

вероятно должно быть:

$questionsubmitted=strtolower($_POST['question']);
0 голосов
/ 15 марта 2011

Вам нужно изменить

if ($foundvalue==0)

до

if ($foundvalue===0) // three equals signs

или что-то эквивалентное, в зависимости от вашей логики (я не совсем понял, что происходит).

Но, как все говорят, ЭТОТ КОД ОТКРЫТ ДЛЯ НАПАДЕНИЙ С ИНЪЕКЦИЕЙ SQL (среди прочих проблем).

...