UPDATE MySQL DB

Programovacie jazyky, rady, poradňa...
MaťoMego
Amateur
Amateur
Príspevky: 22
Registrovaný: 18 dec 2014, 18:46
Kontaktovať používateľa:

UPDATE MySQL DB

Príspevok od používateľa MaťoMego »

Ahojte. Mám problém s UPDATE DB.

Kód: Vybrať všetko

$dotaz = "UPDATE poradie SET tym_por=".$user["dhz"]." WHERE poradie=".$_POST["testvalue"];
$vysledok = mysql_query($dotaz,$db) or die (mysql_error($db));
Vypisuje mi to stále Unknown column 'nazov' in 'field list'. Ďakujem za pomoc.
Aiden
Darca
Darca
Používateľov profilový obrázok
Príspevky: 2213
Registrovaný: 06 apr 2007, 14:28

Re: UPDATE MySQL DB

Príspevok od používateľa Aiden »

V prvom rade pre svoje vlastne dobro zabudni na pouzivanie $_POST[*] takto priamo v query a v druhom rade sa pozri aspon na PDO: http://php.net/manual/en/book.pdo.php

Osobne ked potrebujem riesit nieco s DB mimo frameworku, co sa sice nestava casto, ale ak, tak pouzivam https://github.com/illuminate/database
MaťoMego
Amateur
Amateur
Príspevky: 22
Registrovaný: 18 dec 2014, 18:46
Kontaktovať používateľa:

Re: UPDATE MySQL DB

Príspevok od používateľa MaťoMego »

Vďaka, ale php sa stále učím. Časom sa budem chcieť venovať aj PDO. Vieš mi inak s tým pomôcť, čo je zle okrem $_POST?
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: UPDATE MySQL DB

Príspevok od používateľa *****HERO***** »

je zbytocne sa ucit nieco, co uz je davno zastarane, nebezpecne a neodporucane. dokonca od PHP 5.5.0 je to uz oficialne "deprecated", takto pracovat s DB, takze to v buducnosti bude odstranene z PHP uplne.

takze nie casom, venuj sa tomu hned, ked chces pracovat s databazkami. potom aj pochopis, co je zle s tym $_POST. nemusis sa toho bat, nie je to nic zlozite a odlisne od tohto sposobu, co pouzivas teraz.

takto by mohol vyzerat prepis tvojho problemu pouzitim PDO prepared statements (vyhodne, ak planujes tento dopyt pouzivat viackrat - staci prebindovat hodnoty)

Kód: Vybrať všetko

/*
 * Inicializovanie pripojenia na DB
 */
$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname . ';charset=utf8', $username, $password);

/*
 * Pripravenie dopytu
 */
$sth = $pdo->prepare('UPDATE poradie SET tym_por=:tym_por WHERE poradie=:poradie');

/*
 * Nabindovanie hodnot
 */
$sth->bindValue(':tym_por', $user['dhz'], PDO::PARAM_INT);
$sth->bindValue(':poradie', $_POST['testvalue'], PDO::PARAM_INT);

/*
 * Odpalenie dopytu
 */
try {
    $res = $sth->execute();
} catch (\PDOException $e) {
    echo 'Chyba pri praci s DB :' . $e->__toString();
}
pripadne, jednoduchsie riesenie, nech ta zbytocne nestrasim, je takto

Kód: Vybrať všetko

/*
 * Inicializovanie pripojenia na DB
 */
$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $dbname . ';charset=utf8', $username, $password);
        
/*
 * Odpalenie dopytu
 */
try {
    $res = $pdo->query('UPDATE poradie SET tym_por=' . $pdo->quote($user['dhz']) . ' WHERE poradie=' . $pdo->quote($_POST['testvalue']));
} catch (\PDOException $e) {
    echo 'Chyba pri praci s DB :' . $e->__toString();
}
potrebujes mat akurat zaklady OOP, aby si tomu kodu trosku chapal.
Shakal
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 31 jan 2006, 18:54

Re: UPDATE MySQL DB

Príspevok od používateľa Shakal »

