red9skull
17.08.2009, 17:47:52
Witam! Jak zrobić dynamiczny tekst? Tzn. wpisuję tekst w formularzu i on pokazuje się na stronie. Potem wpisuję drugi tekst i pokazuje się on
pod pierwszym tekstem. Screen tego o co mi chodzi:

Nie chodzi mi o gotowy skrypt, ale naprowadzenie czego w skrypcie użyć.
Tutaj próbowałem użyć pętli i tablic ale mi nie wyszło...
wookieb
17.08.2009, 17:49:46
Zapisujesz sobie ten tekst gdzieś (do pliku lub bazy danych) i potem przy wyświetlaniu tekstów listujesz sobie zapisane dane.
kfc4
17.08.2009, 17:52:16
Chcesz to robić na bazie czy plikach? Jak na bazie danych to tu jest o MySQL:
http://www.egrafik.pl/porady/phpmysql-oper...iem-bazy-mysql/ , a tu są opisane operacje na plikach:
http://programowanie.celary.net/operacje_n...kach_w_php.html .
piotrooo89
17.08.2009, 17:52:43
kurcze nie wiem ale przytałem kilka razy i chyba chodzi Ci o JaveScript. ma to działać tak:
wpisuje text1
wpisuje text2
wpisuje text3
i potem:
text1
text2
text3
coś takiego?
Fifi209
17.08.2009, 17:55:49
Odczytujesz co jest w pliku:
file_get_contents a potem dopisujesz to co było + nowe dane
file_put_contents
red9skull
17.08.2009, 17:57:36
nie chcę tego zapisywać do bazy ani do pliku- za każdym razem gdy wywołam stronę ma być pusta bez tekstu. najbliżej chyba rozwiązania mojego problemu jest piotrooo89..
Fifi209
17.08.2009, 17:59:07
To sobie w sesji zapisz. I po sprawie.
Nie każdy musi mieć włączony js.
Ale powiedz co chcesz zrobić, do czego Ci to potrzebne?
piotrooo89
17.08.2009, 18:00:29
spróbuj coś takiego:
function pokaz(co, gdzie)
{
var gdzie = document.getElementById(gdzie);
gdzie.innerHTML=co;
}
<input type="text" name="t1" id="t1" onKeyUp="pokaz(this.value, 't1l')" /> <input type="text" name="t2" id="t2" onKeyUp="pokaz(this.value, 't2l')" />
choć dalej nie wiem czy Ci o to chodzi.
//EDIT
Cytat
To sobie w sesji zapisz. I po sprawie.
Nie każdy musi mieć włączony js.
ale to ma być
dynamiczne a w przypadku sesji musisz przeładować. btw. kto normalny wyłącza JS'a?
red9skull
17.08.2009, 18:04:48
Cytat(piotrooo89 @ 17.08.2009, 19:00:29 )

spróbuj coś takiego:
function pokaz(co, gdzie)
{
var gdzie = document.getElementById(gdzie);
gdzie.innerHTML=co;
}
<input type="text" name="t1" id="t1" onKeyUp="pokaz(this.value, 't1l')" /> <input type="text" name="t2" id="t2" onKeyUp="pokaz(this.value, 't2l')" />
choć dalej nie wiem czy Ci o to chodzi.
chodzi mi o to, że po naciśnięciu 'submit' pokazuje się tekst
Cytat(fifi209 @ 17.08.2009, 18:59:07 )

To sobie w sesji zapisz. I po sprawie.
Nie każdy musi mieć włączony js.
Ale powiedz co chcesz zrobić, do czego Ci to potrzebne?
w sesji? tzn. jak?
piotrooo89
17.08.2009, 18:07:53
kurcze mylisz pojęcia. dynamicznie to znaczy bez przeładowywania strony i właśnie od tego mamy JS'a. jeśli chcesz to zrobić po wysłaniu submita to poczytaj o formularzach w php i nie truj takimi podstawami.
red9skull
17.08.2009, 18:10:26
Cytat(piotrooo89 @ 17.08.2009, 19:07:53 )

