Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выполнить действие без перезагруски страницы, Возможно AJAX+PHP+MySQL 
:(
    Опции темы
Enya
  Дата 14.10.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот я тут не много распинаюсь, тренируюсь, напираюсь опыта. 
Столкнулась с задачей: требуется создать список имён и фамилий, кол-во людей в списке всегда разно и знать заранее не возможно. 
Мне пришло на ум вот такое решение: увидела на фото@mail.ru там для загруски фотографий, есть кнопочка "Ещё фото" и при клике, без перезагруски появляется ещё поле с кнопочкой Browse . Хочу подобное. Спомощью чего и как это реализуется, может кто сам делал подобное?

Присоединённый файл ( Кол-во скачиваний: 39 )
Присоединённый файл  addFleeld.gif 2,94 Kb


--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
griker
Дата 14.10.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MDMA
**


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

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



Ваша проблема решается средствами JavaScript:
Код

<html>
<head>
<title>Динамическое добавление поля по желанию пользователя.</title>
<script language="javascript">
var items=1;
function AddItem() {
  div=document.getElementById("items");
  button=document.getElementById("add");
  items++;
  newitem="<strong>Поле " + items + ": </strong>";
  newitem+="<input type=\"text\" name=\"item" + items;
  newitem+="\" size=\"45\"><br>";
  newnode=document.createElement("span");
  newnode.innerHTML=newitem;
  div.insertBefore(newnode,button);
}
</script>
</head>
<body>
<form name="form1">
<div ID="items">
<strong>Поле 1: </strong><input type="text" name="item1" size="45"><br>
<input type="button" value="Добавить поле" onClick="AddItem();" ID="add">
</div>
</form>
</body>
</html>

Желаю удачи smile 


--------------------
I don't respect police
PM MAIL   Вверх
Gold Dragon
Дата 15.10.2006, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



я бы сделал так
Код

<html>
<head>
<title>Динамическое добавление поля по желанию пользователя.</title>
<script language="javascript">
var items=1;
function AddItem() {
  div=document.getElementById("items");
  button=document.getElementById("add");
  items++;
  newitem="<strong>Поле " + items + ": </strong>";
  newitem+="<input type=\"text\" name=\"item[]";
  newitem+="\" size=\"45\"><br>";
  newnode=document.createElement("span");
  newnode.innerHTML=newitem;
  div.insertBefore(newnode,button);
}
</script>
</head>
<body>
<form name="form1" action="" method="post">
<div ID="items">
<strong>Поле 1: </strong><input type="text" name="item[]" size="45"><br>
<input type="button" value="Добавить поле" onClick="AddItem();" ID="add">
</div>
<input type="submit" value="Send">
</form>
</body>
</html>


тогда на выходе получится массив
Array ( [item] => Array ( [0] => [1] => [2] => [3] => [4] => ) ) 
который удобнее обрабатывать чем
Array ( [item1] => [item2] => [item3] => [item4] => [item5] => )

хотя, это дело вкуса


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Enya
Дата 15.10.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



griker, Gold Dragon, спасибо буду пробывать оба варианта.
А такой вопрос: вот у меня есть юзеры, они могу создавать списки людей, но вот эти списки могут быть от 20-350 ... и каким образом наиболее лучше их хранить в базе?

З.ы.
А может для этого дела заюзать хранение в файлах?! Но в БД привычнее. smile 


--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 15.10.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(Enya @  15.10.2006,  12:01 Найти цитируемый пост)
но вот эти списки могут быть от 20-350 ... и каким образом наиболее лучше их хранить в базе?

а почему бы не хранить эти списки через какой-нибудь разделитель в поле типа BLOB или TEXT


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Enya
Дата 15.10.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Gold Dragon @  15.10.2006,  17:38 Найти цитируемый пост)
а почему бы не хранить эти списки через какой-нибудь разделитель в поле типа BLOB или TEXT 
в принципе можно. Получается нужна ячейка большого размера. 
Вот я в принципе и вот думаю как массивчик из JS обработать PHP и засунуть в MySQL? по этому сразу и кинулся в AJAX.



--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
Enya
Дата 16.10.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Gold Dragon, блин, что-то я в замешательстве. Не понимаю как 
Цитата(Gold Dragon @  15.10.2006,  08:58 Найти цитируемый пост)
Array ( [item] => Array ( [0] => [1] => [2] => [3] => [4] => ) ) 
обработать php и засунуть в ячейку таблицы. smile 



--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 16.10.2006, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



ну у тебя же форма после того как ты нажмёшь на кнопку (допиши <input type="submit" value="Send">) отправляется куда-то (укажи в форме в action страницу, куда будут отсылаться данные)

