Miten tämä toteutetaan prepare-toimintoa käyttäen
$query = "SELECT * FROM customers WHERE country = '$country' AND lastname LIKE '%$search_lastname%' ORDER BY lastname COLLATE utf8_swedish_ci";
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
$nro=$nro 1;
include('print.php');
}
}
Pitäisi myös saada tietoja kuljetettua tuohon print.php. Nyt menevät, mutta toimiiko samoin preparen jälkeen.
SQL-injektiota odotellessa
49
1049
Vastaukset
Hiljaista on prepare-rintamalla...
Mikäli tuo kysymyksesi on yhä vastausta vailla, niin lähetä sähköpostia. Saat sitten paluupostina toimivaksi testatut pienet esimerkkitiedostot, missä preparella tietokannan taulusta insertattu data siirtyy muuttujiin ja sitä kautta include-tietoston tarpeisiin.- Anonyymi
Laita pastebiniin ja linkki tänne.
Kyseessä on esimerkki missä on taulurakenteet valmiina omia kokeiluja varten ja kaksi tiedostoa linkattu toisiinsa. Toimii paremmin kun sen postaa pakettina. Välttyy niin monilta väärinkäsityksiltä.
- Anonyymi
Faktantarkistus kirjoitti:
Kyseessä on esimerkki missä on taulurakenteet valmiina omia kokeiluja varten ja kaksi tiedostoa linkattu toisiinsa. Toimii paremmin kun sen postaa pakettina. Välttyy niin monilta väärinkäsityksiltä.
"Kyseessä on esimerkki missä on taulurakenteet valmiina"
"Toimii paremmin kun sen postaa pakettina."
Haiskahtaa epälyttävältä toiminnalta. Anonyymi kirjoitti:
"Kyseessä on esimerkki missä on taulurakenteet valmiina"
"Toimii paremmin kun sen postaa pakettina."
Haiskahtaa epälyttävältä toiminnalta.Näinä aikoina on syytäkin pitää nenä avoinna.
Laitoin esimerkkipaketin nyt myös nettiin
https://tuuletus.net/lataamo/MySQL_Prepare_Example.php
siltä varalta että et uskalla meiliäsi käyttää.- Anonyymi
Faktantarkistus kirjoitti:
Näinä aikoina on syytäkin pitää nenä avoinna.
Laitoin esimerkkipaketin nyt myös nettiin
https://tuuletus.net/lataamo/MySQL_Prepare_Example.php
siltä varalta että et uskalla meiliäsi käyttää.Jotenka, kun linkiäsi slikkaa, tulee suorittaneeksi sen esimerkin, eikä ladanneeksi, kuten tässä on ollut puhe.
Anonyymi kirjoitti:
Jotenka, kun linkiäsi slikkaa, tulee suorittaneeksi sen esimerkin, eikä ladanneeksi, kuten tässä on ollut puhe.
Ei ihan noinkaan. :D
Slikattuasi lataussivulle ja ladattuasi ja purettuasi pakatun zipin joudut ihan itse ensin määrittelemään tietokantayhteytesi, jotta pääset testiä ajamaan :)
Toki voit lukea purkamasi tiedostot myös editorillasi ilman että luot esimerkin mukaista keissiä. Varmuuden niiden toiminnasta toki saa vain jos näkee vähän vaivaa. Siinä samalla tulee vahingossa oppineeksi ehkä jotain ihan uuttakin.- Anonyymi
Faktantarkistus kirjoitti:
Ei ihan noinkaan. :D
Slikattuasi lataussivulle ja ladattuasi ja purettuasi pakatun zipin joudut ihan itse ensin määrittelemään tietokantayhteytesi, jotta pääset testiä ajamaan :)
Toki voit lukea purkamasi tiedostot myös editorillasi ilman että luot esimerkin mukaista keissiä. Varmuuden niiden toiminnasta toki saa vain jos näkee vähän vaivaa. Siinä samalla tulee vahingossa oppineeksi ehkä jotain ihan uuttakin."MySQL_Prepare_Example.php" ei ole ladattava tiedosto, vaan suoritettava.
Ellei sitä esimerkkiä voi ladata Pastebiniin ja sieltä kukin sitten antamasi osoitteen pohjalta omalle koneelleen, etsin muita esimerkkejä. Anonyymi kirjoitti:
"MySQL_Prepare_Example.php" ei ole ladattava tiedosto, vaan suoritettava.
Ellei sitä esimerkkiä voi ladata Pastebiniin ja sieltä kukin sitten antamasi osoitteen pohjalta omalle koneelleen, etsin muita esimerkkejä.OK, kuitti Roger.
- Anonyymi
Faktantarkistus kirjoitti:
Näinä aikoina on syytäkin pitää nenä avoinna.
Laitoin esimerkkipaketin nyt myös nettiin
https://tuuletus.net/lataamo/MySQL_Prepare_Example.php
siltä varalta että et uskalla meiliäsi käyttää.Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!
- Anonyymi
Anonyymi kirjoitti:
Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!
Kukapa muu se kissan hännän nostaa kuin kissa itse.
- Anonyymi
Ei kantsi välittää hulluista.
Kiitos koodista:) Anonyymi kirjoitti:
Antaisin tälle ison peukun jos pystyisin. Helppo testata itsellä kun speksit oli noin valmiiksi pureskeltu. Näitä lisää kiitoos!
Peukuttamaan pääset kun luot tunnukset. Eikä edes maksa mitään.
Anonyymi kirjoitti:
Ei kantsi välittää hulluista.
Kiitos koodista:)Pidetään asiaketjut asiaketjuina.
Tällainen vähemmän esillä olleesta aiheesta tehty avaus ansaitsee enemmän kehuja kuin haukkuja.- Anonyymi
Faktantarkistus kirjoitti:
Pidetään asiaketjut asiaketjuina.
Tällainen vähemmän esillä olleesta aiheesta tehty avaus ansaitsee enemmän kehuja kuin haukkuja.Kehut jo itse sitä tarpeeksi, anonyymina ja rekattuna vaikkei siihen mitään aihetta ole.
- Anonyymi
Täh? Ketjun aloittajana tulen mukaan keskusteluun. Joku muu ehti ehkä esiintyä kysyjänä?! Kävin tässä välillä Euroopan ulkopuolella ja homme keskeytyi. Kiitos vastaajille ja jäniksenä asiaa kehittäneille :-) Testaan huomenissa, kun pyykit on pesty ja silitetty!
- Anonyymi
Minä kiitin koodista jäniksenä.
Seurailen keskusteluja jos niistä saisi jotain omaan reppuun.
T: Ei alkuperäinen kysyjä.
- Anonyymi
Jos siis Uralin tämä puoli on Eurooppaa. Ja oli käynti tuttavan perhejuhlassa, ei bisnestä.
Asiaan: Hyviä nämä julkiset kysymykset/vastaukset, koska aika nopeasti väärän tiedon papisto ammutaan saarnatuolista alas. - Anonyymi
Ammutaanko heti yksi kuti:
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password,
Miksi tässä on mysql eikä mysqli?PHP Data Objects ja MySQLi eivät ole identtisiä kaksosia.
PDO -syntaksiin ei iitä ole määritelty ja siksi sen itsepäinen lisääminen aiheuttaa virheen. On oma valintasi käytätkö MySQLi-proseduuria vaiko PDO-proseduuria. Arvelisin itse että PDO on monipuolisempi ja sillä lienee kirkkaampi tulevaisuus kuin mySQLi:lla, mutta tulevaisuus näyttää miten lopulta käy.. Googlaamalla löydät helposti lisätietoja näiden kahden eroista käytännössä.
Kysyjälle tehdyssä esimerkissä käytin viimeksimainittua.
- Anonyymi
No joo, olisikin mielenkiintoista nähdä tuo toteutettuna mysqli-proseduurilla. Eppäilen että molemmat säilyvat kylläkin.
Lisäsin pitkin hampain yhden version pyydetystä mysqli-vaihtoehdosta, vaikka ystävällisesti kehotankin kaikkia aihetta vasta alkumetreillä opiskelevia panostamaan siihen PDO-vaihtoehtoon ensisijaisesti.
Jos testeissänne huomaatte ongelmia, niin ne menee hätäisesti hutaistun työn piikkiin ja sori siitä jo etukäteen.
- Anonyymi
On nimimerkki Faktantarkistus koodaaja paikallaan :) Tällainen harrastajilla annettu ohjaus osaltaan lisää tietoturvaa ja tpivottavasti myös tietoisuutta siitä. Toisaalta, jos aloittaminen on kovin (liian) helppoa, syntyy roskaa ja vaaroja, jos tehdään jotain herkkää ja arvokasta. Mutta on sitä sattunut ammattilaisillekin ja miljardifirmoille. Salasana on testaus ja tarkistus ja sitten vielä testaus ja koodin kaikin puolinen rääkkäys, mutta suunnitellusti ja dokumentoidusti. Nimim testaaja
OK, tulkitsen viestisi kauttarantain niin että sait esimerkkifailit toimimaan omassa localhost/server -ympäristössäsi ja ymmärsit näiden kahden puheena olleen "protokollan" välisen eron. Sitten eikun soveltamaan aihetta omissa projekteissa, niin kauan kun teema on kirkkaana mielessä.
Esitettyyn kysymykseen vastattu -> case closed.
Ylläpito saa poistaa :)- Anonyymi
Faktantarkistus kirjoitti:
OK, tulkitsen viestisi kauttarantain niin että sait esimerkkifailit toimimaan omassa localhost/server -ympäristössäsi ja ymmärsit näiden kahden puheena olleen "protokollan" välisen eron. Sitten eikun soveltamaan aihetta omissa projekteissa, niin kauan kun teema on kirkkaana mielessä.
Esitettyyn kysymykseen vastattu -> case closed.
Ylläpito saa poistaa :)Varsinainen satusetä. Tulipahan yksi verkko-osoite bannattujen listalle lisää.
- Anonyymi
Anonyymi kirjoitti:
Varsinainen satusetä. Tulipahan yksi verkko-osoite bannattujen listalle lisää.
Taidat olla vähän..
- Anonyymi
Anonyymi kirjoitti:
Taidat olla vähän..
se on avohoitopotilas
vihaa muita ihmisiä
tuntee olonsa loukatuksi ja siksi yrittää loukata toisia
yleensä vaaraton mutta en ottaisi naapuriksi
- Anonyymi
Olisiko turvallisempi käyttää jotain NoSQL:ää? Vaikka CouchDB:tä, joka ymmärtää JSONia sellaisenaan. http://couchdb.apache.org/
- Anonyymi
Annettu PDO-esimerkki toimi hienosti localhostissa.
Webhostissa tulee virheilmoitus
Virhe: SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected
Eikä auta vaikka laittaa taulun sijalle lauseeseen tietokanta.taulu, kuten jossakin palstalla neuvottiin.
Alanko sittenkin vääntää mysqlin kanssa?- Anonyymi
Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.
- Anonyymi
Anonyymi kirjoitti:
Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.
Sinulla on mitä ilmeisemmin jotain henkilökohtaista kaunaa.
Voisitko avata että miten tämä henkilö on sinua loukannut.
Ilmeisesti jotenkin tylysti kommentoinut sinun kirjoitukseen? - Anonyymi
Anonyymi kirjoitti:
Tämä "Faktantarkistus" ei ymmärrä mitään tietokannoista, ei kannata uskoa sen höpötyksiä.
SQL-löylykauhan.. SQLSTATE[PERVOKIRJASTO]
- Anonyymi
Anonyymi kirjoitti:
Sinulla on mitä ilmeisemmin jotain henkilökohtaista kaunaa.
Voisitko avata että miten tämä henkilö on sinua loukannut.
Ilmeisesti jotenkin tylysti kommentoinut sinun kirjoitukseen?Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.
- Anonyymi
Anonyymi kirjoitti:
Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.
Ottaako pataan?
- Anonyymi
Anonyymi kirjoitti:
Miksi siinä pitää olla henkilökohtaista, jos on todennut etet ymmärrä tietokannoista tuon taivaallista. Jos olisin kehunut, olisiko sekin ollut henkilökohtaista. Älä puhu paskaa, ja esiinny rekisteröidyllä tunnuksella, eikä koko ajan vaihtaen rekisteröidyn- ja anonyymi- tunnuksen välillä.
Surullista ettet pääse patoutumistasi.
Lisäksi häiritset muita. Ei pitäisi olla niin itsekäs että pilaa muidenkin elämää.
Kyllä vihasta ja katkeruudesta voi päästä eroon.
Se on mahdollista.
Helpottaa itsesi ja muiden (jos osaat ajatella muitakin) elämää. - Anonyymi
Anonyymi kirjoitti:
Ottaako pataan?
Myönnä itsellesi mistä kauna johtuu.
Pääset tunteitesi yläpuolelle ajattelemaan älylläsi.
Jos joku on loukannut sinua, niin ihminen hänkin on virheineen.
Luulen että lopulta on parempi fiilis kun ei tarvitse koko ajan hiillostaa jotain. - Anonyymi
En, etkö sinäkään.
- Anonyymi
Anonyymi kirjoitti:
Myönnä itsellesi mistä kauna johtuu.
Pääset tunteitesi yläpuolelle ajattelemaan älylläsi.
Jos joku on loukannut sinua, niin ihminen hänkin on virheineen.
Luulen että lopulta on parempi fiilis kun ei tarvitse koko ajan hiillostaa jotain.Faktantarkistus, minä en edelleenkään usko sinun tietävän tietokannoista mitään, vaikka kuinka kyseenalaistaisit henkisen terveyteni. Sen sijaan pidän sinua hyvin epämiellyttävänä keskustelukumppanina.
Osoittaisit jotain tietäväsi, mutta mitenkös sellainen tehdään kun tietotaito puuttuu, niinpä poljetaan maanrakoon epäilijät, sillähän siitä päästään. Täällähän on vekkuli tunnelma viikonlopun kynnyksellä :)
Tuo mainitsemasi virheilmoitus viittaa vahvasti siihen, että $servername on unohtunut vaihtaa asianmukaiseksi, eli localhostista johonkin xxx.xxx.xx muotoiseen tietokantasi palvelimen osoitteeseen. Ainakin omassa testissä scripti rullasi vain sitä yhtä asetusta vaihtamalla edelyttäen tietysti että se testitaulukin on aluksi muistettu luoda.
Hyvää viikonloppua!- Anonyymi
Faktantarkistus kirjoitti:
Täällähän on vekkuli tunnelma viikonlopun kynnyksellä :)
Tuo mainitsemasi virheilmoitus viittaa vahvasti siihen, että $servername on unohtunut vaihtaa asianmukaiseksi, eli localhostista johonkin xxx.xxx.xx muotoiseen tietokantasi palvelimen osoitteeseen. Ainakin omassa testissä scripti rullasi vain sitä yhtä asetusta vaihtamalla edelyttäen tietysti että se testitaulukin on aluksi muistettu luoda.
Hyvää viikonloppua!Ihmeellistä sönkkäämistä.
- Anonyymi
Ongelmasta jatkoa (häiriköistä viis): Voisiko johtua
$servername = "localhost"; => toimii
$servername = "mysql99.webhost.fi:9999"; =>ei toimi
nimessä on pisteitä ym Nopealla googlauksella pisti silmään muutamia esiintuotuja PDO-ongelmia juurikin $servernamessa olevan portin kanssa. Asia saattaisi selvitä ihan sillä että kysäiset asiaa webhostisi aspasta. Minulla on oletusportit eli en ole joutunut niiden kanssa säätämään ja en osaa asiassa jeesata enempää.
Vai olisiko se portin määritys peräti noin helpoksi tehty eli erotetaan se syntaksissa omaksi osakseen $servernamen ja dbnamen väliin:
new PDO("mysql:host=$servername;port=XXXX;dbname=db_name", $username, $password)- Anonyymi
" en osaa asiassa jeesata enempää"
Sitähän minä olen koko ajan sanonut, ettet sinä tietokannoista mitään tiedä, kunhan vain sönkötät paskaa aikasi kuluksi.
- Anonyymi
"Vai olisiko se portin määritys peräti noin helpoksi tehty"
Kyllä vain, näin toimii. Ja edelliseen eriävä mielipide. - Anonyymi
Miksi PDO-esimerkissä ei lomakkeelta tulevaa syöttöä putsata?
Kaikissa tilanteissa on syytä tarkastaa lomakkeilta tuleva syöttö. Mieluummin siis ylivarovainen kuin huoleton.
Tässä esimerkissä ei ole formia edes rakennettu ja tarkoitus oli aluperinkin vastata demoamalla ketjun aloittajan kysymykseen siitä miten preparea käyttäen tietokannasta luettava data ohjataan includella lisättävään scriptiin. Siltä osin asia lienee ratkennut ja kysyjä etenee projektissaan. Tarkoitus ei ole ollut edes yrittää rakentaa kaikki poikkeusolot huomioivaa tietojen syöttölomaketta. Niitä löytyy googlaamalla.
Kuten aina, asioilla on tapana lähteä lapasesta. Päivitin vielä kerran esimerkkifaileja edellä esille nousseen tärkeän portti-määrityksen osalta sekä hienosäädin vähän "trimmausta" siltä osin ettei tyhjää hyväksytä tietokantaan tallennettavaksi.
Oikeassa elämässä on usein tarpeen rajoittaa vaikkapa lomakkeilla syötettäessä sallittavia merkkejä (nimissä ei sallita numeroita, syöttöjen minimi- ja maksimipituudet, jne), mutta tämä menee jo liian kauas ketjun alkuperäisestä aiheesta. Se siitä sitten.
- Anonyymi
The main difference between PDO and Mysqli is that PDO supports various databases and mysqli supports only MySQL. MySQLi is also a bit faster. PDO supports 12 different drivers, opposed to MySQLi, which supports MySQL only. So about security there's no difference because they both use prepared statements with escaping.
- Anonyymi
Kysyjäkin kommentoi:
Tässäkin tapauksessa homma lähti lapasesta. Piti vain päivittää kaveriapuna muutama pikkuinen juttu sovellukseen, jonka ylläpito oli "kadonnut"...
Mutta tulipa samalla vastaisen varalle myös tietoa ja loistavat esimerkit!
Ketjusta on poistettu 6 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Miehille kysymys
Onko näin, että jos miestä kiinnostaa tarpeeksi niin hän kyllä ottaa vaikka riskin pakeista ja osoittaa sen kiinnostukse1414467- 932139
Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap152071Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi761894Ylen uutiset Haapaveden yt:stä.
Olipas kamalaa luettavaa kaupungin irtisanomisista. Työttömiä lisää 10 tai enempikin( Mieluskylän opettajat). Muuttavat1421542Haluaisin jo
Myöntää nämä tunteet sinulle face to face. En uskalla vain nolata itseäni enää. Enkä pysty elämäänkin näiden kanssa jos541522VENÄJÄ muuttanut tänään ydinasetroktiinia
Venäjän presidentti Vladimir Putin hyväksyi tiistaina päivitetyn ydinasedoktriinin, kertoo uutistoimisto Reuters. Sen mu1041395- 751316
- 1011297
Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1201109