kurcze mylisz pojęcia. dynamicznie to znaczy bez przeładowywania strony i właśnie od tego mamy JS'a. jeśli chcesz to zrobić po wysłaniu submita to poczytaj o formularzach w php i nie truj takimi podstawami.
ale jak robić, żeby wyświetlały się teksty jeden po drugim? jakiś link?
Fifi209
17.08.2009, 18:14:05
Wrzucasz do sesji np.
Jako tablicę i dodajesz potem elementy
$_SESSION['tekst'][] = 'tekst';
a potem pętlą
foreach ($_SESSION['tekst'] as $value) {
}
PODSTAWY PODSTAW.
jmail
17.08.2009, 18:15:45
nie marudź
RTFM
!!!!
<script type="text/javascript" language="JavaScript">
function dodaj_tekst(){
document.getElementById('divek').innerHTML = document.getElementById('divek').innerHTML + document.getElementById('tekszt').value + '
<br>';
document.getElementById('tekszt').value = '';
}
<input type="text" name="ble" id="tekszt"><input type="button" value="Dodaj" onclick="dodaj_tekst()">
piotrooo89
17.08.2009, 18:15:47
<form method="post" action="">
<input type="text" name="t1" />
<input type="text" name="t2" />
<input type="submit" value="wyslij" />
</form>
<?php
echo $_POST['t1'].'<br />'.$_POST['t2']; ?>
więcej odemnie nie dostaniesz. masz wszystko na tacy, a w necie pełno tutorialów.
Plik html index.html
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script language="javascript" type="text/javascript" src="prototype.js"></script> <script language="javascript" type="text/javascript" src="skrypt.js"></script> Forumlarz:
<input type="text" id="text_podany_przez_uzytkownika"> <a href="java script:skrypt.dodaj_tekst_do_strony()"> dodaj tekst
</a>
Plik js skrypt.js
/** @class skrypt
* @brief klasa odpowiedzialna za dodawanie tekstu z forumalarza do strony
* @date 17-08-2009
*/
skrypt =
{
/**
* Metoda pobiera text z formularza i tworzy nowy blok na stronie
* z pobranym wcześniej tekstem
*/
dodaj_tekst_do_strony : function()
{
// pobieram wartosc z pola textowego do zmiennej text za pomocą funkcji prototype $F
var text = $F( 'text_podany_przez_uzytkownika' ) ;
$( 'text_podany_przez_uzytkownika' ).value = "" ;
// tworze dynamicznie w bloku div o id strona nowy blok z pobranym wyżej tekstem
var blok = document.createElement('div');
blok.innerHTML = text ;
$( 'strona' ).appendChild( blok ) ;
}
}
Mój przykład wykorzystuje bibliotekę prototype.js
red9skull
17.08.2009, 18:25:08
Cytat(jmail @ 17.08.2009, 19:15:45 )

nie marudź
RTFM
!!!!
<script type="text/javascript" language="JavaScript">
function dodaj_tekst(){
document.getElementById('divek').innerHTML = document.getElementById('divek').innerHTML + document.getElementById('tekszt').value + '
<br>';
document.getElementById('tekszt').value = '';
}
<input type="text" name="ble" id="tekszt"><input type="button" value="Dodaj" onclick="dodaj_tekst()">
taaaaaaaaaaaaaaak!!! to jest to, dzięki, leci pomógł
kfc4
17.08.2009, 18:28:56
Cytat
btw. kto normalny wyłącza JS'a?
Twierdzisz, że jestem nienormalny? Że jak mam włączonego noscripta i wyjątki na stronach, które odwiedzam regularnie, to jest coś źle ze mną? Nie, po prostu ja i wiele mi podobnych osób nie lubi jak coś gra i świeci na wejście. Nie wszystko jest dla adblacka np. fleshowe strony, filmiki na stronach etc.
jmail
17.08.2009, 18:32:35
co racja to racja. ja też nie lubię ciągnąć niewpotrzebnych libów, żeby zobaczyć jak mi ramka wokół pola tekstowego robi się czerowna albo zielona. Co innego dedykowane serwisy na Ajax'ie ale w tym temacie mamy przykład wykonania tego zadania w sposób banalny trzmea linijkami kodu i sposób z prototype.js. Tylko po co ten cały lib?
red9skull
18.08.2009, 07:26:34
Ja jeszcze mam ostatnie pytanie: czy dałoby radę zrobić coś takiego w PHP?
kfc4
18.08.2009, 08:02:16
Tak, sesjami/ciasteczkami. Ale sesje lepsze.
red9skull
18.08.2009, 15:54:20
Cytat(kfc4 @ 18.08.2009, 09:02:16 )

Tak, sesjami/ciasteczkami. Ale sesje lepsze.
Znalazłem coś niecoś na temat sesji i mam pytanie: dałoby radę zrobić tak, żeby to co wpiszę wyświetliło się na tej samej stronie? Oczywiście w PHP.
Wicepsik
18.08.2009, 15:59:30
tak
kfc4
18.08.2009, 16:00:12
Jak na tej samej stronie? Bez odświeżenia? Nie. Cały czas na np. index.php? Jak najbardziej.
red9skull
18.08.2009, 16:01:31
Cytat(kfc4 @ 18.08.2009, 17:00:12 )

Cały czas na np. index.php? Jak najbardziej.
dokładnie- jak coś takiego zrobić?
Wicepsik
18.08.2009, 16:17:29
isset,
empty - przy pierwszym wejściu na stronę
red9skull
18.08.2009, 17:41:28
Cytat(Wicepsik @ 18.08.2009, 17:17:29 )

isset,
empty - przy pierwszym wejściu na stronę
Używając tego tekst nadpisuje się, a ja chciałem, żeby każdy tekst wpisany do formularza pokazywał się pod poprzednim.
kfc4
18.08.2009, 17:53:30
Jeżeli nic nie napisano wcześniej to zapisz to co napisano teraz, ale jeżeli jest już coś napisane to dopisz. Taki hint: lepiej używać tablicy (łatwiej jest później modyfikować wyświetlanie).
maniekl2
18.08.2009, 17:55:58
1. Wyświetlanie formularza.
2. Sprawdzanie czy istnieje coś w zmiennej sesyjnej i czy nie jest pusta ( isSet(), empty() )
3. Jak istnieje wyświetla to co jest zawarte w tej zmiennej.
4. Jak naciśniesz submit i istnieje zmienna POST to dodaje do zmiennej sesyjnej nowy wpis z formularza. Strona się przeładowuje więc wraca do punktu 1.
Jeżeli dobrze Cię zrozumiałem to tak to powinno wyglądać w php.
A jeżeli chodzi o to wyświetlanie pod spodem to albo tablice, albo zwykłe <br> dopisywane do zmiennej sesyjnej
red9skull
18.08.2009, 18:01:30
Cytat(maniekl2 @ 18.08.2009, 18:55:58 )

1. Wyświetlanie formularza.
2. Sprawdzanie czy istnieje coś w zmiennej sesyjnej i czy nie jest pusta ( isSet(), empty() )
3. Jak istnieje wyświetla to co jest zawarte w tej zmiennej.
4. Jak naciśniesz submit i istnieje zmienna POST to dodaje do zmiennej sesyjnej nowy wpis z formularza. Strona się przeładowuje więc wraca do punktu 1.
Jeżeli dobrze Cię zrozumiałem to tak to powinno wyglądać w php.
A jeżeli chodzi o to wyświetlanie pod spodem to albo tablice, albo zwykłe <br> dopisywane do zmiennej sesyjnej
Takie coś napisałem:
<?php $licznik == 0;
if($_GET['submit']) {
$licznik++;
$rozmowa[$licznik] = $say;
echo ($rozmowa[$licznik]); }
?>
I dalej mi podmienia tekst..
maniekl2
18.08.2009, 18:53:14
Tutaj nie ma szans się nic dodawać bo nie ma sesji. Pokaże ci przykład użycia sesji.
<?php
if(isSet($_SESSION['rozmowa']) && !empty($_SESSION['rozmowa']) ) {
$_SESSION['rozmowa'] .= 'coś tam';
} else {
$_SESSION['rozmowa'] = 'coś tam';
}
?>
Tylko powiedz czy to ma być skrypt rozmowy dwóch osób ? Bo jak tak to sesje odpadają, zostanie baza danych i pliki.
kfc4
18.08.2009, 19:01:32
Cytat(red9skull @ 18.08.2009, 19:01:30 )

