Xpoint
   [напомнить пароль]

Запись параметров в Mysql из COOKIE

Метки: [без меток]
[удл]
2008-12-17 12:30:56 [обр] Blademen[досье]

Помогите разобраться в следующем.
Человек через поисковик по ссылке, (К примеру: domain.com?pid=988NM774&key=keyword+keyword&mtb=bt&adr=241234) попадает на главную страницу. Затем он идет по другим страницам, но параметры откуда он пришел(pid=988NM774&key=keyword+keyword&mtb=bt&adr=241234) должны сохраняться в Cookies. Далее если он заполняет форму и отправляет, то эти параметры должны инсертитьться в Mysql.
Параметры:
pid=988NM774
key=keyword+keyword
mtb=bt
adr=241234
могут принимать разные значения.

Создал поля в Mysql (pid,key,mtb, adr)

<?php
$Url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$queryString = $_SERVER['QUERY_STRING'];
setcookie ("test", $queryString);
?>

Как разделить строку(pid=988NM774&key=keyword+keyword&mtb=bt&adr=241234) и инсертить параметры в разные поля. То есть в поле (pid) вставить значение (988NM774), в поле (mtb) вставить (bt) и так далее

спустя 19 минут [обр] MiRacLe(47/77)[досье]
спустя 6 минут [обр] Blademen[досье]
Так не инсертит. Поля пустые
parse_str($_COOKIE['param'], $param);
$sql = 'INSERT INTO Table (' . implode(',', array_keys($param)) . ') VALUES (' . implode(',', array_values($param)) . ')';
mysql_query($sql);
спустя 2 минуты [обр] Алексей Севрюков(162/1280)[досье]
Blademen[досье]
  1. Где проверка на ошибки после вставки?
  2. Призадумайтесь что Вы пытаетесь вставить и как? Вам не кажется что Вы пропустили завертывание строковых констант в кавычки?
спустя 1 час 2 минуты [обр] Blademen[досье]
parse_str($_COOKIE['param'], $param);
$sql = "INSERT INTO test (pid, key, mtb, adr, ". implode(",", array_keys($param)) .") VALUES ('abc4', '1234', '456','11111111', ". implode(",", array_values($param)) . ")";
mysql_query($sql) or die(mysql_error());
Возникла ошибка: Column 'adr' specified twice
спустя 4 минуты [обр] MiRacLe(47/77)[досье]
ещё раз, по слогам: var_dump($sql);
спустя 6 минут [обр] Blademen[досье]
parse_str($_COOKIE['param'], $param);
$sql = "INSERT INTO test (". implode(",", array_keys($param)) .") VALUES (". implode(",", array_values($param)) . ")";
var_dump($sql);
Выводит: string(69) "INSERT INTO test (pid,key,mtb,adr) VALUES (988NM774,keyword+keyword,bt,241234)"
спустя 3 минуты [обр] MiRacLe(47/77)[досье]
ну и как? ничего необычного? Алексей Севрюков[досье] задал вам ещё ДВА вопроса...
спустя 19 минут [обр] Blademen[досье]
ну и как? ничего необычного? Алексей Севрюков[досье] задал вам ещё ДВА вопроса...
Очень хочеться разобраться с этим. Please, подскажите что не так.
спустя 6 минут [обр] Алексей Севрюков(162/1280)[досье]

Blademen[досье] Должно быть не:

INSERT INTO test (pid,key,mtb,adr) VALUES (988NM774,keyword+keyword,bt,241234)

а:

INSERT INTO test (pid,key,mtb,adr) VALUES ('988NM774','keyword+keyword','bt','241234')

Ошибка, которую Вы привели изначально и так понятно. Вы пытаетесь одно и тоже поле вставить дважды в одном запросе. Это невозможно.

спустя 52 минуты [обр] Blademen[досье]

Исправил запрос

$sql = "INSERT INTO test (". implode(",", array_keys($param)) .") VALUES ('" . implode("','", array_values($param)) ."')";

Теперь выдает:
string(80) "INSERT INTO test (pid,key,mtb,adr) VALUES ('988NM774','keyword+keyword','bt','241234')"

А при mysql_query($sql) or die(mysql_error());
Выдает:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'key,mtb,adr) VALUES ('988NM774','keyword+keyword','bt','241234')' at line 1

Не могу понять где ошибка.

