Pereiti prie turinio

AR saugu naudoti tokį kodą?


Rekomenduojami pranešimai

Sveiki. Dar tik mokausi dirbti su OOP, tai norėjau paklausti ar čia saugu taip kurti klasių funkcijas, kad nurodyti iškart Mysql kodą.

 

     function Select($s){
       global $conn;

   $result2 = $conn->query($s);

    $this -> result = $result2;

   }

 

ir tada

 

  $nauja = new Imones();   
$nauja -> Select("SELECT * FROM darbuotojai");
    while($row = mysqli_fetch_assoc($nauja -> result)) {
           echo "<option value='".$row["id"]."'>".$row["vardas"]."</option>";

         }

 

ar čia programuotojas gali iškart kažkaip įvest kokį nori mysql kodą ir sužinot info.

 

dar vienas pvz:

 

function Prideti($q){
       global $conn;

   $result2 = $conn->query($q);

     $this -> ats = $result2;

   }

 

ir

  $nauja = new Imones();   
$nauja -> imone = $_POST['imone'];
     $nauja -> darbuotojas = $_POST['darbuotojas'];
 $nauja -> Prideti("insert into imones (pavadinimas,darbuotojo_id) values   ('".$nauja -> imone."','".$nauja -> darbuotojas."')");

           if ($nauja -> ats == 1) {
                  echo '<div class="show" align="left">'.
   $nauja -> imone.', Priklauso: <span style="color: green;">'.$nauja -> darbuotojas().'</span>
   </div> ';
           }

Redagavo dowista
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nenaudok global. Tai blogis. YRa toks dalykas, kaip dependency injection. http://www.phptherightway.com/#dependency_injection

Maždaug turėtum atskirą klasę duombazės ir ją įsidėtum į Company klasę.

 

 

$company = new Company(new Database()); ar pnš.

 

Ir pridėjimui į duombazę naudok prepared statements.

Redagavo Arvis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, PDO.

 

„MySQLi“ irgi palaiko „Prepared statements“. Argumentuok, kodėl „PDO“ geresnė, jeigu duomenų bazė „MySQL“? Našumu? Ne. Funkcijų skaičiumi? Ne. Patogumu? Ne. Užklausos uždarymu? Ne.

 

+ Jeigu tik 1 užklausa (pavyzdžiui, pridėjimo) į duomenų bazę, tai „Prepared statement“ naudojimas yra optimizacijos klaida, kuri nedovanotina profesionalams. Visos funkcijos privalo būti naudojamos pagal paskirtį. Filtravimo funkcijos lygiai taip pat.

 

Neskleisk savo neišmanymo pradedantiesiems.

 

Ir klausimas temos autoriui. Kodėl naudoji „SELECT *“ (žvaigždutę)? Bent suvoki kaip ji veikia? Tikriausiai ne, kadangi tada nenaudotum. Dar keista, jog naudoji objektinį „PHP“, bet objektinio „MySQLi“ ne.

 

Iš viso nesuprantu, kam naudoji objektinį PHP? Turbūt nepasimokei iš didžiųjų turinio valdymo sistemų arba forumų mikro optimizacijos klaidų, jog net talpyklos nepadeda (angl. cache).

 

Už nebūtinas klases ir funkcijas sumokėsi puslapio greičiu, t. y. teks pirkti 2x galingesnį serverį.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

„MySQLi“ irgi palaiko „Prepared statements“. Argumentuok, kodėl „PDO“ geresnė, jeigu duomenų bazė „MySQL“? Našumu? Ne. Funkcijų skaičiumi? Ne. Patogumu? Ne. Užklausos uždarymu? Ne.+ Jeigu tik 1 užklausa (pavyzdžiui, pridėjimo) į duomenų bazę, tai „Prepared statement“ naudojimas yra optimizacijos klaida, kuri nedovanotina profesionalams. .

 

".....Ultimately, PDO wins this battle with ease. With support for twelve different database drivers (eighteen different databases!) and named parameters, we can ignore the small performance loss, and get used to its API. From a security standpoint, both of them are safe as long as the developer uses them the way they are supposed to be used (read: prepared statements)...."

 

Tai palei tave visus frameworkus reikia laidoti ir grįžti į procedurinį pasaulį ? :-)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

