Pereiti prie turinio

del funkcijos atvaizdavimo


Rekomenduojami pranešimai

strigau su funkcijoms, kaip ten ją ištraukt ir atvaizduoti iš myskl pasiemus kelis įrasus. Nariu ad spausdintu pasirinkta skaiciu.

 

 

pasirašiau šitaip, bet klaidas meta.


       function menushow($skaicius) { 

           $uzkl = "SELECT  DISTINCT kategorija FROM logistas GROUP BY kategorija ORDER BY count(kategorija) DESC LIMIT '$skaicius'";

                   $menurez = $this->conn->query($uzkl); // siunciu uzklausa

			WHILE( $row = $menurez->fetch_array()){         //gaunu array

				echo "<li><a href='index.php?kat=".$row['kategorija']."' >".$row['kategorija']."</a></li>";
                                                                     }
       }  

menushow{5};

 

 

 

Uncaught Error: Call to undefined function menushow() in

Bet man tas nieko nepaaiškina.

 

 

 

 

Čia visasklasės kodas:

		class connection{
	protected $servername = 'localhost';
       protected $username = 'root';
       protected $password = '';
       protected $database='mysql';
	protected $conn; // duomenu bazes

   function __construct()
   {

       // prisijungimo funkcija
       $this->conn = new mysqli($this->servername, $this->username, $this->password, $this->database);

       // check ar prisijungta >>THIS<< ceikia
       if ($this->conn->connect_error) {
           die("Connection failed: " . $this->conn->connect_error);
           return false;
       }else{
           // no need to assign anthing here as the database object has already been assigned to $this->conn
           return true;
       }
   }

public function __destruct() {
     mysqli_close($this->conn);
  }

   // pateikiama uzklausa
   public function uzklausa($sql) {
       // siunciamas ats
       return $this->conn->query($sql);
   }

       function menushow() { 
           $uzkl = "SELECT  DISTINCT kategorija FROM logistas GROUP BY kategorija ORDER BY count(kategorija) DESC LIMIT 1";
                   $menurez = $this->conn->query($uzkl);

			//WHILE( $row = $menurez->fetch_array()){         

				echo "<li><a href='index.php?kat=".$row['kategorija']."' >".$row['kategorija']."</a></li>";
                                                              		// }
       }                                                                                                                                         		



}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesuprantu vieno dalyko. Kodėl Jūs rašote kintamuosius, duomenų bazės lenteles, failų pavadinimus lietuviškai (be LT simbolių)? Nors programavimo kalba yra parašyta anglų k.? Baisiai atrodo ir labai neprofesionaliai. Be to, „SELECT *” yra griežta draudžiama naudoti dėl optimizacijos. Matau, kad dar nemokate SQL kodo rašyti. Baisu pagalvoti, kad yra tokių programuotojų.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Be to, „SELECT *" yra griežta draudžiama naudoti dėl optimizacijos.

Galėtum plačiau apie šitą, nuoroda etc? Niekur neradau, ar čia tavo nuomonė, jog draudžiama? php.net, w3scool jos pavyzdžiuose. Dėl komentarų, filų, db kategorijų - pavadinimų, siūlai lietuviškais rašmenim..?

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galėtum plačiau apie šitą, nuoroda etc? Niekur neradau, ar čia tavo nuomonė, jog draudžiama? php.net, w3scool jos pavyzdžiuose. Dėl komentarų, filų, db kategorijų - pavadinimų, siūlai lietuviškais rašmenim..?

 

Asterisko ženklas reiškia, kad renkiesi viską, kas atitinka tavo kriterijus - taip imamas didesnis (nereikalingos) informacijos kiekis nei tau to reikia. Taip ilgiau užtrunkama, atliekant tai ir kenčia optimizacija. Vien iš paprasto loginio mąstymo išeitų suprasti. :)

 

Ir tau siūlo rašyti komentarus angliškai...pačios programavimo kalbos realiai yra anglų kalba su savo taisyklėm ir sintakse...be to, taip kodą galėtų suprasti visiškai bet kas. Tiesiog sako, kad tai atrodo neprofesionalu.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Asterisko ženklas reiškia, kad renkiesi viską, kas atitinka tavo kriterijus - taip imamas didesnis (nereikalingos) informacijos kiekis nei tau to reikia. Taip ilgiau užtrunkama, atliekant tai ir kenčia optimizacija. Vien iš paprasto loginio mąstymo išeitų suprasti. :)

 

Ir tau siūlo rašyti komentarus angliškai...pačios programavimo kalbos realiai yra anglų kalba su savo taisyklėm ir sintakse...be to, taip kodą galėtų suprasti visiškai bet kas. Tiesiog sako, kad tai atrodo neprofesionalu.

O jeigu man reikia visko? :huh:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O jeigu man reikia visko? :huh:

 

Nesvarbu, lenteles turi nurodyti individualiai. Ta funkcija yra tiesiog lėta, nes turi dar patikrinti kiek yra lentelių, gauti jų pavadinimus ir t. t. Negi sunku daugiau parašyti?

 

Be to, kam autorius sukuria naują kintamąjį, kuris visiškai nereikalingas? SQL kodą rašykite iškarto į funkciją, o ne sukurkite naują kintamąjį, tiesiog apkraunate nereikalingai variklį.

 

Pataisau šį kodą ir parodau kaip pavyzdį.

 

$menurez = $this->conn->query("SELECT `kategorija` FROM `logistas` GROUP BY `kategorija` ORDER BY COUNT(`kategorija`) DESC LIMIT 1;");

 

Gale nebūtinas kabliataškis (SQL kode, jeigu pastebėjote), bet oficialus PHPMyAdmin prideda prie pabaigos, tad rekomenduoju irgi jį pridėti (taisyklingiau bus).

 

Redagavimas: dar nesupratau vieno dalyko, kodėl buvo panaudota COUNT funkcija? Taip pat, ORDER BY turėtų būti data arba skaičius, nežinau, kokio tipo ta kategorija. Šiuo atveju, parenku `id` atributą.

 

Pastebėjau, kad gale nėra uždarymo funkcijos. Kai pasiimi kažką iš lentelės, po bet kokios MySQLi funkcijos, visada uždaryk sesiją. HTML kabutes nekeisk. Jos rašomos dvigubomis kabutėmis, o ne viengubomis. Matau, nuorodoje nurodai $_GET['kat'] atributą, nemanai, kad jis turėtų būti ID (skaičiais nurodytas)? Kaip rašiau, nežinau, koks kategorijos tipas, varchar ar int, bet jei varchar, rekomenduoju naudoti ID. Reikėtų pridėti: SELECT `id`, `kategorija`, o tada $row[0] nuorodoje palikti, o nuorodos tekste pakeisti į $row[1].

 

Galinis kodas:

 

$menurez = $this->conn->query("SELECT `kategorija` FROM `logistas` GROUP BY `kategorija` ORDER BY COUNT(`kategorija`) DESC LIMIT 1;");

if ($menurez->num_rows > 0) {
while ($row = $menurez->fetch_row()) {
	echo '<ul><li><a href="index.php?kat='.$row[0].'">'.$row[0].'</a></li></ul>';
       }
} else {
echo 'Rezultatų nėra.';
}

$menurez->close();

 

Pridėjau atgal COUNT(`kategorija`).

Redagavo Greisis
Nuoroda į pranešimą
Dalintis kituose puslapiuose

"SELECT kategorija FROM logistas GROUP BY kategorija ORDER BY count(kategorija) DESC LIMIT 5;"

 

Stulpelio kiekvienoj eilutej tik po viena žodį ir daugelis jų kartojasi, COUNT, jog rikiuotų pagal vienodų įrašų kiekį. Distinct tik ištryniau. rolleyes.gif

 

OK, žiūrėk kaip tau geriau. Nežinau kategorijos tipo, todėl ir parinkau tokį kodą.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Is premature optimization really the root of all evil?

 

Tiksliai nežinau kokio čia dydžio projektas, bet jeigu optimizuojat SQL užklausas duombazėm su 20 įrašų ar netgi string'ų žūt būt nepriskirinėjat kintamiesiems, tai jau panašu į priešlaikį optimizavimą (arba norą pasirodyti).

 

Be to, PHP iš tiesų tokia nevykus, kad keli papildomi kintamieji sukelia pastebimą spartos sumažėjimą? Aš kaip tik sakyčiau, kad geriau priskirti užklausą kintamajam, o patį užklausos tekstą parašyti per kelias eilutes, kad būtų lengviau skaityti.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Is premature optimization really the root of all evil?

 

Tiksliai nežinau kokio čia dydžio projektas, bet jeigu optimizuojat SQL užklausas duombazėm su 20 įrašų ar netgi string'ų žūt būt nepriskirinėjat kintamiesiems, tai jau panašu į priešlaikį optimizavimą (arba norą pasirodyti).

 

Be to, PHP iš tiesų tokia nevykus, kad keli papildomi kintamieji sukelia pastebimą spartos sumažėjimą? Aš kaip tik sakyčiau, kad geriau priskirti užklausą kintamajam, o patį užklausos tekstą parašyti per kelias eilutes, kad būtų lengviau skaityti.

 

Kai tu parašysi, tai verkti norisi. Ten elementarus, taisyklingas SQL kodas, koks ir turėtų būti rašomas. Dauguma žmonių yra tinginiai (primeni man į tokį), taip paskui ir iškraipo informaciją, o naujokams rodomas netinkamas pavyzdis.

 

Aha, privelk tokių klaidų visuose failuose, tai efektai bus tokie žymūs, kad teks pirkti galingesnį serverį, tikriausiai ir nori išleisti pinigus. Vėliau verkia, kad PHP nėra graži, taisyklinga (palyginus su kt. programavimo kalbomis), o apie 60 - 70% programuotojų (jei taip galima pavadinti), nesugeba net taisyklingai parašyti kodą, kodas pagrinde rašomas, kad tik veiktų, neatsižvelgiant į optimizaciją (įsk. micro, jos sudeda pakankamai sekundžių, jei projektas didelis, o Facebook geras pavyzdys, daug sumokėjo, norint ištaisyti tas klaidas). Dar net kiti nemoka HTML4, HTML5 rašyti taisyklingai, o naršyklės pačios turi taisyti snarglių kodą.

 

Tarp kita ko, žinai bent kintamųjų reikšmę ir jų tikslą? Tas kintamasis eis po visą skriptą, nors nebus naudojamas. O dėl grožio, tai galime ginčytis. Galėsiu atsiųsti ekrano užfiksavimą, kaip gražiai kodas atrodo.

 

Nesiginčyk su manimi, nes nelaimėsi. Pateikdamas straipsnius, kurie bando pateisinti žinių trūkumą, tau tiesiog nepadės. B-)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nesvarbu, lenteles turi nurodyti individualiai. Ta funkcija yra tiesiog lėta, nes turi dar patikrinti kiek yra lentelių, gauti jų pavadinimus ir t. t. Negi sunku daugiau parašyti?

 

Be to, kam autorius sukuria naują kintamąjį, kuris visiškai nereikalingas? SQL kodą rašykite iškarto į funkciją, o ne sukurkite naują kintamąjį, tiesiog apkraunate nereikalingai variklį.

 

Pataisau šį kodą ir parodau kaip pavyzdį.

 

$menurez = $this->conn->query("SELECT `kategorija` FROM `logistas` GROUP BY `kategorija` ORDER BY COUNT(`kategorija`) DESC LIMIT 1;");

 

Gale nebūtinas kabliataškis (SQL kode, jeigu pastebėjote), bet oficialus PHPMyAdmin prideda prie pabaigos, tad rekomenduoju irgi jį pridėti (taisyklingiau bus).

 

Redagavimas: dar nesupratau vieno dalyko, kodėl buvo panaudota COUNT funkcija? Taip pat, ORDER BY turėtų būti data arba skaičius, nežinau, kokio tipo ta kategorija. Šiuo atveju, parenku `id` atributą.

 

Pastebėjau, kad gale nėra uždarymo funkcijos. Kai pasiimi kažką iš lentelės, po bet kokios MySQLi funkcijos, visada uždaryk sesiją. HTML kabutes nekeisk. Jos rašomos dvigubomis kabutėmis, o ne viengubomis. Matau, nuorodoje nurodai $_GET['kat'] atributą, nemanai, kad jis turėtų būti ID (skaičiais nurodytas)? Kaip rašiau, nežinau, koks kategorijos tipas, varchar ar int, bet jei varchar, rekomenduoju naudoti ID. Reikėtų pridėti: SELECT `id`, `kategorija`, o tada $row[0] nuorodoje palikti, o nuorodos tekste pakeisti į $row[1].

 

Galinis kodas:

 

$menurez = $this->conn->query("SELECT `kategorija` FROM `logistas` GROUP BY `kategorija` ORDER BY COUNT(`kategorija`) DESC LIMIT 1;");

if ($menurez->num_rows > 0) {
while ($row = $menurez->fetch_row()) {
	echo '<ul><li><a href="index.php?kat='.$row[0].'">'.$row[0].'</a></li></ul>';
       }
} else {
echo 'Rezultatų nėra.';
}

$menurez->close();

 

Pridėjau atgal COUNT(`kategorija`).

 

O kas jai connectionas nusprogs? sugrius visa programa, tai ne visur tokie tiesioginiai kreipiniai tinka

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kaip suprasti? Taip ir taip Php uždarys komandą. Nebent paslėpsi klaidos pranešimą.

 

Jeigu connection objektas bus null, kompiliatorius klaida tik išmes ir nuluš viskas. Čia tavo pavzydyje nėra šansų, kad taip būtų, bet jai projektas didžiulis tai dažnai taip būna.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jeigu connection objektas bus null, kompiliatorius klaida tik išmes ir nuluš viskas. Čia tavo pavzydyje nėra šansų, kad taip būtų, bet jai projektas didžiulis tai dažnai taip būna.

 

Galima įdėti tikrinimus, jei pageidaujate. Nematau šio pranešimo tikslo. Jei sujungimas nepavyks, tai visas skriptas savaime neveiks - critical error, nemanau, kad gali kažką padaryti specialaus. Kai sujungi duomenų bazę, galima tiesiog patikrinti sujungimą.

 

Bet jeigu optimizuotas kodas, tai tokie pranešimai bus reti. Žinoma, dar reikia turėti galingą serverį.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kai tu parašysi, tai verkti norisi. Ten elementarus, taisyklingas SQL kodas, koks ir turėtų būti rašomas. Dauguma žmonių yra tinginiai (primeni man į tokį), taip paskui ir iškraipo informaciją, o naujokams rodomas netinkamas pavyzdis.

 

Aha, privelk tokių klaidų visuose failuose, tai efektai bus tokie žymūs, kad teks pirkti galingesnį serverį, tikriausiai ir nori išleisti pinigus. Vėliau verkia, kad PHP nėra graži, taisyklinga (palyginus su kt. programavimo kalbomis), o apie 60 - 70% programuotojų (jei taip galima pavadinti), nesugeba net taisyklingai parašyti kodą, kodas pagrinde rašomas, kad tik veiktų, neatsižvelgiant į optimizaciją (įsk. micro, jos sudeda pakankamai sekundžių, jei projektas didelis, o Facebook geras pavyzdys, daug sumokėjo, norint ištaisyti tas klaidas). Dar net kiti nemoka HTML4, HTML5 rašyti taisyklingai, o naršyklės pačios turi taisyti snarglių kodą.

 

Tarp kita ko, žinai bent kintamųjų reikšmę ir jų tikslą? Tas kintamasis eis po visą skriptą, nors nebus naudojamas. O dėl grožio, tai galime ginčytis. Galėsiu atsiųsti ekrano užfiksavimą, kaip gražiai kodas atrodo.

 

Nesiginčyk su manimi, nes nelaimėsi. Pateikdamas straipsnius, kurie bando pateisinti žinių trūkumą, tau tiesiog nepadės. B-)

Tai kad bergždžias reikalas su tavim ginčytis, kai tau vien galvoj optimizacija. Žmogus matyt daro kokį laboratorinį darbą, o tu apie Facebook'us kalbi.

 

Žmonės pirma paprofiliuoja kodą ir tik tada nusprendžia, ar vertą kažką optimizuoti. O tu nusprendei net nežinodamas kas per projektas…

 

Su SELECT * dar bent jau normalus patarimas, nes vis dėl to nekokia praktika. Bet su tuo kintamuoju tai… Ką tas kintamasis sutaupys, 1 ns? Kiek iš viso laiko bus sutaupyta per tuos 53 paleidimus, kurių prireiks, kad žmogus pabaigtų rašyti kodą ir atsisakytų laboratorinį darbą? 53 ns? Gerai kad dar Assembler'iu nepasiūlei perrašyti…

 

Ką žinau, man tai taip užklausos kodas geriau skaitosi:

$getMostPopularCategory = 
   "SELECT `kategorija` 
    FROM `logistas` 
    GROUP BY `kategorija` 
    ORDER BY COUNT(`kategorija`) 
    DESC LIMIT 1;";

$menurez = $this->conn->query(getMostPopularCategory);

Redagavo wi_lius
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tai kad bergždžias reikalas su tavim ginčytis, kai tau vien galvoj optimizacija. Žmogus matyt daro kokį laboratorinį darbą, o tu apie Facebook'us kalbi.

 

