Tuskaa ja SQL erroreita

Eispekka

Hei, yritän ohittaa yhtä ongelmaa, mutta en saa tolkkua. Käsitykseni mukaan virhe on PHP:hen upottamastani SQL-pätkästä, jossa yritetään päivittää tietueen uudet arvot tietokantaan. Saan herjan, että tarkista syntaksi vastamaan MySQL-versiotasi. En sikäli usko herjaan, koska alkuperäinen esimerkkipäivitys toimii koneellani, muttei oman tietokantataulun kanssa.

Ihmettelen, miksi alla olevassa skriptissä on ensimmäinen arvon ympärillä lainausmerkit ('') ja hipsu ('), mutta toisten arvojen ympärillä vain hipsu ('). Miksi muuten hipsujen sisällä muuttujan ympärillä on nuo pisteet?

Ongelma on tässä kohdassa enkä ole löytänyt ratkaisua.

$query = 'UPDATE
movie
SET
movie_name = "' . $movie_name . '",
movie_year = ' . $movie_year . ',
movie_type = ' . $movie_type . ',
movie_leadactor = ' . $movie_leadactor . ',
movie_director = ' . $movie_director . ',
movie_release = ' . $movie_release . ',
movie_rating = ' . $movie_rating . '
WHERE
movie_id = ' . $_POST['movie_id'];

6

474

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • > Ihmettelen, miksi alla olevassa skriptissä on ensimmäinen arvon ympärillä lainausmerkit ('') ja hipsu ('), mutta
      > toisten arvojen ympärillä vain hipsu ('). Miksi muuten hipsujen sisällä muuttujan ympärillä on nuo pisteet?

      Koko UPDATE on hipsujen sisällä. Stringit pitäisi siinä erotta sitten lainausmerkillä. Piste on katenointimerkki, mikä on tarpeen jos erotat stringin osat hipsuilla, mutta sitten vaadittaisiin silti ne lainausmerkit.

      Jos on PHP:tä väärin muista, kokeile seuraavaa:
      $query = 'UPDATE
      movie
      SET
      movie_name = "$movie_name",
      ...
      movie_rating = "$movie_rating"'
      WHERE
      movie_id = "$_POST['movie_id']";'

      Eri asia sitten on, onko järkevää muodostaa updatea tuolla tavoin. Voipi ilkeä käyttäjä vähän sotkea kantaa...

      • eisPekka55

        Miten sinusta sitten kannattaisi asia tehdä, koska olen tietoinen siitä, että ilkeitä käyttäjiä varten kannattaa myöskin valmistautua.


      • preparoitu paatti
        eisPekka55 kirjoitti:

        Miten sinusta sitten kannattaisi asia tehdä, koska olen tietoinen siitä, että ilkeitä käyttäjiä varten kannattaa myöskin valmistautua.

        Oletko tutustunut tietoturvallisuutta vaarantavaan tekniikkaan nimeltän "SQL-injektio"? Oletan että tässä viitataan siihen.

        http://fi.wikipedia.org/wiki/SQL-injektio


      • Eispekka
        preparoitu paatti kirjoitti:

        Oletko tutustunut tietoturvallisuutta vaarantavaan tekniikkaan nimeltän "SQL-injektio"? Oletan että tässä viitataan siihen.

        http://fi.wikipedia.org/wiki/SQL-injektio

        Injektio terminä oli tuttu ja tähän viitattiin, Se miten siltä parhaiten suojautua on vielä epäselvää.


      • foobarfoo
        Eispekka kirjoitti:

        Injektio terminä oli tuttu ja tähän viitattiin, Se miten siltä parhaiten suojautua on vielä epäselvää.

        Php:ssä MySqlle näyttäisi olevan tarjolla prepared statementit, jotka huolehtivat tuosta arvojen escapeemisesta, http://php.net/manual/en/pdo.prepared-statements.php


    • DQ

      Luulen että jokin noista muuttujista on tyhjä, jolloin päivitys ei onnistu. Eli kokeile print $query; komentoa, jotta näet noi kamat jotka yrität päivittää. Todennäköisesti omalla koneellasi on eri php asetukset joten koodia joutunee muuttamaan (riippuen mistä nuo $movie_# muuttujat tulevat), $movie_name -> $_POST["movie_name"] tai $movie_name -> $_GET["movie_name"].

      Hipsut ovat ensimmäisissä kohdissa sen takia että kyse on string tyyppisestä muuttujasta, kun vuon year muuttujan kohdalla kyse on luvusta 1977 tms. Pisteet katenoivat muuttujan arvot tuohon päivityslausekkeeseen. Eli vastaava kuin javascriptissa merkki.

      Mutta ongelma on todennäköisesti siinä että movie_year tai movie_type (tai $_POST["movie_id"]) on tyhjä vastaten alkuperäiseen kysymykseen..

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Suomen kansa haluaa Antti Lindtmanista pääministerin

      Lindtman on miltei tuplasti suositumpi kuin etunimikaimansa Kaikkonen. Näin kertoo porvarimedian teettämä kysely. http
      Maailman menoa
      218
      4077
    2. Vain 21% kannattaa Lindtmania pääministeriksi

      se on selvästi vähemmän kuin puolueen kannatus, mites nyt noin?
      Maailman menoa
      111
      2573
    3. Miten löydän sinut

      Ja saan sanottua kaiken mitä haluan sinulle kertoa? Ja kuinka kuuntelisit minua sen hetken? Kuinka voin ilmaista sen mit
      Ikävä
      38
      2295
    4. Yöllinen autolla kaahari Heinolan seudulla

      Asukkaita häiriköivän nuoren herran autokaahaus keskustelu poistettu, onko jokin hyvävelijärjestelmä käytössä ?
      Heinola
      80
      1400
    5. Vaikea tilanne

      Hieman kolkuttaa omatuntoa, kun on osoittanut kiinnostusta väärää naista kohtaan. En ymmärrä miten toinen on voinut te
      Ikävä
      86
      1288
    6. Milloin kaivatullasi

      .. on nimipäivä?
      Ikävä
      48
      1149
    7. Kehtaisitko näyttäytyä

      kaivattusi seurassa?
      Ikävä
      75
      1037
    8. Ne viimeiset kerrat

      Kun katsoit minua niin lämpimästi. En unohda sitä ❤️
      Ikävä
      59
      903
    9. Emme koskaan keskustelleet kasvotusten syistä välirikollemme

      Enkä voisi kertoa perimmäistä rehellistä syytä. Kerroin sinulle pintapuolisen ”paketin” ja otin tavallaan omalle vastuu
      Ikävä
      58
      881
    10. Missä kunnassa kaivattusi asuu

      Kuinka tarkkaa uskalla sanoa?
      Ikävä
      45
      856
    Aihe