Autor Zpráva
pajamac
Profil
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");
Je možné nastavit 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
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 *
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 *
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
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
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 *
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()
vypíše jeden náhodný záznam, to je dost drsný únik informací o ostatních uživatelích.

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
$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);
1) Chceš použít funkci mysql_real_escape_string.
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: