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

424

    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. Ja taas ammuttu kokkolassa

      Kokkolaisilta pitäisi kerätä pois kaikki ampumaset, keittiöveitset ja kaikki mikä vähänkään paukku ja on terävä.
      Kokkola
      72
      6348
    2. Mitä siellä ABC on tapahtunut

      Tavallista isompi operaatio näkyy olevan kyseessä.
      Alajärvi
      138
      5772
    3. Helena Koivu on äiti

      Mitä hyötyä on Mikko Koivulla kohdella LASTENSA äitiä huonosti . Vie lapset tutuista ympyröistä pois . Lasten kodista.
      Kotimaiset julkkisjuorut
      486
      3654
    4. Ovatko naiset lopettaneet sen vähäisenkin vaivannäön Tinderissa?

      Meinaan vaan profiileja selatessa nykyään valtaosalla ei ole minkäänlaista kirjoitettua tekstiä siellä. Juuri ja juuri s
      Nettideittailu
      120
      2059
    5. Kuvaile elämäsi naista

      Millainen hän on? Mikä tekee hänestä sinulle erityisen?
      Ikävä
      39
      1361
    6. Suomi vietiin Natoon väärin perustein. Viides artikla on hölynpölyä. Yksin jäämme.

      Kuka vielä uskoo, että viides artikla takaa Suomelle avun, jos Suomeen hyökätään. Liikuttavasti täällä on uskottu ja ved
      Maailman menoa
      402
      1345
    7. Et ilmeisesti aio enää ikinä olla tekemisissä

      Että näinkö se menee
      Ikävä
      73
      1173
    8. Sydämeni on sinun luona

      Koko ajan. Oli ympärilläni ketä oli niin sinä olet vain ajatuksissa ja tunteissa. En halua muiden kosketusta kuin sinun
      Ikävä
      47
      1034
    9. Trump ja Venäjä

      Huomasitteko muuten... Käytännössä ainoat valtiot, joille Trump EI eilen asettanut typeriä tariffejaan, olivat Venäjä ja
      Maailman menoa
      110
      952
    10. Jatkuva stressitila

      On sinun vuoksesi kun en tiedä missä mennään mutta tunteeni tiedän ainoastaan
      Ikävä
      56
      950
    Aihe