if ($_POST)
{
require_once ('connect.php');
$result_1 = mysql_query("SELECT name,money_1,money_2 FROM `person` WHERE name='".$name."'") or die ("Error !");
if ($person = mysql_fetch_assoc($result_1))
{
$result_2 = mysql_query("SELECT name FROM `bank` WHERE name='".$name."'") or die ("Error !");
if ($bank = mysql_fetch_assoc($result_2))
{
$schet=$_POST['schet'];
if ($schet > $person['money_1'])
{
echo "У вас на руках меньше денег, чем вы хотите положить на счет";
}
else
{
//Здесь мы переводим деньги на счет.
$sql="UPDATE bank SET schet='".$schet."' WHERE name='".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
echo "Перевод успешен";
}
}
else
{
$schet=$_POST['schet'];
if ($schet > $person['money_1'])
{
echo "У вас на руках меньше денег, чем вы хотите положить на счет";
}
else
{
//Здесь мы переводим деньги на счет.
$sql="INSERT INTO bank SET schet='".$schet."','".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
echo "Перевод успешен";
}
}
}
else
{
echo "ничерта не найдено в базе";
}
}
Спустя 41 минута, 30 секунд (12.08.2011 - 17:20) Michael написал(а):
Твой код небезопасен. читай
так никто не проверяет наличие записи. Надо : SELECT COUNT(*) FROM и уже число проверять
Посмотри еще команду REPLACE в mysql.
$result_2 = mysql_query("SELECT name FROM `bank` WHERE name='".$name."'") or die ("Error !");
так никто не проверяет наличие записи. Надо : SELECT COUNT(*) FROM и уже число проверять
Посмотри еще команду REPLACE в mysql.
Спустя 26 минут, 3 секунды (12.08.2011 - 17:46) Druids написал(а):
Можете как пример мне запрос написать, на моём примере? =)
P.S. Попахивает рекурсией =(
P.S.S. Такой запрос брал из книги по которой и обучался, да и до сих пор обучаюсь.
Автор: Андрей Шкрыль
Название: PHP это просто
P.S. Попахивает рекурсией =(
P.S.S. Такой запрос брал из книги по которой и обучался, да и до сих пор обучаюсь.
Автор: Андрей Шкрыль
Название: PHP это просто
Спустя 5 минут, 38 секунд (12.08.2011 - 17:52) Winston написал(а):
Это
Цитата (Druids @ 12.08.2011 - 16:38) |
$result_1 = mysql_query("SELECT name,money_1,money_2 FROM `person` WHERE name='".$name."'") or die ("Error !"); if ($person = mysql_fetch_assoc($result_1)) { $result_2 = mysql_query("SELECT name FROM `bank` WHERE name='".$name."'") or die ("Error !"); |
Можно свести к
$result_1 = mysql_query("SELECT `p`.`name`, `p`.`money_1`,
`p`.`money_2`, `b`.`name`
FROM `person` `p`, `bank` `b`
WHERE name='" . $name . "'") or die ("Error !");
Спустя 11 минут, 9 секунд (12.08.2011 - 18:03) Druids написал(а):
Цитата |
$result_1 = mysql_query("SELECT `p`.`name`, `p`.`money_1`, `p`.`money_2`, `b`.`name` FROM `person` `p`, `bank` `b` WHERE name='" . $name . "'") or die ("Error !"); |
что в данном случае p и b
Извиняюсь, сообразил уже. Спасибо
Спустя 1 минута, 49 секунд (12.08.2011 - 18:04) Winston написал(а):
Цитата (Druids @ 12.08.2011 - 18:03) |
`person` `p`, `bank` `b` |
Псевдонимы `person` `p`, `bank` `b`, чтобы меньше букафф было :)
Можно так писать, если тебе удобней
SELECT `person`.`name`, `person`.`money_1`,
`person`.`money_2`, `bank`.`name`
Спустя 35 секунд Winston написал(а):
То есть, указываем имя_таблицы.имя_столбца
Спустя 2 минуты, 6 секунд (12.08.2011 - 18:07) Druids написал(а):
Такую-же запись и при записи в базе можно использовать?
Просто тут код слегка не полный, точнее ещё не до конца написанный =)
И как выше говорили о Инъекции, защищен ли он?
Просто тут код слегка не полный, точнее ещё не до конца написанный =)
И как выше говорили о Инъекции, защищен ли он?
Спустя 2 минуты, 8 секунд (12.08.2011 - 18:09) Winston написал(а):
Цитата (Druids @ 12.08.2011 - 18:07) |
Такую-же запись и при записи в базе можно использовать? |
В окне SQL запроса написать это имеешь ввиду ?
Спустя 2 минуты, 21 секунда (12.08.2011 - 18:11) Druids написал(а):
Цитата (Winston @ 12.08.2011 - 15:09) | ||
В окне SQL запроса написать это имеешь ввиду ? |
нет не совсем...
я так понял, что здесь мы просто объединили 2 запроса в 1.
Просто мне нужно будет записывать полученный результат, в 2 таблицы. и я так понял, что таким же способом как вы мне написали, можно будет сделать?!
Спустя 1 минута, 41 секунда (12.08.2011 - 18:13) Winston написал(а):
Одним запросом в две таблицы записать ?
Спустя 2 минуты, 13 секунд (12.08.2011 - 18:15) Druids написал(а):
Да. Именно так.
И с вашим преобразованием, вот с этой строкой что произойдет?
Так и оставляем её?
И с вашим преобразованием, вот с этой строкой что произойдет?
if ($person = mysql_fetch_assoc($result_1))
{
Так и оставляем её?
Спустя 1 минута (12.08.2011 - 18:16) Winston написал(а):
Если нужна только одна запись, то так и оставляем.
Спустя 1 минута, 46 секунд (12.08.2011 - 18:18) Druids написал(а):
Понял, спасибо за небольшую лекцию. Опробую всё завтра, а сейчас пойду спать, а то времени 2 часа ночи =(
Спустя 5 минут, 51 секунда (12.08.2011 - 18:24) Winston написал(а):
ОФФТОП
Цитата (Druids @ 12.08.2011 - 18:18) |
а то времени 2 часа ночи |
А у меня 18-25

Спустя 8 минут, 6 секунд (12.08.2011 - 18:32) Invis1ble написал(а):
Druids
как-то так, не уверен, что сработает )
как-то так, не уверен, что сработает )
if ($_POST)
{
require_once ('connect.php');
mysqli_query(
"DELIMITER //
CREATE PROCEDURE transaction (u_name VARCHAR(255), amount INT)
LANGUAGE SQL
BEGIN
DECLARE money INT NULL;
SET money = (SELECT `money_1` FROM `person` WHERE `name` = u_name);
IF (money IS NOT NULL) THEN
BEGIN
IF ((SELECT COUNT(*) FROM `bank` WHERE `name` = u_name) = 0) THEN
INSERT INTO `bank` (`name`, `schet`) VALUES (u_name, amount);
ELSE
UPDATE `bank` SET `schet` = amount WHERE `name` = u_name;
END IF;
END;
END IF;
END //
CALL transaction('" . mysqli_escape_string($_POST['name']) . "', " . (int)$_POST['schet'] . ")"
) or die(mysqli_error());
echo mysqli_affected_rows() ? "Перевод успешен" : "У вас на руках меньше денег, чем вы хотите положить на счет";
}
Спустя 12 минут, 28 секунд (12.08.2011 - 18:44) Invis1ble написал(а):
Если `name` сделать UNIQUE, то можно сократить, как написал Michael
DELIMITER //
CREATE PROCEDURE transaction (u_name VARCHAR(255), amount INT)
LANGUAGE SQL
BEGIN
IF ((SELECT COUNT(*) FROM `person` WHERE `name` = u_name) != 0) THEN
REPLACE INTO `bank` (`name`, `schet`) VALUES (u_name, amount);
END IF;
END//
Спустя 8 часов, 37 минут, 2 секунды (13.08.2011 - 03:21) Druids написал(а):
Invis1ble
Не, такой запрос не для меня =( я конечно понимаю, что всё красиво написано, нет лишнего кода и т.д. Ноя его просто не понимаю =( Спасибо за старания - постараюсь разобраться с ним.
Не, такой запрос не для меня =( я конечно понимаю, что всё красиво написано, нет лишнего кода и т.д. Ноя его просто не понимаю =( Спасибо за старания - постараюсь разобраться с ним.
Спустя 20 минут, 3 секунды (13.08.2011 - 03:41) Druids написал(а):
Winston
Вот что говорит mysql на твой запрос =)
Вот что говорит mysql на твой запрос =)
Цитата |
Column 'name' in where clause is ambiguous |
Спустя 10 часов, 21 минута, 49 секунд (13.08.2011 - 14:03) Winston написал(а):
Цитата (Druids @ 13.08.2011 - 03:41) |
Вот что говорит mysql на твой запрос |
Покажи свой запрос.
Спустя 10 минут, 21 секунда (13.08.2011 - 14:13) Michael написал(а):
Winston, у тебя в запросе есть `p`.`name` и `b`.`name`, а проверка просто name = , поэтому и ошибка
Спустя 3 минуты, 10 секунд (13.08.2011 - 14:17) Winston написал(а):
Michael
Да! Точно! Спасибо !
Да! Точно! Спасибо !

Спустя 10 минут, 18 секунд (13.08.2011 - 14:27) Druids написал(а):
т.е. мне надо убрать из запроса p и b, или в where дописать, это p и b?
Спустя 6 минут, 27 секунд (13.08.2011 - 14:33) Winston написал(а):
Druids
Допиши у where
Допиши у where
WHERE `p`.`name` = '" . $name . "' AND `b`.`name` = '" . $name . "'
Спустя 1 час, 10 минут, 18 секунд (13.08.2011 - 15:44) Druids написал(а):
if ($_POST)
{
require_once ('connect.php');
$result_1 = mysql_query("SELECT `p`.`name`, `p`.`money_1`,
`p`.`money_2`, `b`.`name`
FROM `person` `p`, `bank` `b`
WHERE `p`.`name` = '" . $name . "' AND `b`.`name` = '" . $name . "'") or die (mysql_error());
if ($person = mysql_fetch_assoc($result_1))
{
if ($bank = mysql_fetch_assoc($result_1))
{
$schet=$_POST['schet'];
if ($schet > $person['money_1'])
{
echo "У вас на руках меньше денег, чем вы хотите положить на счет";
}
else
{
//Здесь мы переводим деньги на счет.
$sql="UPDATE bank SET schet='".$schet."' WHERE name='".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
echo "Перевод успешен";
}
}
else
{
$schet=$_POST['schet'];
if ($schet > $person['money_1'])
{
echo "У вас на руках меньше денег, чем вы хотите положить на счет";
}
else
//Здесь мы переводим деньги на счет.
$sql="INSERT INTO bank SET schet='".$schet."','".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
echo "Перевод успешен";
}
}
Вот такой код получился, НО получается так что не пишется в базу код =(
а точнее вот это условие не выполняется, но пишется, что перевод успешен.
$sql="INSERT INTO bank SET schet='".$schet."','".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
Спустя 4 минуты, 4 секунды (13.08.2011 - 15:48) Winston написал(а):
А, что ты написал вообще ?
Спустя 26 секунд Winston написал(а):
SET для UDATE а для инсерта используй VALUES

Спустя 26 секунд Winston написал(а):
SET для UDATE а для инсерта используй VALUES
Спустя 1 минута, 51 секунда (13.08.2011 - 15:50) Invis1ble написал(а):
Winston
для insert можно и set заюзать, только не в таком виде, как у ТС в коде. там ошибка в синтаксисе
для insert можно и set заюзать, только не в таком виде, как у ТС в коде. там ошибка в синтаксисе
Спустя 51 секунда (13.08.2011 - 15:50) Invis1ble написал(а):
$sql="INSERT INTO bank SET schet='".$schet."',`name` = '".$name."'" or die ("Error !");
Спустя 27 секунд (13.08.2011 - 15:51) Winston написал(а):
Может ты так имел ввиду ?
Или так ?
$sql="UPDATE `bank` SET `schet` = '".$schet."' WHERE `name` = '".$name."'";
$result_3 = mysql_query ($sql) or die ("Error !");
Или так ?
$sql="INSERT INTO `bank` (`schet`, `name`) VALUES ('".$schet."', '".$name."')";
$result_3 = mysql_query ($sql) or die ("Error !");
Спустя 16 секунд (13.08.2011 - 15:51) Druids написал(а):
просто, вот этот участок - работал нормально не знаю, как может быть связанно с тем что изменялось...
$sql="UPDATE bank SET schet='".$schet."' WHERE name='".$name."'" or die ("Error !");
$result_3 = mysql_query ($sql);
echo "Перевод успешен";
Спустя 3 минуты, 40 секунд (13.08.2011 - 15:55) Winston написал(а):
Druids
Куда ты or die пихаешь ? :blink:
Куда ты or die пихаешь ? :blink:
$sql="UPDATE bank SET schet='".$schet."' WHERE name='".$name."'";
$result_3 = mysql_query ($sql) or die ("Error !");
echo "Перевод успешен";
Спустя 44 секунды (13.08.2011 - 15:55) Michael написал(а):
Какой ужас, человек наугад программирует.
Подучи лучше сперва sql и назначение php функций для работы с БД.
Тогда может быть сможешь более понимать хотя бы и те советы, которые получаешь(включая проигнорированный мой)...

Подучи лучше сперва sql и назначение php функций для работы с БД.
Тогда может быть сможешь более понимать хотя бы и те советы, которые получаешь(включая проигнорированный мой)...
Спустя 2 минуты, 21 секунда (13.08.2011 - 15:58) Invis1ble написал(а):
ха, я or die() и сам провтыкал
