PHP: как я могу изменить сохраненное значение в дружественные пользователю значения! - PullRequest
0 голосов
/ 08 мая 2011

проблема вкратце,

Field:ProfileItems = "action,Search,Work,Flow,pictures";

Mysql query = "SELECT ProfileItems FROM addUsers";

тогда я explode с , создаю массив, например: array('action','search',...etc)

и создаю поля для ,

Результат:

<form>
action : <input type=text name=action>
search : <input type=text name=search>
...etc
<input type=submit>
</form>

Моя проблема в том, как заменить имена в базе данных более удобными для пользователя (добавить описание) в поля без использования оператора IF ??

//created asoc array with Key = search item and value = user friendly value
$prase = array("ABS" => "ABS (Anti lock braking System)"
         ,"DriverAirBag" => "Air bags");
$string= "ABS,DriverAirbag,GOGO,abs";

foreach($prase as $db=>$eu){
    echo "if $db will be $eu<br>";
    echo str_ireplace($eu,$db,$string);
}
echo $string;

Пробовал выше, но был эпический провал: D! .. не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 08 мая 2011

Наличие карты в PHP не является неразумным подходом, но вы делаете str_ireplace() в обратном направлении: это search, replace, subject, так что в вашем случае str_ireplace($db, $eu, $string);

Но просто делаете str_ireplace()в списке строк через запятую не все равно идеально.Во-первых, представьте себе, что если после замены на ABS вы столкнулись с другим элементом профиля, который соответствует lock (который так и есть в «Антиблокировочной системе торможения»).К сожалению.Теперь вы перезаписали свою предыдущую замену!

Как насчет этого:

$prase = array("ABS" => "ABS (Anti lock braking System)"
         ,"DriverAirBag" => "Air bags");
$string= "ABS,DriverAirbag,GOGO,abs";
$fields = explode(',', $string);

foreach($fields as $field) {
    $friendly = $field;
    if (isset($phrase[$field]))
        $friendly = $phrase[$field];

    echo htmlspecialchars($friendly) . ': <input type="text" name="' . htmlspecialchars($field) . '" />
}

Ключ в том, что вы обрабатываете каждое поле отдельно.И ты никогда не делаешь замену;Вы ищете специально для ключевых слов "ABS" или "DriverAirbag".Если нет точного соответствия, у вас нет понятного человеку названия для этого предмета, и нет смысла делать какую-либо замену.

Все это можно улучшить еще больше, если у вас есть возможность изменитьсхема базы данных.Хранение списка через запятую никогда не желательно.У вас должна быть таблица со схемой, например:

  • field_id (например, «ABS»)
  • name (например, «Антиблокировочная тормозная система»)

И еще одна таблица, например:

  • user_id (здесь я выведу немного из названия addUsers - какие поля / поля у вас в addUser теперь идентифицируют человека)
  • field_id (т. Е. Внешний ключ к вышеуказанной таблице field)

Обратите внимание, что в этой таблице может быть много строк для каждого человека (1, 'ABS'), (1, 'DriverAirbag')

Но тогда ваш запрос может стать

SELECT field, name
FROM user_field
INNER JOIN field USING (field_id)

Теперь вы получаете по одной строке для каждого поля (не требуется explode!), И каждая строка содержит как удобное для компьютера, так и понятное для человека имя.

...