Takie coś napisałem:
[PHP]
pobierz,
plaintext - <?php $licznik == 0;
- if($_GET['submit']) {
- $rozmowa = array();
- $licznik++;
- $rozmowa[$licznik] = $say;
- echo ($rozmowa[$licznik]); }
- ?>
[PHP]
pobierz,
plaintext I dalej mi podmienia tekst..
Na początku skryptu, że $likcznik jest
IDNTYCZNY 0, a powinno być
=. Dalej jak odnowa się wykonuje skrypt to licznik jest znowu zerowany. Licznik powinien być również w sesji zapisany.
jmail
18.08.2009, 19:09:26
nie chodzi CI przypadkiem o coś takiego?
<?php
if(!isset($_SESSION['tekst'])){ $_SESSION['tekst'] = '';
}
else{
if(isset($_POST['tresc']) && trim($_POST['tresc']) != ''){ $_SESSION['tekst'] .= $_POST['tresc'].'<br>';
}
}
?>
<div>
<?php echo $_SESSION['tekst']; ?> </div>
<form name="test" method="POST">
<input type="text" name="tresc"><input type="submit" value="Wyślij">
</form>
maniekl2
18.08.2009, 19:16:09
Pewnie mu o to chodziło, ale jak widzisz wszyscy starali się naprowadzić go na to, a ty niestety zrobiłeś to za niego.
jmail
18.08.2009, 19:18:30
taaak. wczoraj założyłem temat żeby właśnie nie pomagać gotowym kodem to zostałem wyśmiany i sprowadzony na ziemię. to co mam się postrzymywać?
maniekl2
18.08.2009, 19:28:03
Nikt Cię nie wyśmiał, tylko dali ci do zrozumienia, że nie ma sensu zakładać takich tematów bo i tak znajdzie się łasy na punkty człowiek, który poda gotowca. A ty właśnie zaczynasz zachowywać się jak ten łasuch. Ale lepiej skończmy tą gadkę bo nie w tym temacie jest o tym rozmowa.
red9skull
19.08.2009, 07:35:37
Cytat(jmail @ 18.08.2009, 20:09:26 )

nie chodzi CI przypadkiem o coś takiego?
<?php
if(!isset($_SESSION['tekst'])){ $_SESSION['tekst'] = '';
}
else{
if(isset($_POST['tresc']) && trim($_POST['tresc']) != ''){ $_SESSION['tekst'] .= $_POST['tresc'].'<br>';
}
}
?>
<div>
<?php echo $_SESSION['tekst']; ?> </div>
<form name="test" method="POST">
<input type="text" name="tresc"><input type="submit" value="Wyślij">
</form>
Kod
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Program Files\WebServ\httpd\index.php:9) in C:\Program Files\WebServ\httpd\index.php on line 22
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Program Files\WebServ\httpd\index.php:9) in C:\Program Files\WebServ\httpd\index.php on line 22
Spawnm
19.08.2009, 07:39:44
O 'headers already sent by' było na forum milion razy, poszukaj.
red9skull
19.08.2009, 08:04:36
już sobie poradziłem ale mam jeszcze jeden problem =) jak zrobić aby po wciśnięciu "submit" kursor 'powracał' do formularza? żeby nie trzeba było za każdym razem klikać w formularz żeby coś napisać.
Spawnm
19.08.2009, 08:15:14
ustaw focus(); dla inputa.
red9skull
19.08.2009, 08:28:56
ok dzięki. ale teraz zauważyłem jeszcze jeden błąd: mianowicie kiedy odświeżam stronę to tekst nie znika (a miał)- mało tego- kiedy zamykam przeglądarkę i otwieram to tekst cały czas jest! jak zrobić, żeby tekst kasował się po odświeżeniu strony?
kfc4
19.08.2009, 08:50:37
Będzie on tam widoczny tyle ile trwa sesja. Myślę, że dało by coś radę wykombinować. Coś, że jeżeli wywoła się stronę bez wysyłania formularza, to ma się wyczyścić/zniszczyć sesja.
red9skull
19.08.2009, 08:56:44
Cytat(kfc4 @ 19.08.2009, 09:50:37 )

