Перейти к содержимому

Фотография

Не пойму в чём дело


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 11

#1 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 08 Февраль 2015 - 11:32

Про переходе на страницу сразу вылазит красное окошечко а должно при вводе меньше 10

<?php
function donate() {
global $rows, $db, $config;
$sql = "SELECT * FROM ".$rows['table']." WHERE `".$rows['login']."` = '".$_POST['login']."' LIMIT 1";
$result = $db->query($sql);
$donate = $result->fetch_assoc();


if($_POST['sum'] >= $config['min_price']):
if($result->num_rows == 1):
echo ' <form action="'.$config['url'].'" method="POST" id="pay">
  <input type="hidden" name="sum" value="'.$_POST['sum'].'">
  <input type="hidden" name="account" value="'.$_POST['login'].'"> 
  <input type="hidden" name="desc" value="Пополнение аккаунта '.$_POST['login'].'"><br>
  </form><script type="text/javascript">setTimeout(\'$("#pay").submit()\', 1000);</script>';
endif;
else:
echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Ошибка!</strong> Минимальная сумма для пополнения <b>'.$config['min_price'].'</b>.
</div></div>';
endif;
}


if(!empty($_POST['bdonate'])):
donate();
else:
donate();
endif;
?>

 

Прикрепленные изображения

  • 2015-02-08_013623.png

  • 0

На правах рекламы

#2 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 08 Февраль 2015 - 17:23

Ну так а что оно должно выводить? Если Вы при переходе на страницу сразу отправляете данные и идет проверку на сумму, а оно естественно меньше 10ти будет, а точнее вообще не числовой формат.

 

И вообще, нельзя нормально писать код общепринято? С закрывающимися и открывающимися { }

Типа вот так

if(условие){
   Какое-то действие
} elseif(условие){
   Другое дейстие
} else {
  Иначе делаем так
}

Так ведь удобнее код читать и видно что к чему относится. Я например не могу понять где какое условие куда выполняться должно при каких обстоятельствах.


  • 1

#3 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 08 Февраль 2015 - 19:21

Николай Буров

вот так?

if(!empty($_POST['bdonate'])){
   donate();
} elseif(!empty($_POST['bdonate'])){
   donate();
} else {
  //Иначе делаем так
}

  • 0

#4 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 08 Февраль 2015 - 19:40

вот так?

Вы два раза одну и ту же проверку делаете, зачем?

 

Достаточно просто

if(!empty($_POST['bdonate'])){
   donate();
} else {
  //Иначе делаем так
}

  • 0

#5 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 08 Февраль 2015 - 20:33

if(!empty(&#36;_POST['bdonate'])){ donate(); } else { //Иначе делаем так }
if(!empty(&#36;_POST['bdonate'])){
donate();
} else {
// а сюда что пихать?
}

  • 0

#6 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 08 Февраль 2015 - 21:00

// а сюда что пихать?

 

Ну блин:-) Я ж не знаю какая логика у скрипта должна быть. elseif можно вообще не применять. Все зависет от того, какие действия должны выполняться если не выполнилось условие обозначенное в if и должно ли вообще что то выполняться?

 

Функция donate() что делает? Проверяет сумму? Если да то не пойму, нафига вообще столько кода лепить? Запомните золотое правило программиста, много строк кода пишете только тогда, когда вам оплачивают за каждую строчку! Во всех остальных случаях чем меньше тем лучше.

 

Если Вам нужно просто проверить какую сумму пользователь ввел в поле в форме, это делается буквально тремя строчками без всяких там функций.

 

Например, после отправки формы обработчик проверяет:

if($_POST['sum']<10){
   $error='Сумма не должна быть меньше десяти!';
}else{
   $sum=$_POST['sum'];
} 

Вот и вся проверка

Вот в этом куске кода Вы в любом случае запускаете функцию донате()

//Если в переменной $_POST['bdonate'] есть какое то значение, выполняем donate()
if(!empty($_POST['bdonate'])):
donate();
//Иначе, если в переменной $_POST['bdonate'] нет значения, всеравно выполняем функцию donate()
else:
donate();
endif;

То есть здесь у Вас в любом случае функция выполняется, не зависимо от того есть значение в переменной $_POST['bdonate'] или нет.

 

Если Вам нужно выполнить функцию только тогда, когда в  $_POST['bdonate'] есть значение, то в проверке конструкцию elseif писать не надо. Нужно написать вот так

if(!empty($_POST['bdonate'])){
   donate();
}

Тогда если в $_POST['bdonate'] есть значение - будет выполняться функция а если нет значения - функция не выполнится. Следовательно и не выведет окошко на экран с предупреждением о сумме меньше десяти


  • 1

#7 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 08 Февраль 2015 - 22:27

Николай Буров,
Посмотри ещё вот это, суть проблемы в том что при востнановлении пароля пароль меняется у всех кто есть в базе и не приходит письмо на почту что то
 

 function restore() {global $rows, $db;
$sql = "SELECT * FROM ".$rows['table']." WHERE `".$rows['login']."` = '".$_POST['login']."' LIMIT 1";
$result = $db->query($sql);
$email = $result->fetch_assoc();
if($_POST['email'] == $email[$rows['email']] && !empty($_POST['email'])):
$npassword = rand($rows['min'], $rows['max']);
$topic = "Восстановление пароля на сервере ".settings($_GET['id'], 'name').".";
$message = "Вы запросили восстановление пароля на сервере.
<br>На ваш аккаунт было запущено восстановление пароля. Если это сделали не вы, а злоумышленники то измените пароль в кратчайшие строки.
<br><br>
Новые данные для входа
<ul>
<li>Логин: ".$_POST['login']."</li>
<li>Пароль: ".$npassword."</li>
</ul>
<br><br>
С уважением, администрация сервера ".settings($_GET['id'], 'name')."";
$headers = "From: ".settings($_GET['id'], 'mail')."\r\nReply-To: ".settings($_GET['id'], 'mail')."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=utf-8;";
$mbody .= $message."\r\n\r\n";
$result = mail($email, $topic, $mbody, $headers);




if($rows['hash'] == 'try'):
$newpassword = md5($npassword);
else:
$newpassword = $npassword;
endif;
$sql = "UPDATE ".$rows['table']." SET `".$rows['password']."` = ? WHERE `".$rows['login']."` = ?";
//$sql = "UPDATE ".$rows['table']." SET `".$rows['password']."` = ? WHERE `".$rows['login']."` = ?";
$stmt = $db->prepare($sql);
$stmt->bind_param('si', $newpassword, $_POST['login']);
$stmt->execute();
$stmt->close();


echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Выполнено!</strong> Новый пароль был отправлен на Email адресс.
</div></div>';
else:
if($_POST['restore'] == 'ok'):
echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Ошибка!</strong> Введенный вами Email адрес не подходит к данному аккаунту.
</div></div>';
endif;
endif;
}


if(!empty($_POST['restore'])):
restore();
else:
restore();
endif;

  • 0

#8 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 08 Февраль 2015 - 23:28

$mbody .= $message."\r\n\r\n";

Эту строчку я вообще не понял:-) Зачем она? Что она делает?
 
И вообще какая то странная логика у скрипта. Сначала отправляете письмо пользователю с новыми данными а потом только вносите изменения в таблицу. А если изменения не занесуться? Пользователь получит ложные данные.
 
В этом куске кода тоже самое, функция выполняется в любом случае

if(!empty($_POST['restore'])):
restore();
else:
restore();
endif;

Нужно делать одну проверку

if(!empty($_POST['restore'])){
   restore();
}

Что это за знаки вопроса в запросе?

"UPDATE ".$rows['table']." SET `".$rows['password']."` = ? WHERE `".$rows['login']."` = ?";

  • 0

#9 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 09 Февраль 2015 - 00:02

"UPDATE ".&#36;rows['table']." SET `".&#36;rows['password']."` = ? WHERE `".&#36;rows['login']."` = ?";

данные вставляются наверно, есть ещё просто смена пароля там такой же запрос и норм меняет 
 
 

function password() {
global &#36;rows, &#36;db;


&#36;sql = "SELECT * FROM ".&#36;rows['table']." WHERE `".&#36;rows['id']."` = '".&#36;_SESSION['id']."' LIMIT 1";
&#36;result = &#36;db->query(&#36;sql);
&#36;pswrd = &#36;result->fetch_assoc();


if(md5(&#36;_POST['password']) != &#36;pswrd[&#36;rows['password']]):
if(&#36;_POST['npassword'] == &#36;_POST['npassword1'] && &#36;_POST['npassword'] != &#36;_POST['password']):
if(&#36;rows['hash'] == 'try'):
&#36;npassword = md5(&#36;_POST['npassword']);
else:
&#36;npassword = &#36;_POST['npassword'];
endif;


&#36;sql = "UPDATE ".&#36;rows['table']." SET `".&#36;rows['password']."` = ? WHERE `".&#36;rows['id']."` = ?";
&#36;stmt = &#36;db->prepare(&#36;sql);
&#36;stmt->bind_param('si', &#36;npassword, &#36;_SESSION['id']);
&#36;stmt->execute();
&#36;stmt->close();


echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-success"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Выполнено!</strong> Пароль успешно изменен.
</div></div>';
else:
echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Ошибка!</strong> Пароль не был изменен. Повторите попытку.
</div></div>';
endif;
else:
if(&#36;_POST['bpassword'] == 'ok'):
echo '<div id="mess" style="position:fixed; bottom:4px; right:10px; ">
<div class="alert alert-error"><button type="button" class="close" data-dismiss="alert">&times;</button>
<strong>Ошибка!</strong> Новый пароль не должен совпадать со старым.
</div></div>';
endif;
endif;
}
if(!empty(&#36;_POST['bpassword'])){
   password();
}

  • 0

#10 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 09 Февраль 2015 - 00:08

данные вставляются наверно

Первый раз вижу что бы так писали. Ни в одном коде еще не встречал. Может и работает, спорить не буду.

 

Я вот не пойму, Вы сами код пишите или правите чужой?


Сообщение отредактировал Николай Буров: 09 Февраль 2015 - 00:09

  • 0

#11 burnout

burnout

    Ученик

  • Пользователи
  • PipPip
  • 10 сообщений
0
Обычный

Отправлено 09 Февраль 2015 - 08:45

о смена па

чужой пытаюсь править 
  • 0

#12 Николай Буров

Николай Буров

    Свой человек

  • Киберсанты
  • PipPipPipPipPip
  • 928 сообщений
614
Очень хороший
  • Пол:Мужчина

Отправлено 09 Февраль 2015 - 09:19

чужой пытаюсь править

НЕ благодарная работа:-( Если сильно много править то проще свой написать.


  • 0




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей