Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2008, 19:27   #1
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию PHP + MySql Проблема с базой и переменными.

Такая вот ситуация, ув. программмисты.

1 вариант.
Есть база, есть в ней таблица, допустим с тремя колонками.
Название Местонахождение Цена.

В ней хранятся не слова, а буквенно-числовые значения (Типо 1_а, 44_с).


//Примецание:
У меня сущ. индекс.пхп, к которому приклеплен файл.php, в котором содержатся значения переменных, которые сайт выводит. например:
$front_requiredinfo = "Required Information";
$front_username = "User Name";
$front_password = "Password";
$front_passwordagain = "Enter Password Again";

Мне достаточно прописать в индекс.пхп строчку <?php print "$front_username"; ?> и получу выражение.

Теперь очень сложный вопрос.

С сайта пошел запрос, чтоб вывели весь список товара.
Соответственно, я получу не товары, а буквенно-числовые значения имеющихся в таблице. Запрос я вывожу след. образом:

Код:
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);do 
{
printf ("<table align='left' class='lesson'>
         
		 <tr>
         <td><div align='left'>
		 <p class='lesson_title'><a href='view_msg.php?id=%s'>%s</a></p>
		 <p class='lesson_adds'>Местонахождение: %s</p>
		 <p class='lesson_name'>Цена: <b>%s</b></p>
		 </div></td>
         </tr>
         
		 <tr>
         <td></td>
         </tr>
         
		 </table><br><br>",$myrow["id"],$myrow["mark"], $myrow["city"], $myrow["price"]);
}
while ($myrow = mysql_fetch_array($result));
Вместо %S я получу буквенно-числовые значения имеющихся в таблице, но этим буквенно-числовым значениям я хочу придать уже другие значения. Чтобы вместо 1_а, 44_с было написано Куртка, Таллинн.

Пытался что либо сделать не получается. Заносил их в файл.пхп как $1_а ="Куртка";
$44_с ="Таллинн";

Но пхп код <?php print "$%s"; ?> нельзя прописать, что мне делать?

2. Вариант.
Суть проблемы в том, что мне нужен сайт на двух языках, но когда гость с англ страницы добавляет запись в таблицу, она на анг языке, а когда гость- русский приходит на сайт, посылает запрос показать все объявления, обязан видеть все объявы, но так получается что половина на русском половина на англ.
Как можно решить эту проблему?
Можно ли, чтобы при добавлении в базу с англ страницы это строчка автоматом копировалась в "русскую" базу с такими же параметрами что были посланы с англ. страницы.

прошу помощи, очень надо.

Если что-то непонятно, я поясню. Спасибо за понимание
AgentVlad вне форума Ответить с цитированием
Старый 12.10.2008, 00:48   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

1) Не забываем, что MySQL реляционная БД.
Создаём ещё одну таблицу, с названиями товаров, объектов и т.д.
<id>, <name>
То есть теперь когда делаешь запрос к первой таблице - там же выбирай название товара по id.

Также вывод у тебя организован непрактично. Я понимаю, что ты всё делаешь как в книжке написано, через printf, но чтобы писать достойные скрипты, нужно понимать всё что происходит с переменными и выводом при использовании тех или иных операторов вывода. Я лично пользуюсь только echo, просто потому что в слове print на одну букву больше. )))
Также комплекс $a=$b; do {...} while ($a=$b); неправилен. Какой смысл делать одну и ту же операцию дважды? Можно же сделать проще:
while ($a=$b) {...}

2) Система реализации многоязычных сайтов довольно сложна, особенно если работать с динамическими данными (объявления, товары и т.д.). Я думаю сначала нужно научиться хорошо работать с одноязычной динамикой.
В качестве примера решения твоей проблемы:
У каждого объявления создаёшь дополнительную колонку lang. Варианты en или ru. Затем когда приходит кто-то с английским языком - выбираешь все объявления у которых колонка lang = "en". Аналогично с русскоязычным клиентом.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 12.10.2008, 14:29   #3
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию Ты меня неправильно понял, наверное.

2) Мне не надо, что англ страницы видели ТОЛЬКО англ объявления, а русские ТОЛЬКО русские.
Мне надо чтоб любой пользователь видел ВСЕ объявления, либо на русском, либо на англ.

Быть может есть ли такая функция которая автомотически создает параллельно в другую базу, задавая им значения на другом языке.

При добавлении объявы у меня все переменные фиксированные, отсебятины нет, может ли база копировать в другую таблицу задавая им значения на другом языке?


1) Я не понимаю, зачем еще одна индитичная таблица?
Я послал запрос на базу , он мне выдал информацию, а вторая таблица зачем?

Можно подробнее рассписать?
Был бы очень благодарен.

П.С.
Можно ли задать другие значения значениям, которые я получил из таблицы?

Последний раз редактировалось AgentVlad; 12.10.2008 в 14:32.
AgentVlad вне форума Ответить с цитированием
Старый 13.10.2008, 00:07   #4
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

AgentVlad
Ты неправильно ставишь вопрос, соответственно приходишь к неправильному ответу.
1) Что такое $1_а ="Куртка";? Откуда это берётся? Ты собираешься создавать отдельный php файл чтобы хранить все эти слова: "Куртка", "Таллинн", "собака плюшевая" и т.д.? А нафига тогда БД существует? Ну писали бы все $a001 = "вилка серебряная"; зачем выборку из БД делать? А ты не думал, что в БД можно ассоциировать все эти странные идентификации: "1_a" с "Куртка", "44_c" с "Таллинн" и т.д.? А потом одним запросом получать сразу всё готовенькое.

2) Зачем создавать другую базу? Читал про реляционные базы данных? Почему бы все объявления не складывать в одну таблицу? Если тебе всё равно все объявления нужны. А потом все их из этой таблицы и получай.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 13.10.2008, 12:52   #5
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию

1) Да, существует отдельный файл, в котором содержатся эти переменные.
Они служат для того, чтобы было легко поменять язык сайта с одного на другой.
А база нужна для того, чтоб пользователи могли добавлять свои объявления.
Мне надо чтобы значения в базе, например, a001 = "Машина" имела также (одновременно) значение "car". Чтоб когда я посылаю запрос, выдавалось либо Машина либо Car. Так реально реализовать?

2) Да мне не нужны две таблицы, я просто привел пример. Мне нужно два языка, ломаю голову неделю уже как сделать это. Либо при добавлении пользователем сделать идентичный скрытую форму на другом языке.
Либо как нибудь еще?
AgentVlad вне форума Ответить с цитированием
Старый 13.10.2008, 16:48   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

1) нет. Система без искуственного интеллекта не сможет реализовать вашу задачу, потому как задача поставлена неправильно.

2) К сожалению, я больше ничем не могу Вам помочь.
Вам нужно сначала понять что именно вы хотите, потом перевести это на русский язык понятный другому человеку, а потом спрашивать. При этом вы должны иметь хоть минимальное представление о том, о чём спрашиваете.


З.Ы. Я приведу автомобильный пример того, что вы спрашиваете. Может тогда станет понятно, в чём загвоздка.
Вы спрашиваете механика о том, какие изменения нужно ввести в структуру автомобиля, чтобы он вёз двух человек на двух или четырёх колёсах и при этом ехал сразу вперёд и назад, и использовал бы педальную систему привода.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?

Последний раз редактировалось Johnatan; 13.10.2008 в 16:51.
Johnatan вне форума Ответить с цитированием
Старый 13.10.2008, 17:12   #7
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

ну тогда придется обьяснять мне...

автор правильно подметил что в пхп нельзя подставить переменную в вызов другой переменной

этот недостаток легко исправляется сотнями других методов, приведу два из них:

1) добавить таблицу языков где строки будут обозначать сами языки а поля - идентификаторы товаров (ну или наоборот, вообще без разницы) и делать запросы к таблице со списком товаров используя join на базу языков

2) изменить т н "фаил.php" введя туда не просто переменные а один массив (ну или несколько, не каждый язык), содержащий идентификаторы и соответствующие названия

к примеру этот массив для русского будет выглядеть приблизительно так:

$lang=array
(
'1d_a'=>'Шапка',
'qweer'=>'Куртка',
'9sdf'=>'Носок'
);

обращаться к нему можно с помощью echo $lang['1d_a'];, что выведет на экран слово "Шапка"

а вообще советую автору завязывать с программированием, ибо таким стилем не только не сделать ничего полезного, но и очень просто навредить развивающемуся сайту

п.с. чет я и сам не особо складно написал, но смысл был исключительно в последней фразе, так что ногами не пинать ))
свободен...
wall66 вне форума Ответить с цитированием
Старый 14.10.2008, 02:30   #8
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию

Спасибо за советы. Что касается первого варианта, то я не понял если честно, как это реализовывается, привести пример можешь?

Что касается второго:

У меня нет проблем с обозначением переменных есть проблема, как и вывести в таблицу

Код:
printf ("<table align='left' class='lesson'>
         
		 <tr>
         <td><div align='left'>
		 <p class='lesson_title'><a href='view_msg.php?id=%s'>%s</a></p>
		 <p class='lesson_adds'>Местонахождение: %s</p>
		 <p class='lesson_name'>Цена: <b>%s</b></p>
		 </div></td>
         </tr>
         
		 <tr>
         <td></td>
         </tr>
         
		 </table><br><br>",$myrow["id"],$myrow["mark"], $myrow["city"], $myrow["price"]);
}
$myrow["mark"] подразумевается %s которая стоит
<p class='lesson_title'><a href='view_msg.php?id=%s'>%s</a></p> в этой строчке. Вторая. И будет иметь значение 1d_a, но как сделать правильное обращение в исходном коде выше, чтоб замена производилась... в данном случае, вместо 1d_a должно быть Шапка.

вот моя рокавая проблема.

Еще раз спасибо за примеры.
AgentVlad вне форума Ответить с цитированием
Старый 14.10.2008, 13:45   #9
wall66
Участник клуба
 
Аватар для wall66
 
Регистрация: 04.10.2008
Сообщений: 1,485
По умолчанию

просто заместо $myrow [ 'mark' ] пропиши $lang [ $myrow [ 'mark' ] ] и перед этим заинклудь (include *.php; ) фаил с определением массива с языком

а про таблицу в базе запрос будет выглядеть примерно так:
select table1.*, table2.name as name from table1 left join table2 on table2.id=table1.id where... нужное условие выборки
id это совпадающий идентификатор в обоих таблицах
name название на нужном языке
свободен...
wall66 вне форума Ответить с цитированием
Старый 14.10.2008, 16:29   #10
AgentVlad
Пользователь
 
Регистрация: 11.10.2008
Сообщений: 34
По умолчанию Большое спасибо.

Огромное спасибо в решении моей проблемы, имея такое терпение и понимая трудности другого человека, вызывает уважение!

С языком я разобрался, теперь все хорошо!

Насчет , таблиц, буду разбираться вечерком.
Огромное спасибо, тему пока не стоит закрывать.
AgentVlad вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема соединения с базой MySQL Blade БД в Delphi 3 08.05.2009 04:25
Проблема с переменными. TheWanderer Общие вопросы C/C++ 5 06.10.2008 18:15
проблема с базой 4321 Общие вопросы Delphi 1 19.09.2008 16:00
Connect с удаленной базой MySQL _SERGEYX_ БД в Delphi 1 26.08.2008 14:06