Autor | Zpráva | ||
---|---|---|---|
pajamac Profil |
#1 · Zasláno: 7. 6. 2014, 18:57:48
Zdravím vás,má přezdívka je pajamac a mám otázku ohledně mysql_query.
Když mám kód: $sql = mysql_query("SELECT * FROM user ORDER BY 1 ASC"); ORDER BY 1 na proměnou stylu ORDER BY $targetId a popřípadě jaký by byl kód.Zkoušel jsem to sám ale stále mi to nešlo.
Předem děkuji za pomoc. |
||
Taps Profil |
#2 · Zasláno: 7. 6. 2014, 18:59:47
pajamac:
„Je možné nastavit ORDER BY 1“ Ano, možné to je $sql = mysql_query("SELECT * FROM user ORDER BY ".$targetId." ASC"); |
||
popelka Profil * |
#3 · Zasláno: 7. 6. 2014, 19:20:44
pajamac:
samozrejme v ".$targetId." sa musí nachádzať hodnota premenej, ktorá sa nachádza v SELECT * FROM user .....
|
||
pajamac Profil |
Děkuji za rychlou odpověď ale je zde další problém když mám hodnotu $test(v předchozím příspěvku $tagetId)=1 tak mi to zobrazí správný text ale pokud změním hodnotu na 2 mám stále stejný výsledek.
Předem děkuji za odpověď. Kód: <?php $dbhandle = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL"); $selected = mysql_select_db("fancom_beroot_eu",$dbhandle) or die("Could not select examples"); $test = 2; $targetId = $_GET[targetId]; $sql = mysql_query("SELECT * FROM user ORDER BY ".$test." ASC"); $rows = mysql_fetch_assoc($sql); $name = 'name'; $password = 'password'; $email = 'e-mail'; echo 'Name:' . $rows[name]. '<br/>' . 'Password:' . $rows[password] ?> |
||
popelka Profil * |
#5 · Zasláno: 7. 6. 2014, 21:24:22
pajamac:
pomocou order by len udávate (presne stanovujete) podľa coho sa má výsledok zo selektu zoradiť (defaultne sa veci triedia podľa primárneho klúča) z toho mi vychádza, že váš výsledok je správny. veštenie : Ak chcete vyberať rôzne údaje z tabuľky podľa zadanej hodnoty premenej tak to vyzerá nasledovne : $sql = mysql_query("SELECT * FROM user where ".$vasa_premenna." ORDER BY ".$triedenie_premenna." ASC"); |
||
juriad Profil |
popelka:
Defaultně se neřadí. Pořádí není specifikováno, nespoléhej na odpozorované negarantované chování. Rozlišuj pojmy třídění (kategorizace záznamů) a řazení (vrácení záznamů v určeném pořadí). pajamac: ORDER BY i seřadí podle i-tého sloupce výsledku. Je-li první a druhý sloupec seřazený stejně (například sloupce id a datum), budou výsledky identické.
Z [#4] to spíše vypadá, že hledáš konkrétní záznam. K tomu ORDER BY neslouží. Na okraj: přistupuj k prvkům pole pomocí $rows['name'] namísto $rows[name] . (A stejně u všech ostatních polí.) To co používáš ty dělá ve skutečnosti něco jiného a skoro jen náhodou to funguje.
|
||
pajamac Profil |
#7 · Zasláno: 7. 6. 2014, 22:04:23
Aha tak děkuji a popelko co znamená ta $vasa_premenna=???
$tridenie_premenna=co podle čeho chci data třídit v mém případě id($test).Děkuji a omlouvám se že vás obtěžuji. |
||
juriad Profil |
pajamac:
Myslím, že nikdo nechápe, čeho přesně chceš dosáhnout. Ukaž, jakou strukturu má tabulka user . A pak také ukaž dva různé dotazy, které chceš položit na základě hodnoty $_GET['targetId'] . Pokud je nevíš, postačí ukázka dat, která se mají v jednotlivých případech vypsat.
|
||
pajamac Profil |
#9 · Zasláno: 7. 6. 2014, 22:31:56
Tvořím aplikaci v programu app inventor.V této aplikaci mám textbox který vytváří proměnou($targetId) a posílá data do php,tato funkce je otestovaná a funkční.Nyní potřebuji vytvořit script kde zadám $targetId uživatele a zobrazí se mi v aplikaci informaci o něm.
Zde je vyfocená tabulka bohužel se mi to tam zduplikovalo ale na funkčnost by to nemělo mít vliv. ![]() |
||
popelka Profil * |
#10 · Zasláno: 8. 6. 2014, 07:18:24
pajamac:
tvoj select bude vyzerať nasledovne : $sql = mysql_query("SELECT * FROM user where id=".$targetId." ORDER BY ".$targetId." ASC"); |
||
juriad Profil |
Raději takto (ORDER BY postrádá smysl a je třeba zabezpečit, že $targetId bude číslo):
$sql = mysql_query("SELECT * FROM user WHERE id=" . (int)$targetId); popelka: Bez ošetrení totiž hrozí zajímavé útoky: script.php?targetId=0 OR 1=1 ORDER BY rand() pajamac: Kdyby jsi tu tabulku navrhl lépe, tak by se ti nestalo, že ti vznikne duplicita. Nejspíš chceš mít něco jako: CREATE TABLE user ( # id je zvykem uvádět jako první sloupec # zároveň je privárním klíčem = musí být vyplněný a musí být jednoznačný # zároveň se obvykle id dává AUTO_INCREMENT, to zajistí, že se novému uživateli přiřadí číslo automaticky id INT PRIMARY KEY AUTO_INCREMENT, # jméno se nesmí opakovat (unikátnost) a nesmí být nevyplněné name VARCHAR(200) UNIQUE NOT NULL, # heslo nesmí být nevyplněné, smí se opakovat password VARCHAR(200) NOT NULL, # email prosím bez té pomčky, ušetříš se následujícímu problému: # může se to bude považovat za rozdíl „e mínus mail“ a sloupce „e“ a „mail“ samozřejmě neexistují # email musí být vyplněný, může se opakovat (členové rodiny občas sdílí jediný e-mail) email VARCHAR(200) NOT NULL ); |
||
pajamac Profil |
Zdravím děkuji za odpověď už mi to funguje ale ohledně toho zabezpečení:Když chci vyhledávat podle jména a zabezpečeně jedná se o kód
$sql = mysql_query("SELECT password FROM user WHERE id=" . (string)$username); ?
|
||
juriad Profil |
#13 · Zasláno: 8. 6. 2014, 14:24:25
$dotaz = "SELECT password FROM user WHERE username='" . mysql_real_escape_string($username) . "'"; # echo $dotaz; # vypíše například SELECT password FROM user WHERE username='pepa' $sql = mysql_query($dotaz); 2) Vložený parametr musí být v apostrofech. 3) Chceš porovnávat username, nikoli id. 4) Pro ladění je lepší napřed sestavit celý dotaz a pak jej až spustit. Můžeš si jej tak pěkně vypsat, pokud nefunguje. |
||
Časová prodleva: 11 let
|
0