Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][HTML]Ukryta wartość
benzulli
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Witam

Robię kalkulator no i mam problem, mianowicie z listy rozwijanej wybieram sobie przykładowo pozycję A, a chcę, żeby wlaśnie ta pozycja A była widoczna, a przypisana do niej wartość brała udział w obliczeniach (wartość nie jest widoczna tylko pozycja A). Jak to zrobić?
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Kshyhoo
post
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Wrzuć do sesji.


--------------------
Go to the top of the page
+Quote Post
Damonsson
post
Post #3





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Najlepiej myślę skorzystać z:

http://www.w3schools.com/tags/att_global_data.asp
Go to the top of the page
+Quote Post
benzulli
post
Post #4





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Skorzystałbym z tego sposobu Damonssona, lecz tam jest napisane, że pobieranie za pomocą javascriptu, a nie dałoby się tego jakoś za pomocą php zabrać? Postem myślałem, ale jak...

Jestem początkujący, także nie mam pomysłu jak zrobić coś takiego na sesjach, tworzyłem jedynie system do logowania, taki prymitywny.

P.S
Dzięki za odpowiedzi smile.gif

#edit
To mój kod:

  1. <form method="post">
  2. <input type="text" name="kasa">
  3. <select name="iloczyn">
  4. <?php
  5. include("polacz.php");
  6. ini_set( 'default_charset' , 'UTF-8' );
  7. mysql_query("SET NAMES 'utf8'");
  8. $query = mysql_query("SELECT * FROM servers");
  9. while ($row = mysql_fetch_array($query)) {
  10. ?>
  11. <option><?php echo $row[nazwa];?></option>
  12. <?php }?>
  13. </select>
  14. <input type="submit" value="Licz">
  15. </form>
  16. <?php
  17. $kasa = $_POST['kasa'];
  18. $iloczyn = $_POST['iloczyn'];
  19. $wynik = $kasa*$iloczyn;
  20. if($wynik) echo $kasa.'*'.$iloczyn.' = '.$wynik.'USD';
  21. ?>


W bazie danych są dwie interesujące mnie kolumny: 'nazwa' i 'przel'. 'przel' to wartość liczbowa. Chodzi mi o to, żeby w liście wyskakiwała 'nazwa', a do kalkulatora używana była wartość 'przel'.

Ten post edytował benzulli 10.02.2014, 23:31:53
Go to the top of the page
+Quote Post
Damonsson
post
Post #5





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


  1. <option value="<?php echo $row[przel];?>"><?php echo $row[nazwa];?></option>


?
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Sesje nie są trudne, wystarczy pamiętać, że każdy plik w którym mają działać, musi się zaczynać tak:
  1. <?php

A potem korzystać do woli z dobrodziejstw...


--------------------
Go to the top of the page
+Quote Post
benzulli
post
Post #7





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Damonsson, niestety nie działa, próbowałem. Nie działa także, jeżeli w pętli dam <select> i input type=hidden, wtedy cała lista rozwijana się ogranicza do 1 rekordu, reszta pojawia się bez listy (ale działa, tylko do wyboru jest pierwsza opcja).

Przeczytałem co i jak z tymi sesjami, przecież to jest coś takiego jak POST, tylko nie trzeba tworzyć formularzy, a wobec tego mogę dać do sesji ten rekord bez żadnych ograniczeń.
Wielkie dzięki, Kshyhoo, pomogłeś mi otworzyć oczy na PHP z innej strony.

Zbytnio się przeliczyłem, już się cieszyłem, że wszystko działa tak jak chcę, lecz niestety...

Problem jest taki, że zamiast do każdego rekordu dopasowywać przelicznik do rekordu (przez pętlę, jest server1 i do tego przelicznik, który jest pod tym samym id), to przelicznik jest cały czas taki sam i w ogóle się nie zmienia, nie jest mobilny, jest ciągle 1 rekord z bazy, zamiast dopasowywać do konkretnego rekordu (po kolei). Próbowałem już różne opcje z tą sesją, lecz niestety cały czas stoję w miejscu (kalkulator oblicza, lecz jako przelicznik jest ciągle jeden rekord przelicznika do wszystkich rekordów nazwy serwera, a w bazie jest zupełnie inaczej).
Oto kod:

  1. <form method="post">
  2. <input type="text" name="kasa">
  3. <select>
  4. <?php
  5. include("polacz.php");
  6. ini_set( 'default_charset' , 'UTF-8' );
  7. mysql_query("SET NAMES 'utf8'");
  8. $query = mysql_query("SELECT * FROM servers");
  9. while ($row = mysql_fetch_array($query)) {
  10. ?>
  11. <option><?php echo $row[nazwa];?></option>
  12. <?php $_SESSION['przel'] = $row[przel];}?>
  13. </select>
  14. <input type="submit" value="Licz">
  15. </form>
  16. <?php
  17. $kasa = $_POST['kasa'];
  18. $iloczyn = $_SESSION['przel'];
  19. $kasa2 = str_replace ("k", "000", $kasa);
  20. $wynik = $kasa2*$iloczyn;
  21. if($wynik) echo $kasa2.'*'.$iloczyn.' = '.$wynik.'USD';
  22. ?>


