[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с массивами данных,обновление данных
Serghter
Всем привет,подскажите пожалуйста кто нибудь,как можно сделать? имеется БД 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.....


Как я полагаю,тут используются массивы. Помогите пожалуйста кто чем сможет.
Arh

Сначала делаете explode
получается массив $array
$n это ключ
$v это значение
вот и заменяйте
$array[(int)$n] = (int)$p;


А потом implode

#SELECT `pole` FROM table'
$array = explode(',',$row['pole']);
$array[(int)$n] = (int)$p;
$pole = implode(',',$array);
#update set `pole` = $pole


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
Я понял вашу идею,спасибо,сейчас попробую. Я думал что нужно сразу через запрос делать что то вроде Update Replace(...); но в функции Replace нет к сожалению указания позиции,что нужно заменять.
Serghter
Я попробовал ваш код,но результат после замены немного не такой n=1,p=2,в поле отображается просто:
Цитата
,2


а нужно чтобы оставались эти нули,т.е.
Цитата
0,2,0,0,0,0,0,0,0,0,0...
Arh
Только что проверил,нули остаются, либо я вас не понял, либо вы делаете что то не так.

$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
Не,вы все правильно поняли,так работает,вот мой код 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;
}

выводит так:
Цитата
0,5,0,0,0,0,0,0


а в бд почему то обновляется в
Цитата
,2
Arh
Вы как в базу это записываете?

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
//Соединяемся с базой данных. 
$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());
Arh
Что то не могу понять.
А если сделать запрос напрямую через novicat или phpmyadmin
UPDATE e_users SET upgrades='0,0,0,0,0,200,0,0'

может проблема в длине поля или типе, хотя не должно быть

_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
Так будет работать если напрямую как вы предложили,фишка скорее всего в том,что сначала выводится содержимое поля 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-го параметра.
Arh
$array = explode(',',$line['upgrades']);


_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
Serghter
Да! Теперь отлично! Работает!! Спасибо большое!
sergeiss
Цитата (Serghter @ 10.10.2013 - 19:45)
в таблице есть поле Upgrades, это поле содержит в себе такую запись:
Цитата
0,0,0,0,0,0,0,0.....

Мне так почему-то кажется, что если в поле такая запись и ее надо обновлять по частям, то это говорит о крайне неправильной архитектуре базы данных.

Вопрос ТС: а что за данные там находятся, в этом поле?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
Да! Теперь отлично! Работает!! Спасибо большое!

рано радуетесь, нарушение первого закона нормализации при построении архитектуры БД, может обернуться "черными ногтями", когда вам пальцы рук в "дверном проеме" прищемит...

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.