|
|
|
| Например, есть такая форма, где по выбору файла, имя файла заносится в textarea
<html>
<body>
<form name="form">
<textarea NAME="tb"></textarea>
<input type="file" name="f" onchange="document.form.tb.value = this.value">
</form>
</body>
</html>
|
А как обращаться к элементу, если на форме будет несколько textarea и file? Например,
<html>
<body>
<form name="form">
<textarea NAME="tb"></textarea>
<input type="file" name="f" onclick="document.form.tb[].value = this.value">
<textarea NAME="tb[]"></textarea>
<input type="file" name="f[]" onclick="document.form.tb[].value = this.value">
</form>
</body>
</html>
|
P.S. Может я написал полную ерунду, но я в javascript полный профан. | |
|
|
|
|
|
|
|
для: olejek
(22.05.2008 в 16:39)
| |
<script>
function fl(f) {
document.getElementById('tb').value += f+'\n';
}
</script>
<form name="form">
<textarea cols="40" id="tb"></textarea><br>
<input type="file" name="f[]" onchange="fl(this.value)"><br>
<input type="file" name="f[]" onchange="fl(this.value)"><br>
<input type="file" name="f[]" onchange="fl(this.value)">
</form>
|
А зачем это? Что недостаточно отображения в самом поле file? | |
|
|
|
|
|
|
|
для: sim5
(22.05.2008 в 16:56)
| | Да нет, у каждого file свой textarea!
<form name="form">
<textarea cols="40" name="tb[]"></textarea><br>
<input type="file" name="f[]" onchange="fl(this.value)"><br>
<textarea cols="40" name="tb[]"></textarea><br>
<input type="file" name="f[]" onchange="fl(this.value)"><br>
<textarea cols="40" name="tb[]"></textarea><br>
<input type="file" name="f[]" onchange="fl(this.value)">
</form>
|
P.S. Это надо для того, чтобы пользователь мог вставлять рисунок в textarea.
Например, он выбрал файл image.png, а в textarea вставилось <img src=image.png> | |
|
|
|
|
|
|
|
для: olejek
(22.05.2008 в 17:23)
| | Погодите, какой img src? Поле file служит для выбора отправляемого файла, который можно выбрать у клиента. Или у вас не предполагается отправка и скрипт только для работы на локальном компьютере?
PS. Вы видимо хотите, чтобы после выбора картинки пользователем, она отобразилась на странице? Если да, тогда то, что вы пишите, полный абсурд - все, что внутри textarea просто обыкновенный текст и картинок она не покажет. В этом случае можно так:
<script>
function fl(f,n) {
var im = document.getElementById('im'+n);
im.src = f;
im.style.display = "block";
}
</script>
<form name="form">
<img id="im0" src="" style="display: none">
<input type="file" name="f[]" onchange="fl(this.value,0)">
<img id="im1" src="" style="display: none">
<input type="file" name="f[]" onchange="fl(this.value,1)">
<img id="im2" src="" style="display: none">
<input type="file" name="f[]" onchange="fl(this.value,2)">
</form>
|
| |
|
|
|
|
|
|
|
для: sim5
(22.05.2008 в 17:53)
| | Ну что ж Вы меня никак не можете понять (это моя ошибка, конечно).
Форма служит для загрузки файла на сервер. (Я поленился написать <form method='post' name='form' enctype='multipart/form-data'>).
Пользователь пишет в textarea: "Я вчера здесь отдыхал", выбирает файл с рисунком ,
И в textarea после выбора файла (ну чтобы он сам это не писал) будет:
"Я вчера здесь отдыхал <img src=file_name>", затем этот текст заносится в базу данных. А уже текст вместе с рисунком отображается на другой странице.
В любом случае, спасибо. Вы меня натолкнули на правильную мысль.
Я сделал так:
<script>
function fl(f,n) {
document.getElementById('tb'+n).value += f+'\n';
}
</script>
<form method='post' enctype='multipart/form-data'>
<?
for ($i=1; $i<=3; $i++)
{
echo "<textarea cols='40' id='tb$i'></textarea><br>
<input type='file' name='f[]' onchange='fl(this.value,$i)'><br> ";
}
?>
</form>
|
| |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 10:43)
| | Нет, ваша мысль в корне не верна, и вот почему.
1. Значание атрибута value поля типа file, это не имя файла, а полный путь к нему на стороне клиента. А это значит, что записав такое в своей базе, а потом разместив на странице, получите следующую ситуацию - автор сообщения увидит свое фото (и то, если не удалит или не пермместит его у себя), а другие пользователи увидят квадратик с крестиком.
2. Для решения проблемы по п. 1, можно применить регулярные выражения и получить только имя файла выбранного пользователем, но... Ведь надо как-то учитывать путь к этому изображению на сервере после его загрузки.
3. Загружать файлы под тем именем, которое предлагает пользователь не есть хорошо, так как нет гарантии, что это имя не повториться.
Если действовать так, то вам нужно вопользоваться ВВ-кодом, а источником для атрибута src изображения, может служить id записи (пользователя и т.п.), к которому добавлять на сервере, например, time(), и уже под этим именем заносить изображение на сервер. Пропарсив ВВ-код полученный в сообщении, добавить эти изменения для src.
PS. В любом случае, строка текста, а в ней изображение где-то в середине изображение (а оно может быть большим) не очень красиво с точки зрения дизайна будет выглядеть. Как вы считаете? Может лучше делать совсем не так? | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 10:58)
| | 1. Здесь я тоже решил сократить, потому что имя файла я определяю так:
this.value.substr(Math.max(this.value.lastIndexOf('/'), this.value.lastIndexOf('\\'))+1)
2. Путь к изображению на сервере я тоже перед этим определяю и он вставляется вместе с именем файла.
3. А об этот я не подумал, спасибо.
А насчет дизайна, действительно не очень красиво, к тому же ничего непонимающий в тегах html пользователь может испугаться.
>Может лучше делать совсем не так?
Это единственный реальный вариант, который мне удалось осуществить. У Вас есть другие? | |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 12:05)
| | Самое, на мой вгляд, верное решение, это получать сообщение от клиента, без всяких вставок тегов. А вот к загружаемым картинкам, можно добавить поле краткого комментария (подписи), тогда можно будет вывести на странице красиво (по шаблону) и текст, и изображения снабженные подписью автора. | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 12:23)
| | Да, хорошее решение. Но как быть, если рисунок нужно вставить в середину текста, или вообще рисунков может быть несколько в разных местах текста? | |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 12:55)
| | Во-первых, нужно добавить вставку ВВ-кода в поле ввода сообщения, чтобы дать пользователю возможность разделять текст своего сообщения на параграфы. Можно конечно разделять его и по нажатию Enter, но это чревато ошибками при explode(). Форма ввода должна иметь возможность динамического добавления полей file и text, ведь изображение может вообще не добавляться, а может быть добавлено несколько, а сколько не известно (хотя это надо ограничивать). Далее можно поступить одним из способов (в любом из них лучше всего применять различные шаблоны, под разные ситуации):
1. Положение картинок и текста на странице, задается с помощью элементов DIV.
2. При получении изображения, и, если есть, подпись к нему (длину которой нужно тоже ограничить), с помощью библиотеки GD добавляете ее к изображению, и с этой подписью записываете это изображение. Ну а далее с помощью атрибутов изображения align, hspace, vspace можно разместить его (их) среди параграфов текста.
В общем все можно продумать: шаблоны, алгоритм вывода котента в шаблон и прочее. | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 14:13)
| | Спасибо за такое подробное объяснение. В принципе все понятно, кроме самого главного.
>При получении изображения, и, если есть, подпись к нему (длину которой нужно тоже ограничить), с
>помощью библиотеки GD добавляете ее к изображению, и с этой подписью записываете это
>изображение.
Записываю куда?
>Ну а далее с помощью атрибутов изображения align, hspace, vspace можно разместить его (их) среди параграфов текста.
Этот текст находится где?
И все-таки, в textarea что-нибудь добавляется после выбора файла?
Может, в Вас есть ссылки на сайт, где реализовано что-то подобное? | |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 14:50)
| | >Записываю куда?
Ну вот этого я не заню, это уж вы определяете папку для записи изображений на сервер. Думаю, вы знаете, что после их загрузки они ложаться во временную директорию сервера под временным именем, и ваша задача премещать их от туда. Например, вы будете сохранять изображения в папке images/publish, тогда ваши ссылки на картинки должны указывать этот каталог. А для нанесения надписи на изображении, вы должны брать загруженное изображение именно то, которое лежит во временной папке, и после нанесения изображения на него, помещать в выбранную вами папку.
>Этот текст находится где?
Этот текст чего? Подписи к изображению? В поле ввода, например:
<form action="" method="post" enctype="multipart/form-data">
Сообщение: <textarea cols="30" rows="5" name="message"></textarea><br>
Изображение 1: <input type="file" name="image[]"><br>
Подпись 1: <input type="text" name="descriptor[]"><br>
Изображение 2: <input type="file" name="image[]"><br>
Подпись 1: <input type="text" name="descriptor[]"><br>
Изображение 3: <input type="file" name="image[]"><br>
Подпись 1: <input type="text" name="descriptor[]"><br>
</form>
|
Здесь поле ввода сообщения, и два массива - первый добавляемых изображений, а второй подписи к ним. Проверяйте их наличие, проводите соответствующие операции и сохраняйте.
>И все-таки, в textarea что-нибудь добавляется после выбора файла?
Кроме сообщения автора (и хорошо бы со вставкой ВВ-кода параграфов [Р][/Р]) какой смыл в него чего либо вставлять?
>Может, в Вас есть ссылки на сайт, где реализовано что-то подобное?
Если бы и была, то вы все равно увидите только клиентскую часть (HTML-код), и для чего все это служит, и как работает сторона сервера, вы ведь все равно не увидите. | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 15:20)
| | Все равно я не получил ответ на свой вопрос.
Если пользователь пишет такое сообщение:
"бла-бла рисунок бла-бла рисунок бла-бла-бла"
Исходя из Ваших объяснений нельзя определить в каких именно местах находятся рисунки.
Вот у меня возникла такая идея. По нажатию кнопки "Добавить рисунок" открывается форма для выбора файла и всех параметров рисунка. После нажатия кнопки "Принять" файл загружается на сервер, а в textarea добавляется текст:
[pic]подпись к рисунку[/pic]
Как Вы к этому относитесь? | |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 15:55)
| | А какой смысл в текст сообщения вставлять подпись к рисунку? Ну вы ведь читали текст, где есть ссылка на рисунок, например:
"бла-бла-бла см. Рис. 13"
Но эта сноска оправдана для описания схем, например, или иного, где обязательно требуется указание, так как таких рисунков может быть много. Хотя, можно и обойтись без этого, тем более, если это литературный текст:
//1параграф
"Я вчера с друганами ловил кайф на берегу моря..."
//2параграф
//3параграф
.........
//Nпараграф
//картинка с подписью "Наш кайф на море"
<img src="path/image.ext">
//NNпараграф
.......
Неужели в таком содержании трудно будет понять что к чему соотнести? Собственно, картинки можно выставить и после текста, и частями в середине его... фантазия тут может быть безгранична. Хотя, я ведь ничего не имею против, делайте как хотите, но мне кажется, что вы делаете лишнее и не нужное. | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 16:07)
| | Дело в том, что в реальности это будет скорее технический текст (хотя не обязательно), где текст идет вместе с формулами, например. | |
|
|
|
|
|
|
|
для: olejek
(23.05.2008 в 16:17)
| | Тогда другое дело. Ну тогда без ВВ-вставок не обойтись. Просто надо будет связать вставку ВВ-кода (ссылку на изображение) с идексом изображения в массиве, а при получении текста на сервере, добавлять не подпись к изображению, а номер по порядку в тексте, а src изображению естественно имя присвоенное на сервере. При этом поле ввода подписи для изображения не нужно. | |
|
|
|
|
|
|
|
для: sim5
(23.05.2008 в 16:22)
| | Спасибо, sim5, за терпение, подробные объяснения и советы. Теперь все понятно! | |
|
|
|
|