Serghter
10.10.2013 - 19:45
Всем привет,подскажите пожалуйста кто нибудь,как можно сделать? имеется БД mysql и таблица,в таблице есть поле Upgrades, это поле содержит в себе такую запись:
Цитата |
0,0,0,0,0,0,0,0..... |
Как я могу сделать так, чтобы например в php скрипт попала $n(номер позиции в этой строке)-переменная,и параметр $p(который содержит число 1,2), и затем заменить строку в соответствии с номером присланной в скрипт позиции элемента и его значения? Чтобы например строка выглядела так:
Например $n=2;$p=1, тогда запись в таблице БД поля Upgrades изменится на:
Цитата |
0,0,1,0,0,0,0,0..... |
соответственно если я дальше буду присылать в скрипт n=0,p=2 =>
Цитата |
2,0,1,0,0,0,0,0..... |
Как я полагаю,тут используются массивы. Помогите пожалуйста кто чем сможет.
Сначала делаете
explodeполучается массив
$array$n это ключ
$v это значение
вот и заменяйте
$array[(int)$n] = (int)$p;
А потом
implode
$array = explode(',',$row['pole']);
$array[(int)$n] = (int)$p;
$pole = implode(',',$array);
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
10.10.2013 - 21:04
Я понял вашу идею,спасибо,сейчас попробую. Я думал что нужно сразу через запрос делать что то вроде Update Replace(...); но в функции Replace нет к сожалению указания позиции,что нужно заменять.
Serghter
10.10.2013 - 21:32
Я попробовал ваш код,но результат после замены немного не такой n=1,p=2,в поле отображается просто:
а нужно чтобы оставались эти нули,т.е.
Цитата |
0,2,0,0,0,0,0,0,0,0,0... |
Только что проверил,нули остаются, либо я вас не понял, либо вы делаете что то не так.
$n = 1;
$p = 5;
$pole = '0,0,0,0,0,0,0,0';
$pole = explode(',',$pole);
$pole[(int)$n] = (int)$p;
$pole = implode(',',$pole);
echo $pole;
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
10.10.2013 - 22:03
Не,вы все правильно поняли,так работает,вот мой код php:
if ((!empty($_GET['id'])) ) {//Есди Пришёл ИД то...
$_id = $_GET['id']; //Считываем ID пришедшего
$_n = $_GET['n']; //Параметры позиции
$_p = $_GET['p']; //значение
$pole = '0,0,0,0,0,0,0,0';
$pole = explode(',',$pole);
$pole[(int)$_n] = (int)$_p;
$pole = implode(',',$pole);
echo $pole;
}
выводит так:
а в бд почему то обновляется в
Вы как в базу это записываете?
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
10.10.2013 - 22:11
$link = mysql_connect($mysql_host, $mysql_user, $mysql_password)
or die("Could not connect : " . mysql_error());
mysql_select_db($my_database) or die("Could not select database");
$query="SELECT upgrades FROM e_users where vk_id ='$_id'";
$result = mysql_query($query);
$line = mysql_fetch_array($result);
if (!$line) {
} else {
$array = explode(',',$row['upgrades']);
$array[(int)$_n] = (int)$_p;
$pole = implode(',',$array);
$query = "UPDATE e_users SET upgrades='$pole' WHERE vk_id ='$_id'";
}
$result = mysql_query($query) or die("Query failed : " . mysql_error());
Что то не могу понять.
А если сделать запрос напрямую через novicat или phpmyadmin
UPDATE e_users SET upgrades='0,0,0,0,0,200,0,0'
может проблема в длине поля или типе, хотя не должно быть
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
10.10.2013 - 22:31
Так будет работать если напрямую как вы предложили,фишка скорее всего в том,что сначала выводится содержимое поля upgrades если следовать запросу:
$query="SELECT upgrades FROM e_users where vk_id ='$_id'";
$result = mysql_query($query);
$line = mysql_fetch_array($result);
И мне кажется что ошибка в этой строке:
$array = explode(',',$row['upgrades']);
именно поле upgrades наверно нужно заменить как то содержимым $line т.к. туда передаются эти самые нули из запроса,но пытаюсь вставить
$array = explode(',',$line);
то php ругается,что недостает 2-го параметра.
$array = explode(',',$line['upgrades']);
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
10.10.2013 - 22:41
Да! Теперь отлично! Работает!! Спасибо большое!
sergeiss
11.10.2013 - 00:13
Цитата (Serghter @ 10.10.2013 - 19:45) |
в таблице есть поле Upgrades, это поле содержит в себе такую запись: Цитата 0,0,0,0,0,0,0,0..... |
Мне так почему-то кажется, что если в поле такая запись и ее надо обновлять по частям, то это говорит о крайне неправильной архитектуре базы данных.
Вопрос ТС: а что за данные там находятся, в этом поле?
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
Valick
13.10.2013 - 13:26
Цитата |
Да! Теперь отлично! Работает!! Спасибо большое! |
рано радуетесь, нарушение первого закона нормализации при построении архитектуры БД, может обернуться "черными ногтями", когда вам пальцы рук в "дверном проеме" прищемит...
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.