Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Открыть окно для создания формы 
:(
    Опции темы
Arisha
Дата 28.5.2004, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Доброго времени суток всем!

Нужно сделать такое:

при нажатии на ссылку открывается javascript окно, где выведена форма для редактирования ссылки. Передать из той формы надо все в некий php- файл или в тот же PHP_SELF, где будет использоваться полученная переменая.

Подкиньте идейку как осуществить. Попытки производятся, но
пока :error on page:


PM MAIL   Вверх
Sardar
Дата 27.5.2004, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Что за Error?

По идее ловим событие onClick якорей, открываем окошко, все изменения пишем в массив. Пользователь закончил с редактированием, жмет кнопку "Сохранить" и скрипт отсылает массив в невидимой форме POST'ом на сервер. Там ты получишь массив, делай с ним все что захочешь.

Скажи где не ясно. Опиши точнее задачу. Если не получится, то помогу с кодом.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Captain Blood
Дата 28.5.2004, 04:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Создать окно можно таким способом, как показано ниже. При нажатии на ссылку откроется окно с заданными размерами и в него загрузится файл email.html. В этом файле уже имеется требуемая форма для редактирования ссылки и отправки ее на сервер.

<html>
<head>
<script language="JavaScript">

function newWindow() {
window.open("email.html", "win", "width=400, height=300, status=0, menubar=0, location=0 resizable=0 directories=0 toolbar=0")


}
</script>
</head>
<body>

<a href="javascript:newWindow()">Открыть в новом окне</a>

</body>
</html>
  Вверх
Arisha
Дата 28.5.2004, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Здравствуйте!
С окном вроде бы вчера разобралась. Но появилась идея сделать через prompt - при нажатии на конкретную ссылку выскочит prompt, туда пользователь введет новое значение ссылки, а я его запомню в БД.

Только вот как обратиться к этой переменной потом в php?

PM MAIL   Вверх
Captain Blood
Дата 28.5.2004, 11:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Наверное проще присваивать значение Prompt скрытому полю формы и отправлять ее на сервер. Программа на php уже анализирует значения и делает с ними, что тебе надо.
Примерно так.
<script>
link = prompt("Введите ссылку","");
document.forms["formLink"].hiddenField.value = link;
</script>
...

<form name=formLink>
<input type=hidden name=hiddenField>

Скрипт лучше оформить в виде функции и вызывать ее при необходимости.

  Вверх
Captain Blood
Дата 28.5.2004, 11:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Подумалось, что можно сделать еще вот так.

<script>
function Link(f) {
link = prompt("Введите ссылку","");
f.hiddenField.value = link; // присваиваем введенное значение скрытому полю
f.submit(); // отправляем форму на сервер

}
</script>
...

<form name=formLink action="имя скрипта на php">
<input type=hidden name=hiddenField>

f в данном случае ссылка на форму. Если к функции обращаться из нее, то вызов будет Link(this.form), если из Submit, то вызов - Link(this).
  Вверх
Arisha
Дата 28.5.2004, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Captain Blood, спасибо за помощь!! Сейчас попробую это сделать.

И примерно:

Код

<script language="javascript">
function Link(f) {
link = prompt("Введите новое значение: "," ");
f.hiddenField.value = link; // присваиваем введенное значение скрытому полю
f.submit(); // отправляем форму на сервер
}
</script>

....

<form name=formLink action="имя скрипта на php">
<input type=hidden name=hiddenField>
<a href="..." onClick="Link(this.form)">


примерно так?

PM MAIL   Вверх
Arisha
Дата 28.5.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



[code]
<script language="javascript">
function Link(f)
{
link=prompt("Input new value","");
f.hiddenField.value=link;
f.submit();
}
</script>

<form name="formLink" action="<?=$_SERVER['PHP_SELF']?>" method="post">
<input type="hidden" name="hiddenField">
<a href="<?=$_SERVER[PHP_SELF]?>" onClick="Link(this.form)">aaa</a>
</form>

<?php
echo $_POST['hiddenField'];
?>
хммм, не выводит hiddenField
PM MAIL   Вверх
Arisha
Дата 28.5.2004, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Наконец-то сделала,уф.

wink.gif

Допустим, у меня есть несколько ссылок. При нажатии на каждую выскакивает окно, туда вписывается новое значение, а потом запоминается в БД. Все ок.

А если у меня рядов так 10 выводятся из БД в цикле, в каждом из них расположено по 3 ссылки, например:
  • Вася___его адрес___его телефон
  • Петя___его адрес___его телефон
  • ....
  • ....
  • Юра___его адрес___его телефон

Чтобы узнать у кого - Пети или Юры изменить телефон на полученное значение, надо знать его имя. Как это сделать?

Если передавать полем hidden, например, значение (Вася,Петя,...,Юра), то передается лишь последнее.
Если же прямо в цикле передавать текущее значение имени в массив, то не знаю, как потом обращаться к элементу массива - ведь неизвестно, сколько записей всего и на какую по счету запись нажали...


PM MAIL   Вверх
Arisha
Дата 28.5.2004, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Sardar, ты писал, что можешь с кодом помочь, если там что неверно.
Если твое желание еще не пропало, то посмотри, пожалуйста, предыдущий пост и вот код:
Код

<script language="JAVASCRIPT">
function Linkes(n)
{
var d=document.forms['myForm'];
link=prompt("Input new value","");
d.hiddenField.value=link + "-" + n;  /*для передачи полученного значения в php
                                                n==0,1,2 => первая из ссылок, вторая, третья*/
d.submit(); //отправка
return false;
}
</script>
<table class="form" cellpadding=10px>
<tr>
     <td>name</td><td>address</td><td>phone</td>
     <form name="myForm" action="<?=$_SERVER[PHP_SELF]?>" method="post">
     <td></td>
</tr>

<?php
 foreach ($names_array as $v)
   {
?>
   <tr>
   <td><a href="<?=$_SERVER['PHP_SELF']?>" onClick="return Linkes(0)">
   <?=$v['name']?></a></td>

   <td><a href="<?=$_SERVER['PHP_SELF']?>" onClick="return Linkes(1)">
   <?=$v['address']?></a></td>

   <td><a href="<?=$_SERVER['PHP_SELF']?>" onClick="return Linkes(2)">
   <?=$v['phone']?></a></td>
   
   <td></td>
   </tr>
<?php
   }

?>
<input type="hidden" name="hiddenField">
<input type="hidden" name="ev">  //сюда можно передать значение первоы ссылки с name?

</table>
</form>


Это сообщение отредактировал(а) Arisha - 28.5.2004, 20:59
PM MAIL   Вверх
Sardar
Дата 29.5.2004, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Мне не понравилось что мы при любом изменении сразу же отправляем форму на сервер. Попробуем улучшить скрипт:
Код
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html>
<head>
<title>Changer v0.1</title>
<script language="Javascript" type="text/javascript">
<!--
var Peoples={}; //в этом массиве будем сохранять изменения
function changeData(tr) {
var pl=new people(tr);
Peoples[pl.user_id]=pl;
//разметку напиши по вкусу или подгрузи документ
wn=window.open("about:blank","formulier","height=200, widht=300,location=no,resizable=no,scrollbars=no,toolbar=no");
wn.document.open();
wn.document.write("<html><body><form>\
 <input type='hidden' name='id' value='"+pl.user_id+"'>\
 Name:<input type='text' name='name' value='"+pl.name+"'><br>\
 Adres:<input type='text' name='adres' value='"+pl.adres+"'><br>\
 Phone:<input type='text' name='phone' value='"+pl.phone+"'><br>\
 <input type='button' onClick='javascript: window.opener.set_data(this.form); window.close();' value='Done'></form></body></html>");
wn.document.close();
}
//сюда придут изменения
function set_data(frm) {
 //check data
 var name, adres, phone, tr=Peoples[frm.elements.id.value];
 if((name=frm.elements.name.value)&&(adres=frm.elements.adres.value)&&(phone=frm.elements.phone.value)) {
  tr.update_target(name,adres,phone);
 }
}
//обьект представляющий запись изменений одного человека
function people(tr) {
this.target=tr;
this.name=tr.childNodes[0].firstChild.nodeValue;
this.adres=tr.childNodes[1].firstChild.nodeValue;
this.phone=tr.childNodes[2].firstChild.nodeValue;
this.user_id=tr.getAttribute("name");
this.update_target=function(nm,adres,phone) {
 tr.childNodes[0].firstChild.nodeValue=this.name=nm;
 tr.childNodes[1].firstChild.nodeValue=this.adres=adres;
 tr.childNodes[2].firstChild.nodeValue=this.phone=phone;
}
}
//отправляем форму
function sendForm() {
var sf=document.getElementById('s_form');
var chlds=[];
for(i in Peoples) {
 //столько полей, сколько данных
 var chld=document.createElement('INPUT');
 chld.type='hidden';
 chld.name="usr_data['"+i+"']";
 chld.value=(Peoples[i].name+"|"+Peoples[i].adres+"|"+Peoples[i].phone);
 chlds.push(chld);
}
if(chlds.length>0) {
 if(window.confirm("Сохранить "+chlds.length+" изменений?")) {
  //если да то кидаем все в форму и отправляем
  for(var i=0; i<chlds.length; i++) sf.appendChild(chlds[i]);
  sf.submit();
 }
} else alert("Вы не сделали изменений");
}
//-->
</script>
</head>

<body>

<table>
<tr><td>Name</td><td>Adress</td><td>Phone</td></tr>
<tbody>
 <tr onClick="changeData(this)" name="ppl1"><td>Sardar</td><td>Someweg 67</td><td>032544523</td><tr>
 <tr onClick="changeData(this)" name="ppl2"><td>Sardar</td><td>Someweg 67</td><td>032544523</td><tr>
</tbody>
</table>
<button onClick="sendForm()">Save changes</button>
<!-- Скрытая форма -->
<form id="s_form" action="http://localhost/recieve.php" style="display: none" method="POST" target="_self">
</form></body></html>

Код на скорую руку, но проверил, он работает. Работает везде кроме Opera, так как она криво работает с аттрибутами html элементов - мне не удалось достать name(идентификатор записи).

На северре получаем массив $_POST['usr_data'], в котором лежат имя_tr=>значения|полей|через_вертикальную черту. Простейший код покажет все:
Код
<pre>
<?php
 print_r($_POST);
?>
</pre>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Arisha
Дата 31.5.2004, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Огромное спасибо, Sardar!

Так действительно лучше. Буду разбираться.



PM MAIL   Вверх
Sardar
Дата 31.5.2004, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Немного запутанно написал...
Содержимое ячеек доставал через childNodes[0-2].firstChild.nodeValue, т.е. в первых трех ячейках таблицы(DOM).

Если что то не понятно, то спрашивай. Тема интересная, продумай логику скрипта, без поблажек, а так что бы действительно удобно было. А мы поможем превратить идею в код smile.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Arisha
Дата 2.6.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 8.5.2004

Репутация: нет
Всего: нет



Хорошо, спасибо.
Я буду стараться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.