Ten post edytował benzulli 12.02.2014, 22:17:03
Go to the top of the page
+Quote Post
Damonsson
post
Post #8





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


Zacznijmy może od początku.

O co Ci chodzi i w czym masz problem? No i na cholerę Ci ta sesja?

  1. <input type="text" name="kasa" value="50" />
  2. <select name="iloczyn">
  3. <option value="100">STO</option>
  4. <option value="200">DWIESTO</option>


Wartość "STO" jest wyświetlana użytkownikowi.
Wartość "100" jest brana do obliczeń.

Czyli po wybraniu z listy opcji STO:

  1. $_POST['iloczyn'] = '100';
  2. $_POST['kasa'] = '50';
  3. $wynik = $kasa*$iloczyn; // wynik = 5000


Gdzie Twój problem?

Go to the top of the page
+Quote Post
benzulli
post
Post #9





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Robiłem tak na początku, widocznie musiałem przeoczyć coś istotnego i po prostu nie działało.
Ehh, pomyśleć, że dzisiaj siedziałem jakieś 6-7h nad tym i nie mogłem nic wskórać..., a mogło wystarczyć przepisanie kodu od nowa.

No nic, wielkie dzięki specool.gif


Problem został rozwiązany, lecz potrzebuję teraz wydobyć dwie zmienne, iloczyn do mnożenia oraz nazwę serwera, aby w pętli $wynik pojawiała się ona. Próbowałem za pomocą sesji, przy wyborze serwera wszystko gra, dopasowuje odpowiedni przelicznik, lecz kiedy przychodzi wyświetlić nazwę serwera to wtedy wybiera tylko ostatni rekord. Chcę, aby ta zmienna $serwer pokazywała wybrany wcześniej w formularzu serwer.

  1. <form method="post">
  2. <div style="font-family:sans-serif; color:#fff;">Enter amount of money you want to buy (put "cc", "k" or "kk") and choose world.</div><br />
  3. <input class="wpisz" type="text" name="kasa">
  4. <select class="wpisz2" name="iloczyn">
  5. <?php
  6. include("polacz.php");
  7. ini_set( 'default_charset' , 'UTF-8' );
  8. mysql_query("SET NAMES 'utf8'");
  9. $query = mysql_query("SELECT * FROM servers");
  10. while ($row = mysql_fetch_array($query)) { $_SESSION['serwer'] = $row[nazwa];
  11. ?>
  12. <option value="<?php echo $row[przel];?>"><?php echo $_SESSION['serwer'];?></option>
  13. <?php }?>
  14. </select>
  15. <input type="submit" value="Count!">
  16. </form>
  17. <?php
  18. $kasa = $_POST['kasa'];
  19. $serwer = $_SESSION['serwer'];
  20. $iloczyn = $_POST['iloczyn'];
  21. $kasa2 = str_replace ("k", "000", $kasa);
  22. $kasa3 = str_replace ("cc", "0000", $kasa2);
  23. $wynik = $kasa3*$iloczyn;
  24. if($wynik) {
  25. echo '<div style="padding:10px 0px 0px 10px; color:#fff; font-family: Verdana, sans-serif; font-size:13px;">For '.$kasa.' you will pay '.$wynik.''.$serwer.'$.</div>';
  26. }
  27. ?>


Ten post edytował benzulli 15.02.2014, 19:33:40
Go to the top of the page
+Quote Post
Turson
post
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Cytat
Próbowałem za pomocą sesji, przy wyborze serwera wszystko gra, dopasowuje odpowiedni przelicznik, lecz kiedy przychodzi wyświetlić nazwę serwera to wtedy wybiera tylko ostatni rekord.
może ją nadpisujesz
Go to the top of the page
+Quote Post
benzulli
post
Post #11





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Tylko jak usunąć to nadpisywanie? W którym momencie ona się nadpisuje? Po wykonaniu pętli? Nie mam pojęcia jak to naprawić. Szukałem, lecz jest bardzo mało na ten temat. Na jednej stronie wyczytałem, że trzeba wstawić warunek if session is not null, tylko co to da...
Go to the top of the page
+Quote Post
Turson
post
Post #12





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Nie wiem jaki masz kod. To jedyny plik co wstawiłeś, czy coś jeszcze?

Cytat
kiedy przychodzi wyświetlić nazwę serwera to wtedy wybiera tylko ostatni rekord

co to znaczy
Go to the top of the page
+Quote Post
benzulli
post
Post #13





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Tak, to jedyny plik (oczywiście htmla nie kopiowałem). Przepraszam trochę za to zamieszanie, wiem jak to jest czytać czyjś kod jak się nie jest w temacie.