".....Ultimately, PDO wins this battle with ease. With support for twelve different database drivers (eighteen different databases!) and named parameters, we can ignore the small performance loss, and get used to its API. From a security standpoint, both of them are safe as long as the developer uses them the way they are supposed to be used (read: prepared statements)...."

 

Tai palei tave visus frameworkus reikia laidoti ir grįžti į procedurinį pasaulį ? :-)

 

„Argumentuok, kodėl „PDO“ geresnė, jeigu duomenų bazė „MySQL“?“ - ryškiai tau su teksto suvokimu prastai ar kaip? Paminėjau, jog duomenų bazė „MySQL“, tai „PDO“ kitų duomenų bazių palaikymo argumentas nėra tinkamas. Nemačiau, kad kažkas dažnai emigruotų iš kitos duomenų bazes, jeigu ir planuoja, tai reikėtų rinktis nedelsiant.

 

„Framework“ nereikėtų naudoti, nebent nėra gaila mokėti brangiau už galingesnį serverį, nors abejoju, ar padėtų su dar didesniu duomenų srautu. O jeigu nuvertini savo taikomąją programą, jog negaus daugiau nei 100 tūkst. ar daugiau vartotojų, tai gali palikti programavimą. Pasidomėk apie mikro optimizacijos veikimą. Oficialios programavimo kalbos nedavė ir niekados neduos „Framework“ sertifikato. Jie buvo sukurti tinginiams, kurie nežino elementarios dokumentacijos ir nemoka aprašyti savo funkcijų.

 

Tarp kita ko, procedūrinis pasaulis nėra prastas. Naudodamas jį, tu absoliučiai nieko neprarandi. Turbūt išsivystė kažkokia paranoja nuo iškraipyto kodo („Framework“ dėka). Aš asmeniškai naudoju tik objektinį „MySQLi“, dar kartais „PHP“ laiko klases, bet naudoti kitur - nematau prasmės.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pries metus irgi buvo toks useris kuris rasinejo apie optimizacijas, etc, cia zmogus tik mokos ir klausia, o tas iskart kisa tas ir tas blogis... Kiek tu su tom db funkcijom susidursi, kiekvienas framworkas, cms su juo ateina. O kur det paty koda(stack, instructions,..) jau pats programeris sprendzia kokius resursus naudot ir kokius juos turi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pries metus irgi buvo toks useris kuris rasinejo apie optimizacijas, etc, cia zmogus tik mokos ir klausia, o tas iskart kisa tas ir tas blogis... Kiek tu su tom db funkcijom susidursi, kiekvienas framworkas, cms su juo ateina. O kur det paty koda(stack, instructions,..) jau pats programeris sprendzia kokius resursus naudot ir kokius juos turi.

 

Tiesa, bet su kitų projektu („Framework“) daug nepasieksi. Apgailėtina, kad tokie žmonės tingūs pasidarė, o gal ir trūksta mentaliteto?

 

Rekomenduoju pasimokyti iš „IPB“ variklio klaidų, kada net talpyklos su optimizacija nelabai padeda. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tiesa, bet su kitų projektu („Framework“) daug nepasieksi. Apgailėtina, kad tokie žmonės tingūs pasidarė, o gal ir trūksta mentaliteto?

 

Rekomenduoju pasimokyti iš „IPB“ variklio klaidų, kada net talpyklos su optimizacija nelabai padeda. :)

 

Frameworkai pasidarė populiarūs ne dėl greičių ar kažkokio nemokėjimo, o dėl patogumo, kai prie vieno projekto dirba daug programerių. Yra tam tikros taisyklės, gairės, kurių laikomasi. O jei 50 programerių pradės dirbti prie vieno projekto ir kiekvienas rašys kodą savo stilium, tai ten nei greičio, nei patogumo - nieko nebeliks. Šiais laikais servai nėra tokie brangūs lyginant su programeriais. Jei neužtenka servo tai statai load balancerį ir apildomai kelis servus.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Turiu omenyje dėl šito sakinio.

 

Jeigu apie „Prepared statements“, tai reikėtų naudoti jį tik tada, kai reikia kreiptis į tą pačią lentelę daugiau nei 2 kartus. Sutaupys truputį našumo, pavyzdžiui, ištraukiant iš lentelių duomenis (su „SELECT“) ir ciklu, bet jeigu bus tik 1 įrašas (arba tik jo reikės), tai paprasta „query“ greičiau apdoros.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu apie „Prepared statements“, tai reikėtų naudoti jį tik tada, kai reikia kreiptis į tą pačią lentelę daugiau nei 2 kartus. Sutaupys truputį našumo, pavyzdžiui, ištraukiant iš lentelių duomenis (su „SELECT“) ir ciklu, bet jeigu bus tik 1 įrašas (arba tik jo reikės), tai paprasta „query“ greičiau apdoros.

 

Premature optimization is the root of all evil

-- Donald Knuth

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Iš viso nesuprantu, kam naudoji objektinį PHP? Turbūt nepasimokei iš didžiųjų turinio valdymo sistemų arba forumų mikro optimizacijos klaidų, jog net talpyklos nepadeda (angl. cache).

 

Klausimas kodėl naudoju objektinį? Todėl nes noriu tobulėti. Dabar pas mane yra pliki kodai, tai nėra profesionalu, kodas manau turi būti "švarus". Apskritai, kažkada parodžiau savo kodus vienai įmonei, tai sakė mokykis OOP ir taškas.

 

Štai kokia pas mane mėsmalė :D

 $(document).ready(function(){
   $("form").submit(function(){
       $(".pateikimas").attr("disabled","disabled");
       $(".kaciukas").append( "<img src='kraunasi.gif' style='width: 157px;margin-left: 131px;margin-top: -59px;'/>" );
var gatve = $("select[name=savivaldybe]").val();
var pastas = $("input[name=apylinke]").val();
var dataString = 'savivaldybe='+ gatve + '&apylinke='+ pastas;

   $.ajax({
   type: "POST",
   url: "prideti2.php",
   data: dataString,
   cache: false,
   success: function(response)
   {
   $("#ats").html(response).show();
    $(".pateikimas").removeAttr("disabled");
              $(".kaciukas").empty();
$("input[name=apylinke]").val('');
var input22 = document.getElementById('gatve');
 input22.focus();
 input22.select();
   }
   });
return false;

   });

});

 

            if($_POST['apylinke']) {

$savivaldybe = $_POST['savivaldybe'];
$post= $_POST['apylinke'];

$sql = "insert into apylinkes (apylinke, sav_id) values   ('$post','$savivaldybe')";
$query = $conn->query($sql);

$sql2 = "select * from savivaldybes where id=$savivaldybe";
$query2 = $conn->query($sql2);
while($row = mysqli_fetch_assoc($query2))
{
echo ' <div id="sekmingas" style="margin: 0px auto; text-align: center; background: rgb(223, 240, 216) none repeat scroll 0% 0%; border: 1px solid rgb(214, 233, 198); padding: 10px; color: rgb(74, 132, 75); font-size: 16px; font-weight: 500;"><strong>Pridėta sėkmingai!</strong><br>'.
$row['savivaldybe'].' sav. --> <span style="color: green;">'.$post.'</span></div>';
      }
       break;
         }

select post.k as 'post.k', apylinkes.apylinke as 'apylinkes.apylinke', post.pastaba as 'pastaba', savivaldybes.savivaldybe as 'savivaldybes.savivaldybe' from post left join apylinkes on post.pastas=apylinkes.id left join savivaldybes on apylinkes.sav_id=savivaldybes.id  where ".$o." convert(k using utf8) like '$g%' order by k LIMIT 10

 

Taip aš turiu sukūręs ne viena svetainę, tačiau jos tik iš išorės atrodo gražiai, viduje mėsmalė :D Ir šiaip realiai turiu suvokimą kaip ką padaryti, kaip sukurti kažką, bet mano kodas nėra profesionalus,net mėgėju savęs negaliu vadint turbūt :D

Redagavo dowista
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Klausimas kodėl naudoju objektinį? Todėl nes noriu tobulėti. Dabar pas mane yra pliki kodai, tai nėra profesionalu, kodas manau turi būti "švarus". Apskritai, kažkada parodžiau savo kodus vienai įmonei, tai sakė mokykis OOP ir taškas.

 