спустя 30 минут [обр] Blademen[досье]
Разобрался.
Большое спасибо за помощь.
спустя 38 минут [обр] Алексей Севрюков(162/1280)[досье]
Blademen[досье] разобрались, да не совсем. А что если у Вас в исходных строках будут одинарные кавычки?
спустя 3 часа 6 минут [обр] Blademen[досье]

Мда, не предусмотрел я этого, поспешил.
Помимо этого появилась еше одна проблема: Поля в таблице (number, fromname, pid, kw, mt, ad)
Когда человек заходит по ссыле (domain.com?pid=988NM774&key=keyword+keyword&mtb=bt&adr=241234) на сайт(mydomain.com), затем на страницу с формой и заполняет ее.
Все поля заполняются.

Но когда заходим прямо на сайт (mydomain.com), затем на страницу с формой и заполняет ее.
Поля не заполняются и выдаются следующие ошибки:
string(67) "INSERT INTO test (number,fromname) VALUES ('','111)"

Подскажите как исправить такое.

parse_str($_COOKIE['param'], $param);
$sql = "INSERT INTO test (number,fromname,". implode(", ", array_keys($param)) .") 
VALUES ('$_REQUEST[number]','$_REQUEST[fromname]','" . implode("','", array_values($param)) ."')";
var_dump($sql);
спустя 7 минут [обр] Алексей Севрюков(162/1280)[досье]
спустя 19 минут [обр] Blademen[досье]
$number = mysql_escape_string ($number);
$fromname = mysql_escape_string ($fromname);
parse_str($_COOKIE['param'], $param);
$sql = "INSERT INTO test (number,fromname,". implode(", ", array_keys($param)) .") 
VALUES ('$_REQUEST[number]','$_REQUEST[fromname]','" . implode("','", array_values($param)) ."')";
var_dump($sql);
Появилась: string(76) "INSERT INTO test (number,lastname,) VALUES ('111','222','')"
спустя 1 час 18 минут [обр] Blademen[досье]
Так тоже не работает. Помогите пожалуйста.
$sql = "INSERT INTO test (number,fromname,". implode(", ", array_keys($param)) .") 
VALUES ('$_REQUEST[number]','$_REQUEST[fromname]','" . mysql_escape_string(implode("','", array_values($param))) ."')";
спустя 13 часов [обр] Филипп Ткачев(20/112)[досье]
Blademen[досье], каждый переданный параметр следует экранировать при вставке в базу, прочитайте еще раз и внимательно то, на что указал вам Алексей Севрюков[досье]. И загляните в комментарии сюда.
спустя 1 час 47 минут [обр] Алексей Севрюков(162/1280)[досье]
Blademen[досье] Ну что же Вы, батенька. Синтаксис посмотрели, а описание трудно было прочитать? В нашем деле так нельзя, надо обязательно пробежаться по ману, посмотреть примеры. Это в дальнейшем избавит Вас от большого количества вопросов типа "А почему так?".
спустя 7 дней [обр] Blademen[досье]
Спасибо! C этим разобрался
спустя 7 дней [обр] Blademen[досье]

Как сделать следующее:
Параметр (mt=) может принимать 3 значения
Пример: mt=b; mt=c; mt=d, то есть url может выглядеть так:
domain.com/pid=19877&kw=keyword&mt=b&ad=2465444
domain.com/pid=19877&kw=keyword&mt=c&ad=2465444
domain.com/pid=19877&kw=keyword&mt=d&ad=2465444

keyword может принимать любое слово

Помогите сделать следующее:
Если человек пришел с параметром mt=b, то в поле (kw) вписывать значение keyword без кавычек

Если человек пришел с параметром mt=с, то в поле (kw) вписывать
значение [keyword] в скобках

Если человек пришел с параметром mt=d, то в поле (kw) вписывать
значение "keyword" в кавычках.

Перед инсертом данных делаю так, но не работает. Подскажите в чем проблема.

switch ($_GET['mt']) {
case "b":
    $keyword = $_GET['kw'];
    break;
case "c":
    $keyword = '[' . $_GET['kw'] . ']';
    break;
case "d":
    $keyword = '"' . $_GET['kw'] . '"';
    break;
}

$number = mysql_escape_string ($number);
$fromname = mysql_escape_string ($fromname);
$param= mysql_escape_string ($param);
parse_str($_COOKIE['param'], $param);
$sql = "INSERT INTO test (number,fromname,". implode(", ", array_keys($param)) .") 
VALUES ('$_REQUEST[number]','$_REQUEST[fromname]','" . implode("','", array_values($param)) ."')";
var_dump($sql);
Powered by POEM™ Engine Copyright © 2002-2005