| 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