Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dynamiczny tekst
Forum PHP.pl > Forum > Przedszkole
Stron: 1, 2
red9skull
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
Zapisujesz sobie ten tekst gdzieś (do pliku lub bazy danych) i potem przy wyświetlaniu tekstów listujesz sobie zapisane dane.
kfc4
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
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
Odczytujesz co jest w pliku: file_get_contents a potem dopisujesz to co było + nowe dane file_put_contents
red9skull
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
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
spróbuj coś takiego:

  1. function pokaz(co, gdzie)
  2. {
  3. var gdzie = document.getElementById(gdzie);
  4. gdzie.innerHTML=co;
  5. }
  6. <input type="text" name="t1" id="t1" onKeyUp="pokaz(this.value, 't1l')" />
  7. <input type="text" name="t2" id="t2" onKeyUp="pokaz(this.value, 't2l')" />
  8. <br />
  9. <span id="t1l"></span>
  10. <span id="t2l"></span>


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
Cytat(piotrooo89 @ 17.08.2009, 19:00:29 ) *
spróbuj coś takiego:

  1. function pokaz(co, gdzie)
  2. {
  3. var gdzie = document.getElementById(gdzie);
  4. gdzie.innerHTML=co;
  5. }
  6. <input type="text" name="t1" id="t1" onKeyUp="pokaz(this.value, 't1l')" />
  7. <input type="text" name="t2" id="t2" onKeyUp="pokaz(this.value, 't2l')" />
  8. <br />
  9. <span id="t1l"></span>
  10. <span id="t2l"></span>


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
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
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
Wrzucasz do sesji np.

Jako tablicę i dodajesz potem elementy

$_SESSION['tekst'][] = 'tekst';

a potem pętlą

  1. foreach ($_SESSION['tekst'] as $value) {
  2. echo $value.'<br/>';
  3. }


PODSTAWY PODSTAW.
jmail
nie marudź

RTFMexclamation.gif!!!!

  1.  
  2. <script type="text/javascript" language="JavaScript">
  3.  
  4. function dodaj_tekst(){
  5. document.getElementById('divek').innerHTML = document.getElementById('divek').innerHTML + document.getElementById('tekszt').value + '<br>';
  6. document.getElementById('tekszt').value = '';
  7. }
  8.  
  9.  
  10. <div id="divek">
  11.  
  12. </div>
  13. <input type="text" name="ble" id="tekszt"><input type="button" value="Dodaj" onclick="dodaj_tekst()">
  14.  
piotrooo89
  1. <form method="post" action="">
  2. <input type="text" name="t1" />
  3. <input type="text" name="t2" />
  4. <input type="submit" value="wyslij" />
  5. </form>
  6. <?php
  7. echo $_POST['t1'].'<br />'.$_POST['t2'];
  8. ?>


więcej odemnie nie dostaniesz. masz wszystko na tacy, a w necie pełno tutorialów.
emp
Plik html index.html
  1. <head>
  2. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  3. <script language="javascript" type="text/javascript" src="prototype.js"></script>
  4. <script language="javascript" type="text/javascript" src="skrypt.js"></script>
  5. </head>
  6. <body>
  7. <div>
  8. Forumlarz:
  9. <input type="text" id="text_podany_przez_uzytkownika">
  10. <a href="java script:skrypt.dodaj_tekst_do_strony()"> dodaj tekst </a>
  11. </div>
  12. <div id="strona"></div>
  13. </body>
  14. </html>


Plik js skrypt.js
  1. /** @class skrypt
  2. * @brief klasa odpowiedzialna za dodawanie tekstu z forumalarza do strony
  3. * @date 17-08-2009
  4. */
  5. skrypt =
  6. {
  7. /**
  8. * Metoda pobiera text z formularza i tworzy nowy blok na stronie
  9. * z pobranym wcześniej tekstem
  10. */
  11. dodaj_tekst_do_strony : function()
  12. {
  13. // pobieram wartosc z pola textowego do zmiennej text za pomocą funkcji prototype $F
  14. var text = $F( 'text_podany_przez_uzytkownika' ) ;
  15. $( 'text_podany_przez_uzytkownika' ).value = "" ;
  16.  
  17. // tworze dynamicznie w bloku div o id strona nowy blok z pobranym wyżej tekstem
  18. var blok = document.createElement('div');
  19. blok.innerHTML = text ;
  20. $( 'strona' ).appendChild( blok ) ;
  21. }
  22. }


Mój przykład wykorzystuje bibliotekę prototype.js
red9skull
Cytat(jmail @ 17.08.2009, 19:15:45 ) *
nie marudź

RTFMexclamation.gif!!!!

  1.  
  2. <script type="text/javascript" language="JavaScript">
  3.  
  4. function dodaj_tekst(){
  5. document.getElementById('divek').innerHTML = document.getElementById('divek').innerHTML + document.getElementById('tekszt').value + '<br>';
  6. document.getElementById('tekszt').value = '';
  7. }
  8.  
  9.  
  10. <div id="divek">
  11.  
  12. </div>
  13. <input type="text" name="ble" id="tekszt"><input type="button" value="Dodaj" onclick="dodaj_tekst()">
  14.  


