- 1
- 2
- 3
- 4
$res1 = mysql_query("INSERT INTO tbl_orders
(date_order,name,id_city,city_text,kod_tel_1,tel_1,kod_tel_2,tel_2,description,subject_text,id_teacher,id_category,category_text,check_student,place_student,check_teacher,place_teacher,price,email,icq,order_close,id_status,to_send,id_whence_came,text_whence_came,one_teacher)
VALUES ('$ts','$name','$city','$other_city','$kod_tel_1','$tel_1','$kod_tel_2','$tel_2','$prim','$other','$id_rep','$category','$other_cat','$check_uch','$district_uch','$check_prep','$district_prep','$stoim','$email','$icq','0','1','1','$whence_came','$text_whence_came','$one_teacher')")
or die ("Query failed".mysql_error());
Услада ума, любящего искать связи. Автор чутка лажанул — некоторые переменные всё же совпадают с полями таблицы.
Oleg_quadro 07.12.2009 20:18 # 0
Добавлю новыой столбец 5 в таблице, а код-то мой будет работать, и не надо мне его исправлять.
defann 07.12.2009 20:21 # −2
Oleg_quadro 07.12.2009 20:32 # 0
defann 07.12.2009 21:53 # 0
Oleg_quadro 08.12.2009 00:52 # 0
mrbig66 08.12.2009 09:54 # 0
guest 08.12.2009 12:54 # +3
- аффтар не парится с конкатенацией, и юзает двойные кавычки. Несомненно огромный плюс к быстродействию!
- аффтар юзает туеву хучу переменных, бОльшая часть из которых не совпадает с названием полей => полная помойка как минимум в текущей области видимости и в башке того, кто будет это читать спустя какое-то время. В идеале использовать массив, с ключами равными названиям полей.
- аффтар мудаг, ибо либо просто не проверяет переменные перед инсертом => SQL Inj (сложно проверить руками такую тучу переменных), либо (если он трудолюбив и усерден :))) проверяет большим копипастом одной и той же функции - но тут даже эвтаназия бессильна...
- аффтар не юзает враппер БД, что еще раз указывает на его усердие и трудолюбие (настоящий программист должен быть ленив)
defann 08.12.2009 13:31 # 0
defann 08.12.2009 22:49 # 0
Oleg_quadro 08.12.2009 18:33 # 0
И?
Тут может быть Sql-инъекция. Но не зная, как человек проверял переменные до
это запроса, я утверждать о ней не буду.
"бОльшая часть из которых не совпадает с названием полей". Как раз, совпадает: я специально скопировал этот запрос в текстовой файлик и подгонял пробелами названия переменных чтоб они стояли под названиями тех столбцов, куда вставляются.
guest 08.12.2009 20:04 # 0
И?
Это большой, очень большой инсерт, написанный РУКАМИ и В СТРОКУ.
Даже вам, при всем желании защитить этот кусок говна пришлось подгонять пробелами названия переменных :) Это говорит о чем? Правильно - об отсутствии у автора понимания необходимости грамотного форматирования кода.
Нащот инъекции: если НЕ проверял - значит инъекция => говнокод. Если проверял - то видимо это делалось скопипасченной пачкой вызовов некой функции проверки. Копипаста = говнокод.
Еще вопросы?
Oleg_quadro 09.12.2009 16:44 # 0
Насчет проверки переменных: мог быть такой код у него выше:
$names = array('ts', 'name', 'city', ....);
foreach ($names as $name) {
check($$name);
}
defann 09.12.2009 16:57 # 0
Oleg_quadro 20.01.2010 01:58 # 0
Oleg_quadro 08.12.2009 18:49 # 0
cheef 08.12.2009 12:45 # 0
Oleg_quadro 08.12.2009 18:48 # 0
узнал, что в случае инсерта, она возвращает true или false,
Провел следующий эксперемент.
<?php
$var = ret() or die("yo");
print $var;
function ret () {
return false;
}
?>
Так вот у меня вызывался die,
то есть когда тут стоит "or die", присваивать значение переменной $res не нужно. Если die не выполнится, то $res будет true. Ну а если die выполнится, то уже будет все равно что в $res.
guest 08.12.2009 20:08 # 0
Oleg_quadro 09.12.2009 16:45 # 0
cheef 08.12.2009 23:00 # 0
defined('SOME_CONSTANT') || define('SOME_CONSTANT', 'Hello world');
guest 08.12.2009 13:57 # −1
guest 11.12.2009 13:07 # 0