*****HERO***** napísal:je zbytocne sa ucit nieco, co uz je davno zastarane, nebezpecne a neodporucane. dokonca od PHP 5.5.0 je to uz oficialne "deprecated", takto pracovat s DB, takze to v buducnosti bude odstranene z PHP uplne.
Prosím Ťa, môžeš mi hodiť nejaký oficiálny PHP.net link na informáciu o tom, že $_POST je už deprecated?
Lebo podľa tohto (http://php.net/manual/en/language.varia ... ternal.php) je to stále jedna z relevantných možností ako sa dostať k premenným z ext. zdrojov.
Čo na tom je deprecated, nechápem...
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: UPDATE MySQL DB

Príspevok od používateľa *****HERO***** »

neviem o tom, ze by malo byt pouzitie premennej $_POST deprecated. to mas odkial?
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: UPDATE MySQL DB

Príspevok od používateľa weroro »

Shakal: *****HERO***** písal ako o deprecated v súvislosti s mysql_*
Shakal
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 206
Registrovaný: 31 jan 2006, 18:54

Re: UPDATE MySQL DB

Príspevok od používateľa Shakal »

Áno, áno. Beriem späť. Už to vidím.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: UPDATE MySQL DB

Príspevok od používateľa audiotrack »

*****HERO***** napísal:neviem o tom, ze by malo byt pouzitie premennej $_POST deprecated. to mas odkial?
deprecated (zatial) nie, no best practices hovoria o tom, že by si nemal priamo pristupovať do superglobálnych polí. Niektoré IDE, napríklad aj netbeans ti bude pri takom zápise kričať warning. Mal by si používať radšej takýto prístup:

Kód: Vybrať všetko

filter_input(INPUT_POST, 'var_name');  //namiesto $_POST['var_name']
filter_input_array(INPUT_POST); //namiesto $_POST
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: UPDATE MySQL DB

Príspevok od používateľa weroro »

audio: A aký je rozdiel o proti $_POST[] okrem toho, že to tvoje je ukecané? Ošetruje to vstupy (podobne ako pri PDO)?
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: UPDATE MySQL DB

Príspevok od používateľa *****HERO***** »

audiotrack napísal: deprecated (zatial) nie, no best practices hovoria o tom, že by si nemal priamo pristupovať do superglobálnych polí. Niektoré IDE, napríklad aj netbeans ti bude pri takom zápise kričať warning. Mal by si používať radšej takýto prístup:

Kód: Vybrať všetko

filter_input(INPUT_POST, 'var_name');  //namiesto $_POST['var_name']
filter_input_array(INPUT_POST); //namiesto $_POST
hehe lol, to vidim prvy krat .. super vec, diky, si mi usetril kopec nastavajucich minut stravenych na upravach < 2006 projektoch kodenych na kolene :D
weroro napísal:audio: A aký je rozdiel o proti $_POST[] okrem toho, že to tvoje je ukecané? Ošetruje to vstupy (podobne ako pri PDO)?
uz len nazov funkcie je dostatocne self explaining, ze to asi aj osetruje ;)
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Re: UPDATE MySQL DB

Príspevok od používateľa Numline1 »

Sice odveci, ale pozerajuc na ten filter_input, ako to zvlada viacero hodnot? Superglobalne premenne ich vracaju ako pole, podla komentarov na php.net to tato funkcia nevie.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: UPDATE MySQL DB

Príspevok od používateľa audiotrack »

weroro napísal:audio: A aký je rozdiel o proti $_POST[] okrem toho, že to tvoje je ukecané? Ošetruje to vstupy (podobne ako pri PDO)?
sú to filtre. Ak použiješ sanitizačné, tak ti to upraví na požadovaný tvar (čo tam nepatrí, to vyhodí). Ak použiješ filtračné, vráti ti iba hodnotu alebo chybu. Výhodou je že nemusíš overovať či je to url a či je v správnom tvare, či je to email a či je v správnom tvare... iba tam definuješ aká to má byť hodnota. Viď: http://php.net/manual/en/filter.filters.php
Numline1 napísal:Sice odveci, ale pozerajuc na ten filter_input, ako to zvlada viacero hodnot? Superglobalne premenne ich vracaju ako pole, podla komentarov na php.net to tato funkcia nevie.
asi nechápem otázke. V ukážke som použil aj načítanie celého postu, cez filter_input_array. Ak si mal na mysli prenášanie polí v poste, tak si to zober cez $_POST["pole"] a prebehni filtrom v array_walk. Asi ti unikla pointa tých funkcií. Nikto nenapísal že nemôžeš pristupovať do $_POST iba že je to bad practice lebo veľa ľudí zabudne ten vstup potom dodatočne filtrovať, sanitizovať a podobne
Napísať odpoveď