En näistä paljoa ymmärrä, mutta tarve on käsitellä PALVELIN2-palvelimella
olevaa MySQL kantaa PALVELIN1-palvelimen "html-sivulla".
Mobiilisovellus lähettää pari tietoa GET-metodilla PALVELIN1:lle.
PALVELI1:llä ASP-sivu noukkii nuo tiedot ja tekee jutut PALVELIN2 tietokantaan.
Löysin netistä alla olevan ASP jutun joka käsittääkseni käsittelee
toisen (ei local) palvelimen MySQL kantaa. Olenko oikeassa?
Dim oConn, oRs Dim qry, connectstr Dim db_name, db_username, db_userpassword Dim db_server db_server = "mysql.secureserver.net" db_name = "your_dbusername" db_username = "your_dbusername" db_userpassword = "your_dbpassword" fieldname = "your_field" tablename = "your_table" connectstr = "Driver={MySQL ODBC 3.51 Driver};SERVER=" & db_server & ";DATABASE=" & db_name & ";UID=" & db_username & ";PWD=" & db_userpassword Set oConn = Server.CreateObject("ADODB.Connection") oConn.Open connectstr qry = "SELECT * FROM " & tablename Set oRS = oConn.Execute(qry) if not oRS.EOF then while not oRS.EOF response.write ucase(fieldname) & ": " & oRs.Fields(fieldname) & " " oRS.movenext wend oRS.close end if Set oRs = nothing Set oConn = nothing
Miten ASP sivulla pitää toimia noiden käyttäjätunnus/salasanojen kanssa?
Pääseekö niitä jotenkin sivulliset näkemään?
Jos kaikki on konffattu oikein, niin ei pääse sivulliset näkemään. Ihan sama tilanne sinänsä kuin minkä tahansa palvelimella ajettavan skriptauskielen kanssa, kuten PHP:n.
Sinänsä melkoisen ruma esimerkki mun mielestä.
Grez kirjoitti:
Jos kaikki on konffattu oikein, niin ei pääse sivulliset näkemään. Ihan sama tilanne sinänsä kuin minkä tahansa palvelimella ajettavan skriptauskielen kanssa, kuten PHP:n.
Sinänsä melkoisen ruma esimerkki mun mielestä.
Saa sievistää, minä en osaa.
Mobiili lähettää esim. näin:
HTTP://oma.palvelin.fi?kanta=Karhu&rivi='jos',
jossa kanta määrää tietokannan ja rivi on tauluun TAULU lisättävät tiedot
Onko tuolle rivi "muuttujalle" joku suositeltava maksimimitta/merkkimäärä.
Esim. jos kanta = Karhu tietokanta on KANTA1 jolloin
palvelimen (IP) 10.1.1.2 tietokantaan KANTA1 tauluun TAULU lisätään tuo rivi
insert into KANTA1 values (rivi)
Mobiilille palautetaan esim. rivin pituus, jolla varmistetaan, että lähetys
onnistui (rivin pituus sama kuin lähetetty).
Ja samaan syssyyn saa tarjota koodia jolla tietoja voi kysellä kannasta
samalla systeemillä.
Kiitos.
En nyt jaksa toisten projekteja alkaa koodaamaan, mutta kannattaa käyttää parametrisoituja kyselyitä sitten kun muutat tuon koodin ottamaan nuo parametrit mobiililta vastaan (tai jollain muulla tavalla varmistaa ettei tule sql injektioaukkoa). Nythän koodi käyttää vain kiinteästi määriteltyjä muuttujia, joten muokkaamattomassa koodissa ei ongelmaa varsinaisesti ole.
Grez kirjoitti:
Jos kaikki on konffattu oikein, niin ei pääse sivulliset näkemään. Ihan sama tilanne sinänsä kuin minkä tahansa palvelimella ajettavan skriptauskielen kanssa, kuten PHP:n.
Ainakaan palomuurista ei ole avattu kuin http/https ja ftp
muusta ei ole tietoa...
Ei tämä edes toimi minulla.
500 - Internal server error.
Tähän tyssää: oConn.Open connectstr
Johtunee kai kun palvelin on "remote" ja ip:llä yritetään yhteyttä?!?
Sain toimimaan, piti käyttää ODBC driverin UNICODE versiota
Eipäs toimikkaan.
Yhteys syntyy, mutta tähän objRecordSet.Open kykkää
Const adOpenStatic = 3 Const adLockOptimistic = 3 Dim server, data_base, user, pass server="xx.xx.xx.xx" date_base="database" user="useri" pass="passi" Set objConn = CreateObject("ADODB.Connection") Set objRecordSet = CreateObject("ADODB.Recordset") objConn.open = ("Driver={MySQL ODBC 8.0 UNICODE Driver}; Server=" & server & "; Database=" & data_base & "; UID=" & user & "; PWD=" & pass & ";PORT=3306; Option=3") objRecordSet.Open "SELECT * FROM Taulu", _ objConn, adOpenStatic, adLockOptimistic
Minkä virheilmoituksen se tarkalleen ottaen antaa. Tuo 500 Internal Server error on sivuston käyttäjälle näkyvä ilmoitus joka ei tarkoituksella sisällä muuta tietoa kuin että "palvelimella olevassa softassa on joku bugi". Varsinainen virheilmoitus löytynee palvelimelta lokeista.
Grez kirjoitti:
Minkä virheilmoituksen se tarkalleen ottaen antaa. Tuo 500 Internal Server error on sivuston käyttäjälle näkyvä ilmoitus joka ei tarkoituksella sisällä muuta tietoa kuin että "palvelimella olevassa softassa on joku bugi". Varsinainen virheilmoitus löytynee palvelimelta lokeista.
Palvelin jossa asp-sivu on HTTPERR kertoo vain "Timer_ConnectionIdle"
Palvelin jossa MariaDB on MariaDB:n error log ei kerro mitään.
Mistähän pitäisi kaivaa?
Eikös tuo nyt näytä siltä, että OBDC driveri on OK (asennettu wininstall jutulla, ei kai mitää DLL:iä tarvitse "rekisteröidä"?) palvelin 64bit joten niin on driverikin,
palvelimien yhteydet on OK (toimii kyllä hyvin myös normi windows ohjelmalla),
ASP on OK (muut asp jutut toimii hyvin).
MySQL hallintasoftani (Heidi) näyttää että tuo yhteys on "sleep" tilassa.
Mitä voisin vielä tutkailla?? Vi..u näiden kanssa...
mitäpä jos debuggaisit sitä koodiasi. aseta breakpointteja, ja katso mihin jämähtää ja millä virheilmoituksella. 500 tosiaan tarkoittaa että softassasi tapahtuu virhe, eventlogeista varmaan selviää stack trace myös, joka kertoo mitä on tapahtunut.
Sain toimimaan!
Mutta nyt kiusaa taas ääkköset.
Jos syötteessä esim. ö se tallentuu ö vaikka osoiterivillä näyttää ihan OK
http://0.0.0.0/Asp/Koe.asp?db=kanta&rivi='testi',2,'pöö'
Ilmeisesti Koe.asp sivulla pitäisi tehdä jotain määrityksiä MITÄ?
Mikä enkoodaus sinulla on tietokannassasi käytössä?
tarkista
a) koodissasi, missä muodossa syöte saapuu aspisivullesi
b) millaisena se on tallentunut tauluun
c) millaisena se palautuu kannasta luettuna
d) millaisena se rendataan
vaihtoehtoja virheelliselle tekstille on
a) Virheellinen merkistö html -sivullasi
https://www.w3schools.com/html/html_charset.asp
b) virheellinen merkistö tietokannassasi
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html
ja ihan vinkkinä, ota parametrisoidut kyselyt käyttöön. mitään ei saisi suoraan suorittaa sellaisenaan, vaan parametrien kautta (https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html)
groovyb kirjoitti:
Mikä enkoodaus sinulla on tietokannassasi käytössä?
tarkista
a) koodissasi, missä muodossa syöte saapuu aspisivullesi
b) millaisena se on tallentunut tauluun
c) millaisena se palautuu kannasta luettuna
d) millaisena se rendataanvaihtoehtoja virheelliselle tekstille on
a) Virheellinen merkistö html -sivullasi
https://www.w3schools.com/html/html_charset.asp
b) virheellinen merkistö tietokannassasi
https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.htmlja ihan vinkkinä, ota parametrisoidut kyselyt käyttöön. mitään ei saisi suoraan suorittaa sellaisenaan, vaan parametrien kautta (https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-parameters.html)
a) tarkoitat ilmeisesti tätä : latin1_swedish_ci
b) muut ohjelmat jotka tallentaa samaan tauluun lähettävät ihan
selvän ö:n ja se näkyy kannassa ö:nä.
Nettitallennus lähettää osoiterivillä näkyvän ö ja se
näkyy kannassa ö
c) Nettisivulle se palautuu ö ja muutenkin
d) ???
Täytyy tehdä ainakin alkuun purkkavirituksellä eli replacella...
Tai tietokantaan käyttöön utf8_swidish_ci taitaa auttaa?!?
Nyt jostain syystä alkoi toimimaan.
Tämäkö
<meta charset="UTF-8">
oli onnen avain?
Aihe on jo aika vanha, joten et voi enää vastata siihen.