Žmonės pirma paprofiliuoja kodą ir tik tada nusprendžia, ar vertą kažką optimizuoti. O tu nusprendei net nežinodamas kas per projektas…

 

Su SELECT * dar bent jau normalus patarimas, nes vis dėl to nekokia praktika. Bet su tuo kintamuoju tai… Ką tas kintamasis sutaupys, 1 ns? Kiek iš viso laiko bus sutaupyta per tuos 53 paleidimus, kurių prireiks, kad žmogus pabaigtų rašyti kodą ir atsisakytų laboratorinį darbą? 53 ns? Gerai kad dar Assembler'iu nepasiūlei perrašyti…

 

Ką žinau, man tai taip užklausos kodas geriau skaitosi:

$getMostPopularCategory = 
   "SELECT `kategorija` 
    FROM `logistas` 
    GROUP BY `kategorija` 
    ORDER BY COUNT(`kategorija`) 
    DESC LIMIT 1;";

$menurez = $this->conn->query(getMostPopularCategory);

 

Aš esu toks žmogus, kuris visada siekia tobulumo. O nesuprantu, kodėl yra blogai galvoti apie optimizavimą. Tai puiku, jeigu daro laboratorinį darbą, dėstytoją manau nustebintų toks taisyklingas darbas.

 

„Žmonės pirma paprofiliuoja kodą ir tik tada nusprendžia, ar vertą kažką optimizuoti. O tu nusprendei net nežinodamas kas per projektas…” - nusišnekėjai, kad net nejaukiai pasijutau. Žmonės pirmiausiai rašo kodą ir iškarto optimizuoja, bent jau turėtų taip būti. Juk neparašom kažkokios nesąmonės ir vėliau taisome. Gal vėliau, dar galima kažką papildyti, analizuojant kodą.

 

„Bet su tuo kintamuoju tai… Ką tas kintamasis sutaupys, 1 ns?” - žinai, yra toks žinomas posakis: „Lašas po lašo ir akmenį pratašo”. Kaip manai, kiek kartų vidutiniškai projektas kreipiasi į duomenų bazę? Tarkim 10 kartų, bent jau čia minimaliai, tai sukuri  10 visiškai nereikalingų kintamųjų su dideliu turiniu. Tavo mąstymas yra toks siauras, kad graudu darosi. Tikiuosi niekam neatlieki programavimo darbų, kadangi tektų viską iš naujo perrašyti, kitam vyr. programuotojui.

 

„Su SELECT * dar bent jau normalus patarimas, nes vis dėl to nekokia praktika.” - dar pamiršai paminėti mysqli_close, kadangi privalai uždaryti bet kokį sujungimą, priešingu atveju, puslapio krovimosi ilgis padidės netik milisekundėmis. Tai irgi buvau pabrėžęs. =]

 

Įdomu, ką dabar parašysi (rekomenduoju nerašyti). :rolleyes:

 

Be to, kažką sakei apie gražumą? <_<

 

http://image.prntscr.com/image/d25d3013db3845d8975cd8d684c8afcb.png

 

^_^

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Įdomu, ką dabar parašysi (rekomenduoju nerašyti). :rolleyes:

 

Be to, kažką sakei apie gražumą? dry.gif

 

http://image.prntscr.com/image/d25d3013db3845d8975cd8d684c8afcb.png

 

^_^

 

Greisis šaunu kad bandai padėti žmonėms bet pats esi dar junioras ir patarčiau nesisvaidyti apibendrinimais "siauras mąstymas", "griežtai draudžiama", "tinginiai", "nesiginčyk su manimi, nes nelaimėsi". Labai neprofesionalu ir arogantiška - just tone it down a bit.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Greisis šaunu kad bandai padėti žmonėms bet pats esi dar junioras ir patarčiau nesisvaidyti apibendrinimais "siauras mąstymas", "griežtai draudžiama", "tinginiai", "nesiginčyk su manimi, nes nelaimėsi". Labai neprofesionalu ir arogantiška - just tone it down a bit.

 

Nesi matęs mano darbų, tad nedrįsčiau vadinti Junior. =] O tas ekrano užfiksavimas buvo tiesiog pavyzdys, nieko asmeniško.

 

Be to, gražus parašas.

 

Asmeniškai negaisčiau tokiems dalykams, kadangi žinių neparodo. :rolleyes:

 

http://image.prntscr.com/image/dcb0eced82394e9f990ec3413717ecaf.png

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ą...