А на этой странице ты получешь переменную (вернее массив)
... и обрабатываешь его как тебе удобно

Например
Код

<?php
$item = $_POST['item'];
for($i=0; $i<count($item); $i++){
    echo $i." - ".$item[$i]."<br>";
}
?>




--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Enya
Дата 16.10.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Нет, вы конечно можите назвать меня дурой, но у меня пока нет идей как засунуть массив $item в ячейку БД. smile 


--------------------

Утсанвлен Денвер
1. PHP Version 5.1.6
2. MySQL 5.0.18-max
3. phpMyAdmin 2.6.1
PM MAIL WWW ICQ   Вверх
Gold Dragon
Дата 16.10.2006, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



вот тебе код, если не понятно, спрашивай
Код

<?php
// ***********************************************
// если форма отправлена
if(isset($_POST['skin'])){
    $item = $_POST['item']; // присваиваем переменное переданное значение
    $q = ''; // создаём строку, которую запишем в базу
    for($i=0; $i<count($item); $i++){ // перебираем массив
        // если в данных встретится символ-разделитель, то мы его заменим на какой-нибудь аналог
        $item[$i] = str_replace("#", "Н", $item[$i]);
        //создаём строку
        if($q!=0){$q .= "#";}// не начинаем строку с разделителя
        $q .= $item[$i];
    }
    // записываем данные в базу
    $z = "INSERT INTO `table` (`id`,`str`)
         VALUES('','".$q."')";
    //$r = mysql_query($z);
    // ну конечно что есть таблица table и там есть поля id и str
    // в str и будет храниться строка с разделителями
    echo $q;
    echo skin2(); // выводим сообщение с результатом

// ***********************************************
// если страница загружается впервые
}else{
    echo skin1(); // выводим форму
}

function skin1(){
//*************************************************
// функция выводит форму
//*************************************************
return <<<EOF
<html>
<head>
<title>Динамическое добавление поля по желанию пользователя.</title>
<script language="javascript">
var items=1;
function AddItem() {
  div=document.getElementById("items");
  button=document.getElementById("add");
  items++;
  newitem="<strong>Поле " + items + ": </strong>";
  newitem+="<input type=\"text\" name=\"item[]";
  newitem+="\" size=\"45\"><br>";
  newnode=document.createElement("span");
  newnode.innerHTML=newitem;
  div.insertBefore(newnode,button);
}
</script>
</head>
<body>
<form name="form1" action="" method="post">
<div ID="items">
<strong>Поле 1: </strong><input type="text" name="item[]" size="45"><br>
<input type="button" value="Добавить поле" onClick="AddItem();" ID="add">
</div>
<input type="submit" value="Send" name="skin">
</form>
</body>
</html>
EOF;
}

function skin2(){
//*************************************************
// функция выводит результат сохранения в базе
//*************************************************
return <<<EOF
<html>
<head>
<title>Динамическое добавление поля по желанию пользователя.</title>
</head>
<body>
<p>Данные добавлены в таблицу
</body>
</html>
EOF;
}
?>


единственное что необходимо сделать, это проверять что вводит юзер в поля. А то может получиться не самое хорошее smile


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Opik
Дата 17.10.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

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



Enya, 
Ну что бы дурой тебя назвать, думаю нужно идти на другой форум.

По делу:
ИМХО, но тебе сам массив в базу писать не обязательно, верней сказать, даже не нужно.
Попробую тебе объяснить почему. Смотри: у тебя на выходе из HTML формы есть массив. Мы создали массив для того, что бы все фамилии были в одном месте, т.е в массиве. Это гораздо удобнее, нежели проверять бесчетное количество переменных. 

Слушаешь?) Читай дальше smile
Сам массив нам неинтересен, интересны лишь данные, что в нем хранятся. Отсюда сделаем вывод, что 1 человек = 1 запись в базе. Соотвественно, сколько фамилий, столько и записей. Объясню по действиям:
1) Присваиваем переменной значение из формы.
2) Циклом проходимся по этому массиву.
3) Обрабатываем каждый элемент на опасные спец символы ( www.php.net/mysql_escape_string )
4) После обработки заносим в базу
Примерный код:
Код

$fam = isset($_POST['item']) ? $_POST['item'] : array(); // аналог if else, если данные есть - берем их, если нет - создаем пустой массив во избежание ошибок
foreach($fam as $item) // проходимся циклом по каждому элементу
{
         mysql_query("INSERT INTO `table` (`id`, `name`) VALUES (NULL, '".mysql_escape_string($item)."')"); // заносим в базу
}


Как видишь, всё просто.

Это сообщение отредактировал(а) Opik - 17.10.2006, 23:21
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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