Autor Zpráva
MilanJ
Profil
Používám PHP a databázi MySQL.

Potřebuji aktualizovat databázi (viz. níže), ale nefunguje mi to tak jak má.
Proměnná $random_no obsahuje řetězec s heslem.

Databázi mám správně otevřenou, s jinými dotazy problém nemám. Je chyba v syntaxi?

UPDATE admin SET heslo = PASSWORD('$random_no') WHERE jmeno = 'admin'";
jozob
Profil
MilanJ
1.) názvy polí zapisuj do apostrofov, teda neviem, či je to správny výraz, ale ide o znak `
2.) po dotaze (funkcii mysql_query) skús vypísať návratovú hodnotu funkcie mysql_error() - echo mysql_error();
3.) skús dotaz položiť v PMA
roberta
Profil
heslo = PASSWORD('$random_no')

a to PASSWORD čo má robiť? vyzerá to ako keby to bola mysql funkcia...

skús dať iba

heslo = '$random_no'
T3RMiX
Profil
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

viz. http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html
jozob
Profil
roberta
"a to PASSWORD čo má robiť?"
Je to kryptovacia funkcia. Zakryptuje reťazec podľa určitého algoritmu.
jozob
Profil
T3RMiX
PASSWORD je MySQL funkcia.
MilanJ
Profil
PASSWORD('$random_no') je f-ce MySQL - zahesluje řetězec do 16ti znakovýho řetězce.
Obsah nelze "vytáhnout", jde pouze porovnat s řetězecem stejné konstrukce, tj. PASSWORD('řetězec)
T3RMiX
Profil
jozob
jj diky, pak jsem si to uvedomil a opravil
Kajman_
Profil *
MilanJ
A co si v tom php testovat návratovou hodnotu mysql_query() a případně si vypsat mysql_error()? Pokud je chyba v syntaxi, tak to upozorní a dokonce popíše kde. Pokud je návratová hodnota korektní, tak asi tam nebude řádek odpovídající podmínce.
jozob
Profil
T3RMiX
OT: Ak budeš nabudúce úplne meniť text príspevku, radšej to upravuj tak, aby tam zostal aj pôvodný text, ten označ ako pôvodný a potom uveď nový, ten označ tiež. Keď ho úplne vymeníš, príspevky pod nim môžu stratiť opodstatnenie. Ale to len do budúcna.
MilanJ
Profil
mysql_error() mi vypsalo: Unknown column 'admin' in 'where clause'


Mám správně otevřenou databázi, odkazuji se na tabulku ADMIN, která obsahuje 3 údaje: jmeno, heslo, email.

Vyhodnocení dotazu vypadá následovně:

$query = "UPDATE admin SET heslo = PASSWORD('$random_no') WHERE jmeno = $admin_jmeno";


if (mysql_query($query))
{
if (Mail($emailova_adresa,"zaslání hesla", "Vaše nové heslo je xyz"))
{
echo 'Vaše heslo bylo úspěšně odesláno';
}
else
{
echo 'Heslo se nepodařilo úspěšně odeslat!';
}
}
else
{
echo 'Došlo chybě k zápisu do databáze!';
}


...kde PASSWORD('$random_no') je ukládané heslo
...a $admin_jmeno jejméno, které zadal uživatel do formuláře
Hugo
Profil
MilanJ

Musíš ten string v podmínce uzavřít do apostrofů, protože jinak mysql hledá odpovídající sloupec.

$query = "UPDATE admin SET heslo = PASSWORD('$random_no') WHERE jmeno = '$admin_jmeno'";
MilanJ
Profil
Tak už to mám, chyba byla ve tvaru SQL dotazu.
Když použiju tenhle tvar, není problém:

$query = "UPDATE `admin` SET `heslo` = PASSWORD('$random_no') WHERE `jmeno` = '$admin_jmeno' ;

Proč? Vyžaduje snad PHP při tvorbě SQL dotazů UPDATE `admin` místo UPDATE admin ?
jozob
Profil
MilanJ
To bude na strane MySQL serveru, slovo admin bude asi kľúčové.
MilanJ
Profil
admin bude asi kľúčové

Že by taková haluz???
MilanJ
Profil
Ne ne, chyba je v těch apostrofech. No jo, já měl pocit, že už jsem to zkoušel, ale nešlo mi to. Chybama se člověk učí.
Všem zúčastněným díky za pomoc.;-)
jozob
Profil
MilanJ
"Ne ne, chyba je v těch apostrofech."
Práve preto, že admin je asi kľúčové slovo je ho treba zadávať do úvodzoviek, ak chceme pracovať s poľom, ktoré má názov admin. Pokiaľ má pole názov, ktorý nespadá do kľúčových, kľudne ho možeš zadať bez apostrofov, ale ak je kľúčové, bez apostrofov sa neobídeš.

Inak moja hneď prvá odpoveď na príspevok o tom hovorila :-)
1.) názvy polí zapisuj do apostrofov, teda neviem, či je to správny výraz, ale ide o znak `
Hugo
Profil
jozob

Tady to bylo spíš tím, že měl dotaz ve formě

... where jmeno = admin;

takže hledal řádky, které mají stejnou hodnotu ve sloupci jmeno a admin, správný tvar je

... where jmeno = 'admin';
Toto téma je uzamčeno. Odpověď nelze zaslat.