Временно съхраняване на HTML, докато се попълва форма

metal_head

Registered
Имам следната ситуация.

В почти готовия ми уебсайт, потребителите ми могат да качват текстове на песни. При качването на текст, потребителят пише заглавието на песента, слага текста в WYSIWYG редактор и задава името на изпълнителя. Когато натисне изпращане, системата проверява дали има такъв изпълнител в базата данни. Ако няма, системата ще провери дали има подобни изпълнители на това, което потребителят е написал и ако няма, ще го прати на една страница, която ще го накара да попълни кратка информация за изпълнителя преди да продължи. След попълването на информацията, потребителят натиска OK и текстът и изпълнителя се добавят в сайта.
Проблемът е, че за да може да стане този номер с препращането по други форми, системата трябва да съхранява информацията от текста на песента през цялото време, докато се попълват информациите. Ясно - подобно нещо се прави с hidden input, но проблемът е, че текста на песента излиза от WYSIWYG редактор и той има някои HTML елементи по себе си (span, p, em...). В такава ситуация текстът става несъхраняем в hidden. Мина ми идея да го направя със сесия, но никъде в интернет не намерих информация за това, дали сесията е добра идея и дали изобщо ще стане.
 
Запази го в сесия, като стринг.


PHP:
$_SESSION['temp_text'] = $_POST['text'];

Като разбира се добавиш необходимите защити.

Другия ти вариант е strip_tags()
 
Може да е тромаво, ама си направи временна таблица в базата данни. След препращането съхраняваш в нея, като приключи му зареждаш написаното от нея, и като мине проверките изпълняваш 2 заявки, с едната добавяш в истинската, с другата триеш временната.
Аз така бих направил и мисля, че и в wordpress превюто и аутосейв е нещо такова.
 
Благодаря ви за бързите отговори!
Кой вариант от двата обаче е по-добър?
За нова таблица не се бях сещал, но се сещам за някои евентуални проблеми, които могат да възникнат. Със сесия пък не знам дали е ОК, ако текстът е много дълъг.
 
Ами няма как да разбереш, докато не пробваш :)

Проблеми можеш да срещнеш навсякъде. Но мен са ме учили, че когато мога да не ползвам БД е по-добре да не ползвам бд :)
 
Malfurion каза:
Ами няма как да разбереш, докато не пробваш :)

Проблеми можеш да срещнеш навсякъде. Но мен са ме учили, че когато мога да не ползвам БД е по-добре да не ползвам бд :)

Защо пък така са те учили? :)
Всичко е файлове - и mysql таблиците са файлове, и ако реши да за пазва във временен файл, пак е ... файл, и сесията е файл, който обаче пазиш на компютъра на клиента. Тук лошото е, че може да се манипулира а и ако да речем му забие браузъра ще изчезне.

Металната глава ако се реши да тества да каже резултат :)
 
Аз пробвах със Session - не исках да ползвам базата данни и сега си работи всичко. Просто се чудех дали е разумно да се съхранява толкова информация в една сесия, но явно няма проблеми :)

Благодаря ти!
 
rombeca каза:
Malfurion каза:
Ами няма как да разбереш, докато не пробваш :)

Проблеми можеш да срещнеш навсякъде. Но мен са ме учили, че когато мога да не ползвам БД е по-добре да не ползвам бд :)

Защо пък така са те учили? :)
Всичко е файлове - и mysql таблиците са файлове, и ако реши да за пазва във временен файл, пак е ... файл, и сесията е файл, който обаче пазиш на компютъра на клиента. Тук лошото е, че може да се манипулира а и ако да речем му забие браузъра ще изчезне.

Металната глава ако се реши да тества да каже резултат :)

Веднага обяснявам!

Да, ако затвори браузера - ще изчезне.

Но, ако затвори браузера ще трябва да започне да попълва фомрата отново и съответно ще създаде нов запис в БД!

А, какво става със стария?

Такъв тип информация - "временна", е хубаво да се запазва във "временни" сесии, защото не е ясно дали ще се използва и ако ще се използва до кога :)
 
А, какво става със стария?

Е сега... :)
PHP:
 DELETE * FROM `временна_таблица` WHERE `потребителско_ID`...

Щом сесии му вършат работа, екстра. Просто предлагам като вариант.
 
Malfurion каза:
Страхотно, а ако няма потребителско ID(свободно добавяне на текстчета)?
По-ip? -> Динамично IP?

По ДНК профил. :)
Защо се заяждаш?
Надали ще пусне непроверени потребители да добавят.
Както и да е. Оправил се е.
 
rombeca каза:
Malfurion каза:
Страхотно, а ако няма потребителско ID(свободно добавяне на текстчета)?
По-ip? -> Динамично IP?

По ДНК профил. :)
Защо се заяждаш?
Надали ще пусне непроверени потребители да добавят.
Както и да е. Оправил се е.

Опитвам се да покажа, защо Сессите са по-добър вариант.

1. Той сам каза - всичко са файлове.

