Почему отображается результат IF IFATT, но также выполняется ELSE STATEMENT? - PullRequest
0 голосов
/ 26 августа 2011

Я вытаскиваю свои волосы, пытаясь понять это ...

<?php
include('connection.php');

$template = $_GET['templateID'];
$campaign = $_GET['campaignID'];

// Grab everything in the campaign manager
$cm = mysql_query("SELECT * FROM campaign_manager WHERE campaign ='$campaign'") or die(mysql_error());

while($temp = mysql_fetch_array($cm)){
    //Checks if Template is already attached
    if($temp['paragraph'] == $template){
        echo 'Template is already attached - <a href="http://general:8888/templates">Back</a>';
    } else {
        if($temp['paragraph'] == '0' || $temp['paragraph'] == null ){
            mysql_query("UPDATE campaign_manager SET paragraph = '$template' WHERE campaign = '$campaign'") or die(mysql_error());
        }
        else {
            $geo = $temp['geo'];
            $list = $temp['list'];
            mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
        }
    }
} 
?>

Мой первый ЕСЛИ проверяет DUPЕсли это не так, он проверяет, является ли поле 0 или NULL.Если THAT CHECK Out THEN добавит новую запись в «Менеджер кампании».Хотя в настоящее время он отображает эхо первого IF и добавляет дубликат записи в менеджер кампании.Почему и КАК это происходит?

Ответы [ 4 ]

2 голосов
/ 26 августа 2011

Это время цикла, это вообще возможно, что это вызывает проблему? Две записи могут легко вызвать его эхо и обновление.

Проверьте код, чтобы убедиться, что страница также обновляется.

1 голос
/ 26 августа 2011

Нет. Это просто невозможно. Возможно, у вас где-то есть эта часть кода, и она вызывает 2 выполнения

0 голосов
/ 29 августа 2011

Ух ты, так что после переосмысления моего кода на выходных.Я придумал это ...

<?php
include('connection.php');

$template = $_GET['templateID'];
$campaign = $_GET['campaignID'];

// Grab everything in the campaign manager
$cm = mysql_query("SELECT * FROM campaign_manager WHERE campaign ='$campaign'") or die(mysql_error());
$match = 0;

while($temp = mysql_fetch_array($cm)){
    if ($temp['paragraph'] == $template){
        echo 'Template is already attached - <a href="http://general:8888/templates">Back</a>';
        $match = 1;
    }
}

$geo = $temp['geo'];
$list = $temp['list'];

if ($match == 0){
    mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
    header('Location: http://general:8888/templates/');
}

?>

Наконец-то работает.

0 голосов
/ 27 августа 2011

Давайте попробуем несколько вещей:

Во-первых, у вас есть много недостатков безопасности, поэтому я не рекомендую никому использовать приведенный выше код в форме его ввода из-за потенциальных ошибок внедрения XSS и SQL. Вы передаете параметры из GET и помещаете их прямо в значение запроса.

Правильный способ сделать это можно найти здесь:

https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project

Кроме того, предотвращение PHP SQLi через PDO (предпочтительно) или mysql_real_escape можно найти в руководстве php.net, выполнив простой поиск в Google для MySQL PDO.

... grr php ...

Хорошо, ваша логика ветвления немного ошибочна. Давайте разберемся, чтобы поработать над этим.

if($temp['paragraph'] == $template){
        echo 'Template is already attached - <a href="templates">Back</a>';
 } elseif ($temp['paragraph'] == '0') {
            mysql_query("UPDATE campain_manager SET paragraph = '$template' WHERE campaign  = $campain'") or die(mysql_error()); 
 }
   elseif ($temp['paragraph'] == null ){
            mysql_query("UPDATE campaign_manager SET paragraph = '$template' WHERE campaign = '$campaign'") or die(mysql_error());
        }
else 
{ $geo = $temp['geo'];
            $list = $temp['list'];
            mysql_query("INSERT INTO campaign_manager(campaign,paragraph,geo,list) VALUES('$campaign','$template','$geo','$list')");
        }
    }
} 
?>

Теперь я не являюсь разработчиком по профессии, это для многих кажется неправильным, я думаю, что вы можете потенциально изменить свой код и сделать его меньше. Я также попытался бы сделать его более функциональным, если бы вы могли. Кстати, у меня не было времени, чтобы исправить все эти проблемы выше, позвольте мне сказать вам, код, который я выше, также уязвим. Чтобы правильно исправить это, замените mysql_query на mysql_real_escape_string. Также убедитесь, что вы не просто получаете данные от пользователя и:

А) Неправильная дезинфекция, Б) Неправильно вывести его.

Не доверяйте всему клиентскому коду, проверка на сервере является доверенной. Не поставляйте свой код на стороне сервера на стороне клиента.

НТН

M

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...