Mam formularz, a w nim wartość tekstową, która jest nieistotna i listę. Z tej listy wybieram widoczny rekord, który nazwiemy a. Natomiast w tejże liście, pod jedną opcją znajduje się drugi rekord, niewidoczny, który pobieram, a jest nim iloczyn wykorzystywany do obliczeń - czyli b. Do php przez POST pobieram element b - poprzez value="" (wcześniej <select name="iloczyn">). Budowa listy jest taka, że właśnie widać element a, a pobiera się do php element b. Wszystko grało, ale teraz chcę, żeby do php był pobierane oba elementy - b (który jest poprawnie przesyłany do tej pory) oraz element a, który do tej pory był tylko widoczny jako rekord, który nie służył do niczego, a jedynie do oznakowania iloczynu. Teraz potrzebuję pobrać dodatkowo to oznakowanie iloczynu, wobec tego użyłem sesji (podczas wyboru z listy odbierany jest właściwy iloczyn wraz z dopasowanym elementem a, lecz kiedy chcę już pobrać sesję użytą do wyboru z listy, potem ona mi się nie pokazuje jako ta wybrana, lecz jako ostatni rekord z tabeli).

Ten post edytował benzulli 16.02.2014, 14:09:30
Go to the top of the page
+Quote Post
Turson
post
Post #14





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


Pokaż jak zapisujesz do sesji
Go to the top of the page
+Quote Post
benzulli
post
Post #15





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


To jest cały jeden plik, po za nim nie ma nic więcej.

  1. <form method="post">
  2. <div style="font-family:sans-serif; color:#fff;">Enter amount of money you want to buy (put "cc", "k" or "kk") and choose world.</div><br />
  3. <input class="wpisz" type="text" name="kasa">
  4. <select class="wpisz2" name="iloczyn">
  5. <?php
  6. include("polacz.php");
  7. ini_set( 'default_charset' , 'UTF-8' );
  8. mysql_query("SET NAMES 'utf8'");
  9. $query = mysql_query("SELECT * FROM servers");
  10. while ($row = mysql_fetch_array($query)) { $_SESSION['serwer'] = $row[nazwa];
  11. ?>
  12. <option value="<?php echo $row[przel];?>"><?php echo $_SESSION['serwer'];?></option>
  13. <?php }?>
  14. </select>
  15. <input type="submit" value="Count!">
  16. </form>
  17. <?php
  18. $kasa = $_POST['kasa'];
  19. $serwer = $_SESSION['serwer'];
  20. $iloczyn = $_POST['iloczyn'];
  21. $kasa2 = str_replace ("k", "000", $kasa);
  22. $kasa3 = str_replace ("cc", "0000", $kasa2);
  23. $wynik = $kasa3*$iloczyn;
  24. if($wynik) {
  25. echo '<div style="padding:10px 0px 0px 10px; color:#fff; font-family: Verdana, sans-serif; font-size:13px;">For '.$kasa.' you will pay '.$wynik.''.$serwer.'$.</div>';
  26. }
  27. ?>


W 11 linijce znajduje się przypisanie sesji wartości z bazy danych :
  1. $_SESSION['serwer'] = $row[nazwa];



_________
  1. <option value="<?php echo $row[przel];?>"><?php echo $_SESSION['serwer'];?></option>


O tutaj $row[przel] sobie normalnie pobieram jako post i wykorzystuję dalej, lecz jeżeli chcę pobrać zmienną sesyjną 'serwer' - nie mogę jej potem użyć, bo pokazuje się ostatni rekord z bazy danych, a chodzi mi, żeby pokazywał się ten wybrany w liście.

Ten post edytował benzulli 16.02.2014, 21:19:00
Go to the top of the page
+Quote Post
Turson
post
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. $_SESSION['serwer'] = $row[nazwa]

nadpisujesz sesję jak mówiłem wczoraj.

Jak już to:
  1. $i=0;
  2. while ($row = mysql_fetch_array($query)) {
  3. $_SESSION['serwer'][] = $row['nazwa'];
  4. echo '<option value="'.$row['przel'].'"><'.$_SESSION['serwer'][$i].'</option>';
  5. $i++;
  6. }
  7. ?>

Go to the top of the page
+Quote Post
benzulli
post
Post #17





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Teraz w ogóle nie pobiera wiadomości z bazy danych, w ogóle brak jest tych rekordów 'nazwa', tylko puste pola. Także po wykonaniu przeliczenia nie pokazuje się nazwa rekordu.
Go to the top of the page
+Quote Post
Turson
post
Post #18





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

Ostrzeżenie: (0%)
-----


  1. echo '<option value="'.$row['przel'].'">'.$_SESSION['serwer'][$i].'</option>';


a tak w ogóle to po co do option ładować sesję jak można $row['name']

Ten post edytował Turson 16.02.2014, 23:11:49
Go to the top of the page
+Quote Post
benzulli
post
Post #19





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 3.07.2013

Ostrzeżenie: (0%)
-----


Tak, tylko wtedy jak pobiorę $row[nazwa] do zmiennej z poza pętli?? Jak jeszcze $row[przel] za pomocą POST sobie pobiorę i mogę używać w obliczeniach, tak już $row[nazwa] jest tylko nazwą i zostaje w formularzu.
Go to the top of the page
+Quote Post
com
post
Post #20





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

Ostrzeżenie: (0%)
-----


$row['nazwa'] jak już... no to przecież masz już zapis do sesji napisany wiec w czym jeszcze problem?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 05:27