Štai kokia pas mane mėsmalė :D

 $(document).ready(function(){
   $("form").submit(function(){
       $(".pateikimas").attr("disabled","disabled");
       $(".kaciukas").append( "<img src='kraunasi.gif' style='width: 157px;margin-left: 131px;margin-top: -59px;'/>" );
var gatve = $("select[name=savivaldybe]").val();
var pastas = $("input[name=apylinke]").val();
var dataString = 'savivaldybe='+ gatve + '&apylinke='+ pastas;

   $.ajax({
   type: "POST",
   url: "prideti2.php",
   data: dataString,
   cache: false,
   success: function(response)
   {
   $("#ats").html(response).show();
    $(".pateikimas").removeAttr("disabled");
              $(".kaciukas").empty();
$("input[name=apylinke]").val('');
var input22 = document.getElementById('gatve');
 input22.focus();
 input22.select();
   }
   });
return false;

   });

});

 

            if($_POST['apylinke']) {

$savivaldybe = $_POST['savivaldybe'];
$post= $_POST['apylinke'];

$sql = "insert into apylinkes (apylinke, sav_id) values   ('$post','$savivaldybe')";
$query = $conn->query($sql);

$sql2 = "select * from savivaldybes where id=$savivaldybe";
$query2 = $conn->query($sql2);
while($row = mysqli_fetch_assoc($query2))
{
echo ' <div id="sekmingas" style="margin: 0px auto; text-align: center; background: rgb(223, 240, 216) none repeat scroll 0% 0%; border: 1px solid rgb(214, 233, 198); padding: 10px; color: rgb(74, 132, 75); font-size: 16px; font-weight: 500;"><strong>Pridėta sėkmingai!</strong><br>'.
$row['savivaldybe'].' sav. --> <span style="color: green;">'.$post.'</span></div>';
      }
       break;
         }

select post.k as 'post.k', apylinkes.apylinke as 'apylinkes.apylinke', post.pastaba as 'pastaba', savivaldybes.savivaldybe as 'savivaldybes.savivaldybe' from post left join apylinkes on post.pastas=apylinkes.id left join savivaldybes on apylinkes.sav_id=savivaldybes.id  where ".$o." convert(k using utf8) like '$g%' order by k LIMIT 10

 

Taip aš turiu sukūręs ne viena svetainę, tačiau jos tik iš išorės atrodo gražiai, viduje mėsmalė :D Ir šiaip realiai turiu suvokimą kaip ką padaryti, kaip sukurti kažką, bet mano kodas nėra profesionalus,net mėgėju savęs negaliu vadint turbūt :D

Tai, jeigu nenori, kad būtų mėsmalė ir nori tobulėt, gal pats laikas laikytis PSR?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Klausimas kodėl naudoju objektinį? Todėl nes noriu tobulėti. Dabar pas mane yra pliki kodai, tai nėra profesionalu, kodas manau turi būti "švarus". Apskritai, kažkada parodžiau savo kodus vienai įmonei, tai sakė mokykis OOP ir taškas.

 

Štai kokia pas mane mėsmalė :D

 $(document).ready(function(){
   $("form").submit(function(){
       $(".pateikimas").attr("disabled","disabled");
       $(".kaciukas").append( "<img src='kraunasi.gif' style='width: 157px;margin-left: 131px;margin-top: -59px;'/>" );
var gatve = $("select[name=savivaldybe]").val();
var pastas = $("input[name=apylinke]").val();
var dataString = 'savivaldybe='+ gatve + '&apylinke='+ pastas;

   $.ajax({
   type: "POST",
   url: "prideti2.php",
   data: dataString,
   cache: false,
   success: function(response)
   {
   $("#ats").html(response).show();
    $(".pateikimas").removeAttr("disabled");
              $(".kaciukas").empty();
$("input[name=apylinke]").val('');
var input22 = document.getElementById('gatve');
 input22.focus();
 input22.select();
   }
   });
return false;

   });

});

 

            if($_POST['apylinke']) {

$savivaldybe = $_POST['savivaldybe'];
$post= $_POST['apylinke'];

$sql = "insert into apylinkes (apylinke, sav_id) values   ('$post','$savivaldybe')";
$query = $conn->query($sql);

$sql2 = "select * from savivaldybes where id=$savivaldybe";
$query2 = $conn->query($sql2);
while($row = mysqli_fetch_assoc($query2))
{
echo ' <div id="sekmingas" style="margin: 0px auto; text-align: center; background: rgb(223, 240, 216) none repeat scroll 0% 0%; border: 1px solid rgb(214, 233, 198); padding: 10px; color: rgb(74, 132, 75); font-size: 16px; font-weight: 500;"><strong>Pridėta sėkmingai!</strong><br>'.
$row['savivaldybe'].' sav. --> <span style="color: green;">'.$post.'</span></div>';
      }
       break;
         }

