Autor | Zpráva | ||
---|---|---|---|
PHP_koule Profil * |
#1 · Zasláno: 28. 7. 2012, 16:27:12
Ahoj, chtěl bych se zeptat, jestli jde z hodnoty $_GET['hodnota'] převzít znaménko + a vypsat ho. Zkoušel jsem různé funkce, ale vkládá se mi %20. Moc dík
|
||
Alphard Profil |
#2 · Zasláno: 28. 7. 2012, 16:29:36
Jak to zkoušíte? Když se generuje url, musí se proměnné escapovat. Pak je můžete bez problému načíst.
|
||
PHP_koule Profil * |
#3 · Zasláno: 28. 7. 2012, 16:34:21 · Upravil/a: PHP_koule
Zkouším toto: rawurldecode
Už to je, jen se mi tam do databáze ukládá mezera před řetězcem |
||
Alphard Profil |
#4 · Zasláno: 28. 7. 2012, 17:12:10
Jaká mezera? To jste dodal tolik informací, že je každému na první pohled jasné, jak to vyřešit :-)
|
||
PHP_koule Profil * |
#5 · Zasláno: 28. 7. 2012, 17:20:28
Alphard:
„Jaká mezera? To jste dodal tolik informací, že je každému na první pohled jasné, jak to vyřešit :-)“ Chyba byla u mě, měl jsem ve value mezeru, hned za rovnítkem. Mám ještě jeden problém: htmlspecialchars a trim nestačí. Umím uložit do pole v databázi 1+1 a načíst ho do url, ale když to url odešlu, tak se mi potom nenačte ve value v políčku 1+1, ale 1 1. Plus zase zmizí. Jsem už zoufalý, děsně trpím. |
||
Tori Profil |
#6 · Zasláno: 29. 7. 2012, 12:53:46
PHP_koule:
„Umím uložit do pole v databázi 1+1 a načíst ho do url“ Před použitím jako URL je potřeba řetězec/data enkódovat pomocí rawurlencode (pro samostatnou hodnotu jednoho parametru) nebo http_build_query (pro asoc. pole). Pak se vám při načtení z $_GET nebude nezakódované plusko převádět na mezeru. Bez zakódování by se totiž nedalo odlišit "+", které znamená mezeru (viz urlencode), od "+", které má zůstat pluskem. |
||
PHP_koule Profil * |
#7 · Zasláno: 29. 7. 2012, 19:13:43
Zkoušel jsem to. Jenže jakmile naču z databáze do odkazu 1+1 a odešlu, tak se mi už podruhé neuloží správně.
<form method="get" action="apl.php?kpriklad=1+1"> ... |
||
Alphard Profil |
#8 · Zasláno: 29. 7. 2012, 19:21:11
[#7] PHP_koule
Protože to děláte blbě, ignorujete vše, co bylo již zmíněno. Správně má být například echo "<form method=\"get\" action=\"apl.php?kpriklad=".urlencode("1+1")."\">"; |
||
PHP_koule Profil * |
#9 · Zasláno: 29. 7. 2012, 20:07:56
Alphard:
„echo "<form method=\"get\" action=\"apl.php?kpriklad=".urlencode("1+1")."\">";“ Pak se mi do políčka načte daná hodnota správně, ale při updatu se změní na 1%25B1. |
||
Tori Profil |
PHP_koule:
„vkládá se mi %20“ „při updatu se změní na 1%25B1“ Jakým způsobem ta data z GET čtete? Kde se to změní - někde v DB, kam tu hodnotu ukládáte, anebo v adresním řádku? Sorry, že se ptám na takové triviálnosti, ale nenapadá mě, za jakých okolností by se mohla se příkazem echo $_GET['kpriklad']; mohla zobrazit nedekódovaná hodnota.
edit: Vypadá to, že se vám ta hodnota asi zakódovává dvakrát. To by mohlo vysvětlovat, proč se mezera převede správně na %20, pak se zakóduje podruhé na %2520, a při přečtení hodnoty z $_GET je tam opět %20 místo mezery. urlencode("1+1") -> "1%2B1" urlencode("1%2B1") -> "1%252B1" |
||
iceover Profil * |
#11 · Zasláno: 31. 7. 2012, 18:05:40
Nevím, co má script dělat, ale odhaduji, že má provádět početní úkony, podle toho, jaké hodnoty se předají z GET. Nebylo by jednodušší každou hodnotu posílat zvlášť?
<?php $pocetniOperace = $_GET['operace']; $x = $_GET['x']; $y = $_GET['y']; $x = (int) $x; $y = (int) $y; if($x AND $y AND $pocetniOperace){ if($pocetniOperace == 'scitani') $vysledek = $x + $y; if($pocetniOperace == 'odcitani') $vysledek = $x - $y; if($pocetniOperace == 'nasobeni') $vysledek = $x * $y; if($pocetniOperace == 'deleni') $vysledek = $x / $y; } echo "vysledek je: $vysledek"; ?> |
||
Časová prodleva: 4 dny
|
|||
PHP_koule Profil * |
#12 · Zasláno: 4. 8. 2012, 11:29:58
iceover:
To jsem chtěl vymyslet, ale nejde to, pokud chceš uložit celý příklad do databáze. |
||
Časová prodleva: 12 let
|
0