[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Обновление данных в базе
kl95
У меня возникла такая задача.
Есть данные в базе. Все они храняться в одном поле cars. Предположим, вот они: ferrari,dodge,chrysler,chevrolet.
Я их извлек и они сейчас у меня храняться в переменной myrow.
echo $myrow['cars'];
Выдаст: ferrari,dodge,chrysler,chevrolet.
Теперь я функцией explode их разделяю:

$explode = explode(",", $myrow['cars']);
$count = count($explode);
$i=0;
do{
echo $explode[$i]." <a href="delete.php">удалить</a><br>";
$i++;
}
while($i <= $count);

Теперь у меня для каждого слова отдельный массив и он выводит все так:
ferrari удалить
dodge удалить
chrysler удалить
chevrolet удалить
Как мне зделать, что бы при нажатии на кнопку удалить обработчик удалял какое-то из слов, если они все являются цельным текстом и находятся в одном поле???







Спустя 8 минут, 48 секунд (15.12.2009 - 17:26) Romms написал(а):
начнем с того что сдесь у тебя ошибка, и скрипт не будет исполняться!
правильно
echo $explode[$i]." <a href=\"delete.php\">удалить</a><br>";

тебе надо сделать так(передать файлу delete.php какую машину ты хочь удалить)
echo $explode[$i]." <a href=\"delete.php?car=".$explode[$i]."\">удалить</a><br>";
а вот в этом файле "ловишь" car с гед массива ($_GET['car'])
А дальше, как хочеш, что хочеш то и удаляеш!

Спустя 1 минута, 14 секунд (15.12.2009 - 17:27) Gabriel написал(а):
самое банальное по тыку в ссылку/кнопку делаеш апдейт строки со всеми значениями только без того в которое ткнул.
ну или удалить из масива нужное значение и записать масив в базу.
ЗЫ. забудьте по do-while

Спустя 1 минута, 4 секунды (15.12.2009 - 17:28) Kuliev написал(а):
kl95
Для начала прочитай статью в мое подписи, приведи код в порядок и поговорим о твоей проблеме!

Спустя 1 час, 41 минута, 53 секунды (15.12.2009 - 19:10) kl95 написал(а):
Цитата
начнем с того что сдесь у тебя ошибка, и скрипт не будет исполняться!

Это я знаю. Просто по невнимательности. Видно я не все еще написал. Что по ссылке будут передоваться данные я уже зделал, задача была не в том, как передать данные, а как их обрабоать. Пусть обработчик принял слово "chrysler".
$car = $_GET['car'];

Из базы выберается целое поле. Вот я его выбрал

$sql = "SELECT `cars` FROM `data`";
$result = mysql_query($sql);
$myrow =mysql_fetch_assoc($result);

Сечас в переменной $myrow['car'] находится ferrari,dodge,chrysler,chevrolet.
Как мне зделать так, что бы из этого всего поля мне удалить chrysler и оставить ferrari,dodge,chevrolet.
Цитата
забудьте по do-while

Почему? Разве он чем-то плох?
Цитата
Для начала прочитай статью в мое подписи

Читал уже несколько раз - раньше и сейчас но так и не понял зачем она здесь huh.gif

Спустя 1 час, 44 минуты, 4 секунды (15.12.2009 - 20:54) vagrand написал(а):
Можно сделать многими способами:
1.

$cars = explode(',', $myrow['car']);
foreach ($cars as $key => $value) {
if ($_GET['car'] == $value) {
unset($cars[$key])
}
}


$myrow['car'] = join(',', $cars);

2.

$myrow['car'] = str_replace($_GET['car'], '', $myrow['car']);
$myrow['car'] = str_replace(',,', '', $myrow['car']);


3.
Регулярками

Спустя 15 минут, 57 секунд (15.12.2009 - 21:10) Gabriel написал(а):
Цитата
Почему? Разве он чем-то плох?

затем, что тут он не нужен
ну мне в голову приходит только такое:
1. explode по `,` плучим такое
Цитата
Array ([0] => ferrari [1] => dodge [2] => chrysler [3] => chevrolet)

2. унсетиш то, что ненужно, унсетим крайслер и получаем
Цитата
Array ( [0] => ferrari [1] => dodge [3] => chevrolet ) ferrari, dodge, chevrolet

3. и вносиш в бд уже без ненужного значения.
УПД: опередили пока писал теорию

Спустя 13 минут, 23 секунды (15.12.2009 - 21:24) kl95 написал(а):
Спасибо. smile.gif smile.gif smile.gif. Все работает хорошо с тем, что предложил vagrand вариант 2. А вот то, что предложил Gabriel я не совсем понял. Все получаетсядо момента, когда надо заносить в базу.
$sql = "SELECT `text` FROM `1`";
$result = mysql_query($sql); /*В переменную попадает ferrari,dodge,chrysler,chevrolet*/
$myrow = mysql_fetch_assoc($result);
$ex = explode(",",$myrow['text']);
unset($ex[2]);
foreach($ex as $i)
{echo $i."<br>";}

Все выводит хорошо. А точнее так:
ferrari
dodge
chevrolet
Но как мне это занести в базу?
mysql_query("UPDATE `1` SET `text`=ЧТО НАДО ВСТАВИТЬ???");

Спустя 1 час, 11 секунд (15.12.2009 - 22:24) Gabriel написал(а):
kl95
ну а что в переменной $ex содержиться?

Спустя 14 минут, 16 секунд (15.12.2009 - 22:38) Romms написал(а):
kl95, тебе надо удалить с массива или с базы?

Спустя 3 минуты, 33 секунды (15.12.2009 - 22:42) Gabriel написал(а):
Romms
у него в базе лежит строка и из этой строки нужно удалить слово

Спустя 11 часов, 46 минут, 1 секунда (16.12.2009 - 10:28) kl95 написал(а):
Из-за небольших непонятностей напишу подробно:
1 вариант(предложил vagrand).

$sql = "SELECT `text` FROM `1`"; /* составляю запрос к базе */
$result = mysql_query($sql);
$myrow = mysql_fetch_assoc($result);/* в переменную $myrow['text'] попали данные ferrari,dodge,chrysler,chevrolet */
$myrow['text'] = str_replace(",chrysler","",$myrow['text']);/* удаляю слово ,chrysler */
mysql_query("UPDATE `1` SET `text`='$myrow[text]'");/*заношу обновленные данные */

2 варинт(предложил Gabriel).

$sql = "SELECT `text` FROM `1`"; /* составляю запрос к базе */
$result = mysql_query($sql);
$myrow = mysql_fetch_assoc($result);/* в переменную $myrow['text'] попали данные ferrari,dodge,chrysler,chevrolet */
$ex = explode(",",$myrow['text']); /* на этом этапе я разделил строку "ferrari,dodge,chrysler,chevrolet" на 4 отдельных слова Получилось так:
$ex[0] = "ferrari"; $ex[1] = "dodge"; $ex[2] = "chrysler"; $ex[3] = "chevrolet"; */

unset($ex[2]);/* удаляю слово ,chrysler */
mysql_query("UPDATE `1` SET `text`='ЧТО СЮДА НАДО ВСТАВИТЬ?'");/*заношу обновленные данные */

Спустя 5 часов, 49 минут, 33 секунды (16.12.2009 - 16:17) Gabriel написал(а):
kl95

<?php
$vals = 'ferrari,dodge,chrysler,chevrolet';
#если передаеш слово
$unset_val_sring = 'chrysler';
$exploded_sring = explode( ',' , $vals );

if ( in_array( $unset_val_sring, $exploded_sring ) )
$key = array_search( $unset_val_sring , $exploded_sring );
unset( $exploded_sring[$key] );
print_r( implode( ',' , $exploded_sring ) );#а вот это записываем в базу

# если передаеш число

$unset_val_int = '2';
$exploded_int = explode( ',' , $vals );
if ( in_array( $exploded_int[$unset_val_int], $exploded_int ) )
unset( $exploded_int[$unset_val_int] );
print_r( implode( ',' , $exploded_int ) );#а вот это записываем в базу

хотя вот с удалением по числу все значительно интереснее ( мне так кажется ) а то вдруг не тот ключ передашь или в обработчике с этим ключем будет другое значение оно будет удалено(над этим подумаем позже).
Быстрый ответ:

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