select post.k as 'post.k', apylinkes.apylinke as 'apylinkes.apylinke', post.pastaba as 'pastaba', savivaldybes.savivaldybe as 'savivaldybes.savivaldybe' from post left join apylinkes on post.pastas=apylinkes.id left join savivaldybes on apylinkes.sav_id=savivaldybes.id  where ".$o." convert(k using utf8) like '$g%' order by k LIMIT 10

 

Taip aš turiu sukūręs ne viena svetainę, tačiau jos tik iš išorės atrodo gražiai, viduje mėsmalė :D Ir šiaip realiai turiu suvokimą kaip ką padaryti, kaip sukurti kažką, bet mano kodas nėra profesionalus,net mėgėju savęs negaliu vadint turbūt :D

 

"Dabar pas mane yra pliki kodai, tai nėra profesionalu" - nonsense. Kur matei PHP.net parasyta, kad neobjektinis programavimas yra neprofesionalus? Ar vadovaujiesi neoficialiais saltiniais ir standartais? To daryti nevertetu. Objektinis galbut patogesnis, bet man tik su DB greiciau dirbasi. Kurti tas klases zaidimas, taip pat apsikrovimas + overkill. Tiesa, PHP7 truputi greiciau veikia klases, bet neaisku, kaip ateityje bus. ;)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Objektai ir klasės yra visko pagrindas šiandien, pastatytas prieš daugelį metų, bet negyvuos jis per amžius. :)

 

Pats algoritmų viešpats Dijkstra sakė: "Object-oriented programming is an exceptionally bad idea which could only have originated in California."

 

Aišku, įsikibę dabar visi už jo laikosi ir žaidžia pagal SOLID principą, bet viskam yra bet.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

"Dabar pas mane yra pliki kodai, tai nėra profesionalu" - nonsense. Kur matei PHP.net parasyta, kad neobjektinis programavimas yra neprofesionalus? Ar vadovaujiesi neoficialiais saltiniais ir standartais? To daryti nevertetu. Objektinis galbut patogesnis, bet man tik su DB greiciau dirbasi. Kurti tas klases zaidimas, taip pat apsikrovimas + overkill. Tiesa, PHP7 truputi greiciau veikia klases, bet neaisku, kaip ateityje bus. ;)

 

Turi į git'ą įkėlęs source kokį? Idomu kaip atrodo tas tavo 'optimizuotas' kodas be frame'ų (back, front), jaučiu koks WET anti-pattern ar SPA max 9k ane? dry.gif

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki. Dar tik mokausi dirbti su OOP, tai norėjau paklausti ar čia saugu taip kurti klasių funkcijas, kad nurodyti iškart Mysql kodą.

<.... SKIPPED>

 

ir

  $nauja = new Imones();   
$nauja -> imone = $_POST['imone'];
     $nauja -> darbuotojas = $_POST['darbuotojas'];
 $nauja -> Prideti("insert into imones (pavadinimas,darbuotojo_id) values   ('".$nauja -> imone."','".$nauja -> darbuotojas."')");

           if ($nauja -> ats == 1) {
                  echo '<div class="show" align="left">'.
   $nauja -> imone.', Priklauso: <span style="color: green;">'.$nauja -> darbuotojas().'</span>
   </div> ';
           }

 

Labas,

 

Gal ne visai apie OOP, bet dėl saugumo tokio kodo nenaudok - tavo kodas turi "sql injection" pažeidžiamumą (vulnerability). Konkrečiai šita vieta:

 

$nauja -> imone = $_POST['imone'];
     $nauja -> darbuotojas = $_POST['darbuotojas'];
 $nauja -> Prideti("insert into imones (pavadinimas,darbuotojo_id) values   ('".$nauja -> imone."','".$nauja -> darbuotojas."')");

Redagavo simasj
Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

+ Jeigu tik 1 užklausa (pavyzdžiui, pridėjimo) į duomenų bazę, tai „Prepared statement“ naudojimas yra optimizacijos klaida, kuri nedovanotina profesionalams. Visos funkcijos privalo būti naudojamos pagal paskirtį. Filtravimo funkcijos lygiai taip pat.

 

 

PHP nesu kodinęs, bet ar prepared statements nėra patikimas būdas išvengti SQL injekcijų? Kokia alternatyva, `mysql_real_real_real_escape` ant kiekvieno argumento?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...