Код (Text): <? if(!isset($_SESSION['id']) and !isset($_SESSION['login'])) { print "<html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> <script language=\"javascript\">top.location.href=\"/\";</script> <title>Перенаправление</title> </head> <body bgcolor=\"#eeeeee\" topmargin=\"0\" leftmargin=\"0\"> </body> </html>"; exit; } $page = 'Обмен средств'; if(isset($_POST['amount'])) { $sum = sf($_POST['amount']); // что то тут надо сделать,а что понять не могу. $date = time(); if($sum > 0) { if($us_data['money_out'] >= $sum) { mysql_query("UPDATE tb_users SET money_out = money_out - '$sum', money = money + '$sum' WHERE id = '$usid'") or die(mysql_error()); mysql_query("INSERT INTO tb_history (user_id, summa, date, comment, type) VALUES ('$usid', '$sum', '$date', 'Обмен средств на сумму $sum', 'convert')") or die(mysql_error()); echo '<center><font color="green">Вы успешно обменяли средства</font></center><br>'; }else echo '<center><font color="red">Не достаточно средств на балансе</font></center><br>'; }else echo '<center><font color="red">Не верная сумма</font></center><br>'; } ?> <p> Обменять денежные средства с баланса для вывода на баланс для оплаты.<br> Комиссия системы за обмен составляет <b>0%</b>.<br> </p> <form method="post" action=""> <label title="Для добавления всей суммы, нажмите на цифры!" onclick= this.form.elements["amount"].value=<?=$us_data['money_out']; ?>>Сумма (Доступно: <span ><?=$us_data['money_out']; ?></span> руб)</label> <input type="text" size="15" value="" maxlength="7" name="amount"> <label></label> <input class="buttonmail" value="Обменять" type="submit" /> </form> <div id="formsgifts" style="display: none"></div> хочу убрать баг,когда человек вводит вот такое число +100' то ему зачисляются средства,как сделать проверку? вот здесь что то не так - $sum = sf($_POST['amount']);
Погорел? это называется SQL инъекция, ищи в интернете информации много. PS в твоем коде надо много что менять, начиная от mysql_query, это устаревшая функция(функции), надо использовать те что mysqli_ и там собственно есть экранирование запросов, это как раз то, что решит твою проблему. Добавлено спустя 4 минуты 13 секунд: ну или попробуй вот такую хрень: Код (PHP): $sum = mysql_escape_string( sf($_POST['amount']) );
спасибо за ответ,а вот так не получится? $amount = $_POST['amount']; $sum = $amount; вроде все нормально,но пишет ошибку вот такую: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use nea типо что то не поддерживает) $sum = mysql_escape_string( sf($_POST['amount']) ); то что вы кинули<не канает)
Re: помогите решить. 1. синтаксис ломается поэтому вопрос не выполняется. внимательно при составлении запроса к субд 2. эскейп тут правильно посоветован. неправильно применен.
Re: помогите решить. А что конкретно не так применяется? $sum экранируется и в дальнейшем в запросе используется только $sum Добавлено спустя 29 секунд: Ну если не брать в учет что весь этот не правильный и убогий.
Re: помогите решить. не понял,а как его правильно применить? намекните пожалуйста,или покажите пример)спасибо) <?php $item = "Zak's and Derick's Laptop"; $escaped_item = mysql_real_escape_string($item); printf ("Escaped string: %s\n", $escaped_item); ?> типо такого? Добавлено спустя 52 минуты 59 секунд: помогите пожалуйста я все перепробовал )) пожалуйста) спасибо. $sum = $us_data['money_out']; если сделать так то будет четко работать все,но деньги все переводятся на баланс оплаты,а надо чтоб человек сам указал сколько ему надо) попробовал так: $sum = mysql_escape_string( sf($_POST['amount']) ); все равно баланс в минус уходит..
Re: помогите решить. релакс. подразумевалось что человек запихнул твой совет методом высоконаучного тыка не особо вдумываясь в правильность алгоритма. о тебе уже сказано что ты посоветовал правильно.
Re: помогите решить. вот теперь я точно везде, куда только можно впихивал,а толку 0... может проблема не в этом)? (конечно вы лучше знаете<но блин я тупой значит) либо я вообще не то делаю что надо(( Код (Text): $page = 'Обмен средств'; if(isset($_POST['amount'])) { $sum = mysql_escape_string( sf($_POST['amount']) ); // остановился на этом,ну уже реально не куда впихивать) $date = time(); if($sum > 0) { if($us_data['money_out'] >= $sum) { mysql_query("UPDATE tb_users SET money_out = money_out - '$sum', money = money + '$sum' WHERE id = '$usid'") or die(mysql_error()); mysql_query("INSERT INTO tb_history (user_id, summa, date, comment, type) VALUES ('$usid', '$sum', '$date', 'Обмен средств на сумму $sum', 'convert')") or die(mysql_error()); echo '<center><font color="green">Вы успешно обменяли средства</font></center><br>'; }else echo '<center><font color="red">Не достаточно средств на балансе</font></center><br>'; }else echo '<center><font color="red">Не верная сумма</font></center><br>'; }
Re: помогите решить. обрамляй код через Код ( (Unknown Language)): [b][size=7]php[/size][/b][/color]] , так лучше читается )
Re: помогите решить. никакая в том то и дело) допустим я с баланса для вывода решил обменять на оплату но денег нету на балансе для вывода и я напишу обменят допустим вот так: +100'''''''''''''' или +100ээээ то баланс для вывода уйдет в минус,а мне надо чтоб он ошибку писал типо денег нету на балнсе для вывода вы не сможете обменять... Добавлено спустя 1 минуту 23 секунды: а если я вместо +100эээ напишу -100эээ то вызывает ошибку... Не верная сумма а если я поставлю код вот такой Код (Text): $page = 'Обмен средств'; if(isset($_POST['amount'])) { $sum = $us_data['money_out']; $date = time(); то хоть +100ээ хоть -100эээ пиши все равно вызывает ошибку,но он обменивает ВСЕ деньги которые есть на балансе для вывода,а мне надо чтоб человек указывал сколько ему надо...
Re: помогите решить. Ну все правильно, ты же только проверяешь существует ли переменная, а что там '100' или '100эээ', на это проверка не идет, сделай ее, поменяй вот эту часть: Код (Text): if($sum > 0) на (сначала проверяешь число ли ввел пользователь и потом только больше оно нуля или нет) Код (Text): if(is_int($sum) AND $sum > 0) и смотри, на этой же строчке идет знак "{", не забудь его, а то опять потом будет...
Re: помогите решить. Код (Text): $page = 'Обмен средств'; if(isset($_POST['amount'])) { $sum = mysql_escape_string( sf($_POST['amount']) ); $date = time(); if(is_int($sum) AND $sum >= 0) { echo $sum; if($us_data['money_out'] >= $sum) { mysql_query("UPDATE tb_users SET money_out = money_out - '$sum', money = money + '$sum' WHERE id = '$usid'") or die(mysql_error()); mysql_query("INSERT INTO tb_history (user_id, summa, date, comment, type) VALUES ('$usid', '$sum', '$date', 'Обмен средств на сумму $sum', 'convert')") or die(mysql_error()); echo '<center><font color="green">Вы успешно обменяли средства</font></center><br>'; }else echo '<center><font color="red">Не достаточно средств на балансе</font></center><br>'; }else echo '<center><font color="red">Не верная сумма</font></center><br>'; } ?> щас при любом раскладе выводит ошибку(
Re: помогите решить. is_int() в чистом виде не прокатит. Вы вводите +100, а это ни разу не число, это строка. Сначала разбейте строку на + и на число, а потом уже проверяйте.
Re: помогите решить. жаль что тут смайлов нету=) примерчик можно,как это все сделать)? Добавлено спустя 2 минуты 21 секунду: Кстати если поменять знак у Код (Text): if(is_int($sum) AND $sum >= 0) на Код (Text): if(is_int($sum) AND $sum =< 0) то +100э не проканает,но зато проканает -100э (
Re: помогите решить. Ты РНР вообще не знаешь или как? Просто по хорошему тут надо что бы $sum была чисто числом, а вот + или -, это должно быть отдельное поле - выпадающий список.
Re: помогите решить. я наверное знаками ошибся но я сделал наоборот и работало в противоположном направлении)
Re: помогите решить. Код (Text): <? if(!isset($_SESSION['id']) and !isset($_SESSION['login'])) { print "<html> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> <script language=\"javascript\">top.location.href=\"/\";</script> <title>Перенаправление</title> </head> <body bgcolor=\"#eeeeee\" topmargin=\"0\" leftmargin=\"0\"> </body> </html>"; exit; } $page = 'Обмен средств'; echo '== Алфавит ==' . PHP_EOL; $s = 'W'; $sa = sf($_POST['amount']); $a = $s + $sa; for ($n=0; $n<6; $n++) { echo ++$s . PHP_EOL; } // Цифры ведут себя по другому echo '== Цифры ==' . PHP_EOL; $d = 'A8'; for ($n=0; $n<6; $n++) { echo ++$d . PHP_EOL; } $d = 'A08'; for ($n=0; $n<6; $n++) { echo ++$d . PHP_EOL; } if(isset($_POST['amount'])) { $sum = sf($_POST['amount']); // что то тут надо сделать,а что понять не могу. $date = time(); if($sum > 0) { if($sum = $a) { if($us_data['money_out'] >= $sum) { mysql_query("UPDATE tb_users SET money_out = money_out - '$sum', money = money + '$sum' WHERE id = '$usid'") or die(mysql_error()); mysql_query("INSERT INTO tb_history (user_id, summa, date, comment, type) VALUES ('$usid', '$sum', '$date', 'Обмен средств на сумму $sum', 'convert')") or die(mysql_error()); echo '<center><font color="green">Вы успешно обменяли средства</font></center><br>'; }else echo '<center><font color="red">Не достаточно средств на балансе</font></center><br>'; }else echo '<center><font color="red">Не верная сумма</font></center><br>'; }else echo '<center><font color="red">Не верная сумма</font></center><br>'; } ?> я вроде бы сделал, так можно делать?
А я против приведения к числу. Куда-то улетит запрос по нулевому айдишнику. Лучше просто проверять иснумериком, число это или нет.