Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > MySQL


Автор: rondo157 4.6.2014, 08:36
Код

<?php

if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}

$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];

$dbhost = "localhost";
$dbuser = "root";
$dbpassword = "";
$db = "newproject_db_auth2";

$conn = @mysql_connect($dbhost, $dbuser, $dbpassword);
 
$query = "UPDATE `bg_user` SET `cash` = `cash` + `$points` WHERE user_id = '$custom'";
mysql_query($query);
?>


Это скрипт PayGol. Когда я нажимаю "оплатить" на сайте все оплачивается а "cash" не приходят. В чем тут ошибка?

Автор: Aliance 4.6.2014, 10:03
1. Почитать про PDO/MySQLi и использовать их, вместо устаревших функций mysql_*
2. Почитать про sql injection и больше так запросы не писать. Необходимо экранировать подставляемые данные, которые приходят от пользователя.
3. Убрать ` вокруг подставляемой переменной $points, они там не нужны, если это не поле, а значение.
4. Если все же необходимо пользоваться mysql_* - ошибку можно узнать с помощью методов mysql_errno / mysql_error

На будущее, пользуйтесь кнопкой КОД на данном форуме, чтобы обрамить ваш код.

PS: шеститысячное сообщение xD

Автор: rondo157 4.6.2014, 10:18
Хорошо. я все понял. Можешь пожалуйста поправить скрипт? Я нуб в этом деле:(

Добавлено через 3 минуты и 31 секунду
Код

<?php

if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}

$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];

$dbHost='localhost';
$dbName='newproject_bd_auth';
$dbUser='root';
$dbPass='';

$myConnect = mysql_connect($dbHost,$dbUser,$dbPass));
mysql_select_db($dbName,$myConnect);

$qwer=mysql_query("select * from `mytable`",$myConnect);

$query= "UPDATE bg_user SET cash = cash + $points WHERE user_id = '$custom'".;

mysql_close($myConnect);
?>



Вот как я поправил, но платеж не идет(

Автор: Aliance 4.6.2014, 11:47
30 строка зачем? Зачем точка в конце 32 строки?

Про sql injection так и не прочитали.

Автор: rondo157 4.6.2014, 12:36
Покажи свой вариант, я уже неделю голову ломаю..

Автор: Aliance 4.6.2014, 12:43
У вас синтаксическая ошибка. Я уже написал, что нужно сделать, чтобы ошибка ушла. Если вы не способны прочитать предложение и исправить на его основе код - значит придется нанимать профессионала и платить ему.

И я что-то не припомню, чтобы мы переходили на ты.

Автор: rondo157 4.6.2014, 12:46
Aliance, Дайте пожалуйста ссылку на исправку моей ошибки.

Автор: Aliance 4.6.2014, 12:49
Цитата(Aliance @  4.6.2014,  12:47 Найти цитируемый пост)
Зачем точка в конце 32 строки?


Автор: rondo157 4.6.2014, 12:52
Код

<?php

if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}

$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];

$dbHost='localhost';
$dbName='newproject_bd_auth';
$dbUser='root';
$dbPass='';

$myConnect = mysql_connect($dbHost,$dbUser,$dbPass));
mysql_select_db($dbName,$myConnect);

$query= "UPDATE bg_user SET cash = cash + $points WHERE user_id = '$custom'";

mysql_close($myConnect);
?>


Как вы и сказали. Убрал точку в конце 32 строки и убрал 30-ю строчку.

Добавлено через 5 минут и 37 секунд
Теперь все правильно?

Автор: Aliance 4.6.2014, 13:11
Теперь синтаксической ошибки нет. Но есть логическая. Вы написали запрос - но не выполнили его.
Нужно после 30 строчки написать что-то типа такого:
Код

mysql_query($query, $myConnect);

Автор: rondo157 4.6.2014, 13:13
Код

<?php

if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}

$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];

$dbHost='localhost';
$dbName='newproject_bd_auth';
$dbUser='root';
$dbPass='';

$myConnect = mysql_connect($dbHost,$dbUser,$dbPass));
mysql_select_db($dbName,$myConnect);

$query= "UPDATE bg_user SET cash = cash + $points WHERE user_id = '$custom'";

mysql_query($query, $myConnect);

mysql_close($myConnect);
?>


Вот. Теперь правильно?

Автор: Aliance 4.6.2014, 13:21
Выглядит правильно, запустите и проверьте.

Но запрос по прежнему уязвим к sql injection. Почитайте в гугле что это такое и как с этим бороться.

Автор: rondo157 4.6.2014, 13:24
Выглядит то правильно, но по прежнему таблица cash остается неименной.
Есть еще предложения?

Автор: Aliance 4.6.2014, 13:38
Перед 32 строчкой вставьте это
Код

echo '<pre>'; var_dump($query); exit;

результат сюда скиньте.

Автор: rondo157 4.6.2014, 14:09
Простите, какой результат? ничего не получилось. 

Код

<?php

if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}

$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];

$dbHost='127.0.0.1';
$dbName='newproject_db_auth';
$dbUser='root';
$dbPass='';

$myConnect = mysql_connect($dbHost,$dbUser,$dbPass));
mysql_select_db($dbName,$myConnect);

$query= "UPDATE bg_user SET cash = cash + $points WHERE user_id = '$custom'";
    
echo '<pre>'; var_dump($query); exit;

mysql_query($query, $myConnect);

mysql_close($myConnect);
?>


Вот что не так?

Автор: Aliance 4.6.2014, 14:10
Вы когда запускаете данный скрипт - что выводится в браузер?

Автор: rondo157 4.6.2014, 20:34
Уже все. Спасибо за помощь. 
Вот сам скрипт:
Код

<?php
/*
if(!in_array($_SERVER['REMOTE_ADDR'],
  array('109.70.3.48', '109.70.3.146', '109.70.3.210'))) {
  header("HTTP/1.0 403 Forbidden");
  die("Error: Unknown IP");
}
*/
$message_id = $_GET['message_id'];
$service_id = $_GET['service_id'];
$shortcode = $_GET['shortcode'];
$keyword = $_GET['keyword'];
$message = $_GET['message'];
$sender = $_GET['sender'];
$operator = $_GET['operator'];
$country = $_GET['country'];
$custom = $_GET['custom'];
$points = $_GET['points'];
$price = $_GET['price'];
$currency = $_GET['currency'];


$dbHost='127.0.0.1';
$dbName='newproject_db_auth';
$dbUser='root';
$dbPass='';

$myConnect = mysql_connect($dbHost,$dbUser,$dbPass);
mysql_select_db($dbName,$myConnect);

$query= "UPDATE bg_user SET cash = cash + $points WHERE user_id = '$custom'";

echo '<pre>'; var_dump($query);

mysql_query($query, $myConnect);

mysql_close($myConnect);
?>

Автор: _zorn_ 5.6.2014, 01:10
Aliance, на время сдачи дипломов/курсовых/и т.п. попробуйте включить броню и научить ;) 
Если от вас ждут готового решения - слать в далёкие дали. Чтобы потом не материться разбирая чужой код от таких "специалистов".

Про sql injection - таким бесполезно объяснять. 
А потом во всяких джумлах видим htaccess с блок коммон эксплоитс основанный на rewrite, мля.

Накипело, извините.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)