Да, ама сессите се създават на компютъра на потребителя и не натоварват хостинга, докато Базата данни се съхранява на хостинга и всичките заявки натоварват малко или много.

Това е решение за малък сайт с малко посетители.

Какво става, ако утре пусне форма която се попълва от огромен брой посетители?

2. Той има по 3 заявки на попълване(добавяне, показване и триене). Да при 100 потребителя от който 10 да попълват формата звучи смешно 30 заявки. Ама те могат да бъдат спестени. Какво правим при 1 000 000 потребители, от който 100 000 попълват формата всеки ден?


Глобално погледнато, сесиите са по-доброто решение.

Иначе не отричам неговият начин - да, работи! Просто искам да дискотираме, защо сесиите са по-добрия вариант.

Аз ако бях прочел тази тема, без да мога да работя със сесии, познавайки начина по-който работи MySql(или алтернативна) - щях веднага да се възползвам от бд. Без дори да се замислям за трафик и по-леки алтернативи.
 
По същата логика PHP ще създаде 100 000 файла и ще ги изпрати на потребителя, което няма да товари никак. :)

Остава и въпроса за по-лесното манипулиране на сесии.

Разбери, не защитавам моя метод, просто обърнахме темата на човека в дискусия. :)

Без реален тест, ще си спорим още 5 страници тука.

Аз лично в тая ситуация, няма да подходя по подобен начин, и няма да използвам нито един от двата варианта.
 
rombeca каза:
По същата логика PHP ще създаде 100 000 файла и ще ги изпрати на потребителя, което няма да товари никак. :)

Остава и въпроса за по-лесното манипулиране на сесии.

Разбери, не защитавам моя метод, просто обърнахме темата на човека в дискусия. :)

Без реален тест, ще си спорим още 5 страници тука.

Аз лично в тая ситуация, няма да подходя по подобен начин, и няма да използвам нито един от двата варианта.

Добре, нали това е форум за помощ и взаимопомощ. Какво по-добро от една дискусия по дадена тема :)

Така и така го спомена, ти какво би направил в тази ситурация?
Предложи и трета алтернатива, тя може да е по-добра от първите две :)
 
Предложи и трета алтернатива, тя може да е по-добра от първите две Smile

Ок, друг вариант :).
Метална глава чети, може да ти хареса.

Когато потребителя започне да добавя, да се прави проверка има ли вече написано описание и да му се покаже. Сега ще се аргументирам:
Има групи с еднакви имена, но с различен стил, държава и т.н. След като му се покаже, той ще прецени за същата ли група става въпрос. Ако няма писано точно за нея, в същата форма любезно му се предоставя възможността да направи описание. След това се запазва в БД всичко. Без 2 форми и междинни страници, и без сесии. Една заявка.

За по гъзарско, може с AJAX да се проверява директно инпута на групата за съществуващ запис. По същия начин, показваш и допълнителните полета за описанието.

П.П. Добре ли е? :)
 
rombeca каза:
Предложи и трета алтернатива, тя може да е по-добра от първите две Smile

Ок, друг вариант :).
Метална глава чети, може да ти хареса.

Когато потребителя започне да добавя, да се прави проверка има ли вече написано описание и да му се покаже. Сега ще се аргументирам:
Има групи с еднакви имена, но с различен стил, държава и т.н. След като му се покаже, той ще прецени за същата ли група става въпрос. Ако няма писано точно за нея, в същата форма любезно му се предоставя възможността да направи описание. След това се запазва в БД всичко. Без 2 форми и междинни страници, и без сесии. Една заявка.

За по гъзарско, може с AJAX да се проверява директно инпута на групата за съществуващ запис. По същия начин, показваш и допълнителните полета за описанието.

П.П. Добре ли е? :)

Прекрасно е :)

Ето така би станало наистина професионално.
Естествено вече има jQuery, което би улеснило този процес.

От трите алтернативи, тази е най-добра :)
 
@Malfurion сесията се записва на СЪРВЪРА, бисквитката се записва на потребителската машина.

PHP:
$kod = $_POST['text'];

$new = htmlspecialchars($kod, ENT_QUOTES);

<input ..... value="$new" type="hidden" name="text" />

PHP:
$post = $_POST['text'];

$text = htmlspecialchars_decode($post, ENT_QUOTES, 'charset-site/utf-8/windows-1251...etc');

[sql]insert into table ...... (title, text...) values ($title, $text)[/sql]


@rombeca предложи най-добрия метод :)
Аз само ще шметна да се ползва full text search на mysql и индекси на полетата за търсене :)
 
Позабравил съм някой неща. Съжалявам.

@jooorooo По спомени с hidden във формата много лесно се манипулираше.
 
Malfurion каза:
Позабравил съм някой неща. Съжалявам.

@jooorooo По спомени с hidden във формата много лесно се манипулираше.

Така е, но все пак той ако е искал да е друго е щял още при добавяне да въведе друго. А за съхранение в сесия.. не е от най-добрите идеи. Причините са много, от препълване на папката със сесиите до още безброй причини
 

Back
Горе