Będzie on tam widoczny tyle ile trwa sesja. Myślę, że dało by coś radę wykombinować. Coś, że jeżeli wywoła się stronę bez wysyłania formularza, to ma się wyczyścić/zniszczyć sesja.
dokładnie =) jakieś pomysły jak to zrobić?
maniekl2
19.08.2009, 09:49:32
Dodaj po prostu link "usuń tekst" i po wciśnięciu wyzeruj zmienna sesyjna tekst, albo zrób tak jak kolega wyżej podał, że jak nie ma zmiennej post to czyści zmienna sesyjna tekst
red9skull
19.08.2009, 10:29:25
kiedy klikam 'usuń tekst' to tekst się usuwa. kiedy odświeżam stronę tekstu nie ma. ale kiedy wywołuję na nowo stronę to tekst się pojawia (ten który usunąłem..). sesję usuwam za pomocą: unset ( $_SESSION );
kfc4
19.08.2009, 11:00:41
To zapisz do niej pusty ciąg. Ale lepiej zrobisz
//...
if ($_POST){
//...
}
else {
$_SESSION['rozmowa'] = "";
}
//...
IMHO
red9skull
19.08.2009, 11:04:21
Cytat(kfc4 @ 19.08.2009, 12:00:41 )

To zapisz do niej pusty ciąg. Ale lepiej zrobisz
//...
if ($_POST){
//...
}
else {
$_SESSION['rozmowa'] = "";
}
//...
IMHO
przypisałem do nie pusty ciąg, bo tego nie zrozumiałem
kfc4
19.08.2009, 11:09:18
To pozwól, że wyjaśnię. Jeżeli istnieje zmienna post czyli został wysłany formularz to dopisujesz sobie to do tej istniejącej rozmowy, ale jeżeli nie ma wysłanego formularza czyli użytkownik wszedł po raz pierwszy lub po raz któryś tam to przypisujesz rozmowie pusty ciąg. Rozumiesz?
red9skull
19.08.2009, 11:45:26
Cytat(kfc4 @ 19.08.2009, 12:09:18 )

To pozwól, że wyjaśnię. Jeżeli istnieje zmienna post czyli został wysłany formularz to dopisujesz sobie to do tej istniejącej rozmowy, ale jeżeli nie ma wysłanego formularza czyli użytkownik wszedł po raz pierwszy lub po raz któryś tam to przypisujesz rozmowie pusty ciąg. Rozumiesz?
jednak ten sposób mi się nie przyda ;] ale dzięki za pomoc =)
kiedy próbuję użyć instrukcji switch, np:
switch($tresc) {
case ip: $_SESSION['tekst'] = $_SERVER['REMOTE_ADDR'];
}
to nie pokazuje mojego IP, ale jak użyję instrukcji if:
if ($tresc == "ip") { $_SESSION['tekst'] = $_SERVER['REMOTE_ADDR']; }
to wyświetla- w czym tkwi problem?
Wicepsik
19.08.2009, 11:52:02
red9skull
19.08.2009, 12:08:40
Cytat(Wicepsik @ 19.08.2009, 12:52:02 )

a w jakimś kursie online znalazłem, że bez ' się pisze.. dzięki za pomoc
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.