taaaaaaaaaaaaaaak!!! to jest to, dzięki, leci pomógł biggrin.gif
kfc4
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
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
Ja jeszcze mam ostatnie pytanie: czy dałoby radę zrobić coś takiego w PHP?
kfc4
Tak, sesjami/ciasteczkami. Ale sesje lepsze.
red9skull
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
tak
kfc4
Jak na tej samej stronie? Bez odświeżenia? Nie. Cały czas na np. index.php? Jak najbardziej.
red9skull
Cytat(kfc4 @ 18.08.2009, 17:00:12 ) *
Cały czas na np. index.php? Jak najbardziej.


dokładnie- jak coś takiego zrobić?
Wicepsik
isset, empty - przy pierwszym wejściu na stronę
red9skull
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
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
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
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:
  1. <?php $licznik == 0;
  2. if($_GET['submit']) {
  3. $rozmowa = array();
  4. $licznik++;
  5. $rozmowa[$licznik] = $say;
  6. echo ($rozmowa[$licznik]); }
  7.  
  8.  
  9. ?>


I dalej mi podmienia tekst..
maniekl2
Tutaj nie ma szans się nic dodawać bo nie ma sesji. Pokaże ci przykład użycia sesji.
  1. <?php
  2. if(isSet($_SESSION['rozmowa']) && !empty($_SESSION['rozmowa']) )
  3. {
  4. $_SESSION['rozmowa'] .= 'coś tam';
  5. } else {
  6. $_SESSION['rozmowa'] = 'coś tam';
  7. }
  8. ?>



Tylko powiedz czy to ma być skrypt rozmowy dwóch osób ? Bo jak tak to sesje odpadają, zostanie baza danych i pliki.
kfc4
Cytat(red9skull @ 18.08.2009, 19:01:30 ) *
Takie coś napisałem:
[PHP] pobierz, plaintext
  1. <?php $licznik == 0;
  2. if($_GET['submit']) {
  3. $rozmowa = array();
  4. $licznik++;
  5. $rozmowa[$licznik] = $say;
  6. echo ($rozmowa[$licznik]); }
  7. ?>
[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
nie chodzi CI przypadkiem o coś takiego?

  1.  
  2. <?php
  3. if(!isset($_SESSION['tekst'])){
  4. $_SESSION['tekst'] = '';
  5. }
  6. else{
  7. if(isset($_POST['tresc']) && trim($_POST['tresc']) != ''){
  8. $_SESSION['tekst'] .= $_POST['tresc'].'<br>';
  9. }
  10. }
  11.  
  12. ?>
  13.  
  14. <div>
  15. <?php echo $_SESSION['tekst']; ?>
  16. </div>
  17. <form name="test" method="POST">
  18. <input type="text" name="tresc"><input type="submit" value="Wyślij">
  19. </form>
maniekl2
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
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
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
Cytat(jmail @ 18.08.2009, 20:09:26 ) *
nie chodzi CI przypadkiem o coś takiego?

  1.  
  2. <?php
  3. if(!isset($_SESSION['tekst'])){
  4. $_SESSION['tekst'] = '';
  5. }
  6. else{
  7. if(isset($_POST['tresc']) && trim($_POST['tresc']) != ''){
  8. $_SESSION['tekst'] .= $_POST['tresc'].'<br>';
  9. }
  10. }
  11.  
  12. ?>
  13.  
  14. <div>
  15. <?php echo $_SESSION['tekst']; ?>
  16. </div>
  17. <form name="test" method="POST">
  18. <input type="text" name="tresc"><input type="submit" value="Wyślij">
  19. </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
O 'headers already sent by' było na forum milion razy, poszukaj.
red9skull
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
ustaw focus(); dla inputa.
red9skull
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
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
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
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
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
To zapisz do niej pusty ciąg. Ale lepiej zrobisz
  1. //...
  2. if ($_POST){
  3. //...
  4. }
  5. else {
  6. $_SESSION['rozmowa'] = "";
  7. }
  8. //...

IMHO
red9skull
Cytat(kfc4 @ 19.08.2009, 12:00:41 ) *
To zapisz do niej pusty ciąg. Ale lepiej zrobisz
  1. //...
  2. if ($_POST){
  3. //...
  4. }
  5. else {
  6. $_SESSION['rozmowa'] = "";
  7. }
  8. //...

IMHO


przypisałem do nie pusty ciąg, bo tego nie zrozumiałem smile.gif
kfc4
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
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:
  1. switch($tresc) {
  2. case ip: $_SESSION['tekst'] = $_SERVER['REMOTE_ADDR'];
  3. }


to nie pokazuje mojego IP, ale jak użyję instrukcji if:

  1. if ($tresc == "ip") { $_SESSION['tekst'] = $_SERVER['REMOTE_ADDR']; }


to wyświetla- w czym tkwi problem?
Wicepsik
  1. case 'ip':
red9skull
Cytat(Wicepsik @ 19.08.2009, 12:52:02 ) *
  1. case 'ip':


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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.