Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?

[es] :: PHP :: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?
(Zaključana tema (lock), by dakipro)

[ Pregleda: 4724 | Odgovora: 16 ] > FB > Twit

Postavi temu

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Milan Kragujevic
Software Engineer

Član broj: 231903
Poruke: 2220
*.dynamic.isp.telekom.rs.

Sajt: https://milankragujevic.c..


+201 Profil

icon Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 10:45 - pre 127 meseci
Skoro sam morao da popravim bagove izazvane novom PHP verzijom u jednoj unknown white-label eshop aplikaciji, i primetio sam, naravno, da se svugde koristi mysql_ api, umesto PDO ili MySQLi.

Moje pitanje je zašto je MySQLi tako komplikovaniji od mysql_ apija?

MySQLi
Code (php):

   /* Create a new mysqli object with database connection parameters */
   $mysqli = new mysql('localhost', 'username', 'password', 'db');

   if(mysqli_connect_errno()) {
      echo "Connection Failed: " . mysqli_connect_errno();
      exit();
   }

   /* Create a prepared statement */
   if($stmt = $mysqli -> prepare("SELECT priv FROM testUsers WHERE username=?
   AND password=?"
)) {

      /* Bind parameters
         s - string, b - blob, i - int, etc */

      $stmt -> bind_param("ss", $user, $pass);

      /* Execute it */
      $stmt -> execute();

      /* Bind results */
      $stmt -> bind_result($result);

      /* Fetch the value */
      $stmt -> fetch();

      echo $user . "'s level of priviledges is " . $result;

      /* Close statement */
      $stmt -> close();
   }

   /* Close connection */
   $mysqli -> close();
 


mysql_ api
Code (php):

   /* Connect to the Database */
   $dbLink = mysql_connect("localhost", "username", "password");

   if (!dbLink) {
      echo 'db link fail';
   }

   /* Select the database */
   mysql_select_db("databaseName");

   /* Escape the variables */
   $user = mysql_real_escape_string($user);
   $pass = mysql_real_escape_string($pass);

   /* Query and get the results */
   $query = "SELECT * FROM testUsers WHERE username='$user' AND
             password='$pass'"
;
   $result = mysql_query($query);

   /* Loop through the results */
   while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
      echo "Username: " . $row["username";
   }
 


Očigledno je da je MySQLi pristup sa prepared statements mnogo komplikovaniji sa mnogo više koda, stoga ne vidim zašto ljudi koji rade na MySQLi APIju nisu pojednostavili to za početnike koji bi da sa proceduralnog mysql_ apija pređu na prepared statements i MySQLi klasu. Očigledno je i da je donji kod isto toliko siguran kao i gornji, stoga većina ljudi koji ne rade sa objektima ne vide svrhu prelaska na MySQLi, iako će mysql_ funkcije bacati Deprecated greške u nekoj novijoj verziji PHPa (verovatno njih nije ni briga jer ne koriste najnovije php verzije i pišu kod sa error_reporting(0); ili malo bolje error_reporting(E_ALL ^ E_NOTICE && E_WARNING);
 
0

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 11:10 - pre 127 meseci
Citat:
(verovatno njih nije ni briga jer ne koriste najnovije php verzije i pišu kod sa error_reporting(0); ili malo bolje error_reporting(E_ALL ^ E_NOTICE && E_WARNING)

Pa niko nikog ne tjera da koristi posljednju verziju PHP-a?
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
0

Milan Kragujevic
Software Engineer

Član broj: 231903
Poruke: 2220
*.dynamic.isp.telekom.rs.

Sajt: https://milankragujevic.c..


+201 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 11:31 - pre 127 meseci
Citat:
Tpojka: Pa niko nikog ne tjera da koristi posljednju verziju PHP-a?

Čemu takva logika? Zašto bi neko ostajao zaglavljen u prošlosti? Zašto ne koristiš Windows 97 ako toliko voliš stare verzije...
U osnovi novije verzije PHPa su modernije i više orjentisane ka objektno orjentisanom programiranju, sigurnije su i mislim da bi svako ko prodaje softver trebao da bude u toku sa najnovijim standardima PHPa. Barem da ih bude svestan, ako ih neće koristiti.
 
+1

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.85-200-249.bkkb.no.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 11:46 - pre 127 meseci
Takva logika je zbog toga sto nije uvek moguce menjati sve zivo. Kako se menjaju verzije softwera menjaju se i alati i nacini koriscenja, ko koristi nove verzije php-a taj ce koristiti i sve sto on nudi, ko je zaglavljen na starom nece menjati ceo legacy projekat samo zato sto je nova verzija php-a izasla.
Pitanje je vise filozofsko, igrom slucaja je vezano za php programiranje ali je problem svuda prisutan
 
0

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 11:49 - pre 127 meseci
Zašto ne koristiš PDO? Meni je bilo lakše da se naviknem na PDO nego mysqli.

Evo najprostijeg mogućeg primera koristeći PDO a imajući u vidu primer koji si ti ostavio:

Code (php):

$DB = new PDO( 'mysql:dbname=dbname;host=localhost', 'user', 'password');

$user = $DB->quote($user);
$pass = $DB->quote($pass);
$sql = "SELECT * FROM testUsers WHERE username={$user} AND password={$pass}";

foreach( $DB->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row ) {
     print_r($row);
     // radi šta god još želiš..
}
 


Ovo iznad je najprostiji vid kreiranja upita. E sad savetujem ti da upite radiš koristeći prepare jer na taj način u potpunosti onemogućavaš sql injection. Evo primera:
Code (php):

$DB = new PDO( 'mysql:dbname=dbname;host=localhost', 'user', 'password');

$query = $DB->prepare("SELECT * FROM testUsers WHERE username=:user AND password=:pass");

if( $query->execute( array( ':user' => $user, ':pass' => $pass ) ) ) {
     foreach( $query->fetchAll(PDO::FETCH_ASSOC) as $row ) {
          print_r($row);
          // radi šta god još želiš..
     }
}
 


Naravno ovaj kod se može dodatno doterati, sve u zavisnosti koliko poznaješ PDO. Ovo je neki najosnovniji kod u ovom obliku imun na SQL injection.

[Ovu poruku je menjao deZio dana 08.10.2013. u 13:04 GMT+1]
 
0

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 12:02 - pre 127 meseci
Citat:
stoga ne vidim zašto ... nisu pojednostavili to za početnike


Ovde ti je osnovna greška u razmišljanju. Stara izreka kaže: "Napravi softver koji je dovoljno jednostavan da ga i budala koristi, pa će ga onda koristiti samo budale!"

Nije bitno koliko je nešto jednostavno za početnike, u svakom poslu kojeg se prihvatiš bićeš prvo početnik. Kasnije ćeš umeti da ceniš ono što je dobro.
 
0

Tpojka
Ratio, Logic

Član broj: 60114
Poruke: 209

ICQ: 491318095


+33 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 12:27 - pre 127 meseci
Ne znam sa kojim dijelom moje logike se ne slažete - odgovor mi je direktno ispratio putanju pitanja sa aspekta citiranog dijela. Više je poput retoričkog pitanja, ali slobodno može i da se zamijeni interpunkcija na kraju.
Ali, ako ga i uzmemo za suštinsko pitanje i kostur mog posta, bez odgovora na isto je prosto nemoguće dati odgovor teme "Zašto su MySQL i PDO tako komplikovani za početnike?".
U protivnom se tema transformiše u temu: "Kako izaći u susret nerazumnim sintaksičkim zahtjevima početnika i zašto - na kraju krajeva - ne bismo to radili ako oni već neće/ne mogu/ne žele da nauče 10 linija koda ili što je najgore/najbolje - samo ga prekopiraju sa zvaničnog sajta".
Nakon ponovnog čitanja, nisam uspio naći malicioznost u sopstvenom načinu zaključivanja na koji se pozivate.
Ne primjećujem da je moja logika dio koji se kosi sa temom.

Ako se neko ne slaže, očekujem da sljedeća tema na HTML-u po uzoru na sestrinsku temu bude:
"Zašto moramo da deklarišemo dokument iako bi početnicima bilo mnogo jednostavnije da ga počinju samo sa <html>"

To je smjer moje logike, svakako.

Ja nazirem, ali nisam odmah inputirao, jedno drugo pitanje: "kako korisnici koji ne(mogu|žele|će) da nauče OOP, koriste i dalje MySQL drajver ali u najnovijoj verziji PHP-a".

Ako je to slučaj, onda nemam odgovor. :D

Šalu na stranu, i dalje ne razumijem svrhu pitanja.
-A Tpojke su Đuro - šta?
-Osnovne jedinice diverzantskih grupa!
 
0

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
89.216.28.*



+44 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 12:44 - pre 127 meseci
Citat:
Zašto ne koristiš PDO? Meni je bilo lakše da se naviknem na PDO nego mysqli.

Apsolutno se slažem. Kada sam počeo da koristim PDO to mi je bilo veliko osveženje, a i veoma brzo se nauči.

Inače, uvek težim da koristim najnoviju verziju software-a, ali to nekad nije moguće tako lako ostvariti iz više razloga.
Kako god, vremenom ćeš sigurno morati da menjaš mysql api, a ignorisanje error_reporting je prilično loše rešenje u bilo kom smislu.
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
0

Milan Kragujevic
Software Engineer

Član broj: 231903
Poruke: 2220
*.dynamic.isp.telekom.rs.

Sajt: https://milankragujevic.c..


+201 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 14:42 - pre 127 meseci
Citat:
deZio:
Zašto ne koristiš PDO? Meni je bilo lakše da se naviknem na PDO nego mysqli.

Evo najprostijeg mogućeg primera koristeći PDO a imajući u vidu primer koji si ti ostavio:

Code (php):

$DB = new PDO( 'mysql:dbname=dbname;host=localhost', 'user', 'password');

$user = $DB->quote($user);
$pass = $DB->quote($pass);
$sql = "SELECT * FROM testUsers WHERE username={$user} AND password={$pass}";

foreach( $DB->query($sql)->fetchAll(PDO::FETCH_ASSOC) as $row ) {
     print_r($row);
     // radi šta god još želiš..
}
 


Ovo iznad je najprostiji vid kreiranja upita. E sad savetujem ti da upite radiš koristeći prepare jer na taj način u potpunosti onemogućavaš sql injection. Evo primera:
Code (php):

$DB = new PDO( 'mysql:dbname=dbname;host=localhost', 'user', 'password');

$query = $DB->prepare("SELECT * FROM testUsers WHERE username=:user AND password=:pass");

if( $query->execute( array( ':user' => $user, ':pass' => $pass ) ) ) {
     foreach( $query->fetchAll(PDO::FETCH_ASSOC) as $row ) {
          print_r($row);
          // radi šta god još želiš..
     }
}
 


Naravno ovaj kod se može dodatno doterati, sve u zavisnosti koliko poznaješ PDO. Ovo je neki najosnovniji kod u ovom obliku imun na SQL injection.

[Ovu poruku je menjao deZio dana 08.10.2013. u 13:04 GMT+1]


Ja već koristim MySQLi, ne radi se o meni već o drugima. Kao što sam napisao na vrhu poruke ja moram da održavam tuđ kod ljudi koji koriste prastaru tehnologiju i mysql_ api.

Citat:
ivan.a: Apsolutno se slažem. Kada sam počeo da koristim PDO to mi je bilo veliko osveženje, a i veoma brzo se nauči.

Inače, uvek težim da koristim najnoviju verziju software-a, ali to nekad nije moguće tako lako ostvariti iz više razloga.
Kako god, vremenom ćeš sigurno morati da menjaš mysql api, a ignorisanje error_reporting je prilično loše rešenje u bilo kom smislu.


Ne planiram da menjam tuđ kod iz prostog razloga jer je užasnog kvaliteta. Što se tiče error_reportinga, znam i zato sam naveo u tom smislu. Ja radim pod Strict Standards.

Citat:
djoka_l: Ovde ti je osnovna greška u razmišljanju. Stara izreka kaže: "Napravi softver koji je dovoljno jednostavan da ga i budala koristi, pa će ga onda koristiti samo budale!"

Nije bitno koliko je nešto jednostavno za početnike, u svakom poslu kojeg se prihvatiš bićeš prvo početnik. Kasnije ćeš umeti da ceniš ono što je dobro.


Da, ali sada meni zadaje problem što *neko* koji je igrom slučaja dobio posao i napravio taj užasni CMS, koristio mysql_ api i kopiranje koda za konekciju u svakom fajlu. Da je MySQLi api jednostavniji, i da imaju jednostavniju foreach funkciju/metodu, više ljudi bi prešli na MySQLi umesto mysql_ funkcija. Stvarno ne vidim razlog zašto bi se ova klasa održavala u stanju u kojem je trenutno kad bi mogla da bude mnogo čistija.

Moj primer
Code (php):

try {
     $con = new MySQLi('host', 'user', 'pass', 'dbname', 'port'); // port je opcionalan
} catch (Exception $e) {
     echo "MySQLi error! ".$e->getMessage();
}
try {
     $query = $con->prepare("SELECT * FROM users WHERE username = :s: AND password = :s:", array("test", "test")); //:s: je string, :i: je integer
     foreach($query->each() as $entry) {
          print_r($entry);
     }
     $totalRows = $query->countRows();
} catch (Exception $e) {
     echo "MySQLi error! ".$e->getMessage();
}
 


PDO je za mene komplikovan zbog načina prosleđivanja podataka metodama sa PDO:: konstantama itd, stoga ga ne koristim.

Važno je da razumete da nije meni problem da naučim MySQLi ili PDO, već je problem drugima. Ja odavno nisam početnik u PHP-u, stoga ne razumem zašto me pitate zašto je meni teško (indirektno pitanje, zapravo).


Dakipro: izmenje provokativni deo poruke, malo profesionalizma i postovanja prema kolegama ubuduce

[Ovu poruku je menjao dakipro dana 09.10.2013. u 11:09 GMT+1]
 
0

xgrep

Član broj: 315623
Poruke: 5
*.guilhem.org.



+5 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?08.10.2013. u 22:49 - pre 127 meseci
A šta tebi pravi problem da napraviš svoj database abstraction layer ako misliš da možeš bolje? Ili da uzmeš neki postojeći, eventualno naslediš i modufikuješ?
Takve stvari nećeš moći sa proceduralno napisanim kodom i to je jedan od razloga zašto je to što savetuješ u stvari pogrešno i mnogo teže.
 
+1

bantu

Član broj: 38670
Poruke: 305
87.250.105.*



+27 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?09.10.2013. u 10:28 - pre 127 meseci
Ako se ne varam, mysqli ima procedural style interface tako da se sve što si napisao sa mysql_ konektorom možeš vrlo lako prepraviti tako što ćeš da dodaš "i" poslije mysql u nazivu funkcije.

Code:

mysql_connect -> mysqli_connect
mysql_select_db -> mysqli_select_db 
mysql_real_escape_string -> mysqli_real_escape_string
mysql_query -> mysqli_query
mysql_fetch_array -> mysqli_fetch_array


Pokušaj možda uspiješ i naslijepo Edit -> Replace mysql_ to mysqli_
I onda možeš da koristiš noviju verziju PHP-a bez da se cimaš sa OOP i prepared statements, ta da!
 
0

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1122
*.dynamic.sbb.rs.

Sajt: www.gvozden.info


+68 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 19:01 - pre 127 meseci
^ ta da, a sta sa parametrima?
 
0

bantu

Član broj: 38670
Poruke: 305
..able.dyn.broadband.blic.net.



+27 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 20:38 - pre 127 meseci
Pazi, ipak neki trud treba da se ulozi. Ja sam malo karikirao situaciju u postu iznad. Ako je aplukacija iole pisana smisleno odnosno da se logika za komunikaciju sa bazom grupisala u set funkcija/fajlova onda to nebi smjelo da predstavlja problem. Evo koliko vidim ima i alata koji automatizuju taj posao: https://wikis.oracle.com/display/mysql/Converting+to+MySQLi

Ono šo sam htio da kažem je da ukoliko je neko naviako na fukcije i mysql može to da nastavi da radi na gotovo pa identičan način.
 
0

Milan Kragujevic
Software Engineer

Član broj: 231903
Poruke: 2220
*.dynamic.isp.telekom.rs.

Sajt: https://milankragujevic.c..


+201 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 20:46 - pre 127 meseci
Inače, evo koda na kome trebam da radim...
Code (php):

<?php include_once('head_g.php'); ?>

<?php include_once('head_d.php'); ?>

<?php include_once('header.php'); ?>

<?php include_once('levo.php'); ?>

<?php include_once('desno.php'); ?>

<div id="sredina">

<?
if($_GET[idkat2] or $_GET[idkat3]) $vid="style='display:block;'"; else $vid="style='display:none;'";
?>

<div class="sortiranje" <?=$vid?>>

<?
$ein=count(explode(",",$in));
if($_GET[idkat1] and ($_GET[idkat2] or $_GET[idkat3])) {
?>

<?=$_GET[tip]?>
<div style="float:left; width:148px; height:30px; border-right:1px solid #cbcbcb; margin-top:7px; padding-left:19px;">
<?
if($_GET[tdc]) $tdc=explode("-",$_GET[tdc]);
$tiki=$tdc[0];
if(preg_match("/Black/",$tdc[0])) $tdc[0]="Black & Decker_72";
$fir=explode("_",$tdc[0]);
$dati=$tdc[1];
$ceni=$tdc[2];
?>

<strong>Izaberi proizvodjača:</strong>

<select name='naslov1' style='width:125px;' onchange="prikazis(this.options[this.selectedIndex].value)">

<?
if($tdc[1]!="" or $tdc[2]!=""){
$fis="-$tdc[1]-$tdc[2]/"; $qus=$queryst1;}
else {$fis="/";$qus=$queryst11;}
?>

<option value='<?=$qus?><?=$fis?>'>Svi proizvodjači</option>

<?
$sf=mysql_query("SELECT id,ime FROM firme WHERE id IN (SELECT idfirme FROM proizvodi_new WHERE katid IN($in))");
while($sf1=mysql_fetch_assoc($sf))
{
if($fir[1]==$sf1[id]) $el="SELECTED"; else $el="";
echo "<option value="$querys$sf1[ime]_$sf1[id]-$dati-$ceni/" $el>$sf1[ime]</option>";
}
?>

</select>

</div>

<div style="float:left; width:198px; height:30px; border-right:1px solid #cbcbcb; margin-top:7px; padding-left:18px;">

<strong>Sortiraj po ceni:</strong>

<select name='datum' style='width:165px;' onchange="prikazis(this.options[this.selectedIndex].value)">

<?
if($tdc[0]!="" or $tdc[2]!=""){
$fis="$tdc[0]--$tdc[2]/";$qus=$queryst1;}
else {$fis="/";$qus=$queryst11;}
?>
<!-- <option value='<?=$qus?><?=$fis?>'>Po nazivu A->Z</option> -->
<option value=''>-- odaberite --</option>
<?
if($_GET[tip]) $ti="&tip=$_GET[tip]"; else $ti="";
if($_GET[cena]) $cen="&cena=$_GET[cena]"; else $cen="";
$ti_cen=$ti.$cen;
if($tdc[1]==1) $sd1="SELECTED"; else $sd1="";
if($tdc[1]==2) $sd2="SELECTED"; else $sd2="";
if($tdc[1]==3) $sd3="SELECTED"; else $sd3="";
if($tdc[1]==4) $sd4="SELECTED"; else $sd4="";
if($tdc[1]==5) $sd5="SELECTED"; else $sd5="";
if($tdc[1]==6) $sd6="SELECTED"; else $sd6="";
if($tdc[1]==7) $sd7="SELECTED"; else $sd7="";
if($tdc[1]==8) $sd8="SELECTED"; else $sd8="";
?>
<!--
<option value="<?=$querys?><?=$tiki?>-1-<?=$ceni?>/" <?=$sd1?>>Opadajuće po datumu</option>

<option value="<?=$querys?><?=$tiki?>-2-<?=$ceni?>/" <?=$sd2?>>Rastuće po datumu</option>
-->
<option value="<?=$querys?><?=$tiki?>-4-<?=$ceni?>/" <?=$sd4?>>Rastuće po ceni</option>

<option value="<?=$querys?><?=$tiki?>-3-<?=$ceni?>/" <?=$sd3?>>Opadajuće po ceni</option>
<!--
<option value="<?=$querys?><?=$tiki?>-5-<?=$ceni?>/" <?=$sd5?>>Po nazivu A->Z</option>

<option value="<?=$querys?><?=$tiki?>-6-<?=$ceni?>/" <?=$sd6?>>Po nazivu Z->A</option>

<option value="<?=$querys?><?=$tiki?>-7-<?=$ceni?>/" <?=$sd7?>>Po proizvodjacu A->Z</option>

<option value="<?=$querys?><?=$tiki?>-8-<?=$ceni?>/" <?=$sd8?>>Po proizvodjacu Z->A</option>
-->
</select>

</div>

<div style="float:left; height:30px; margin-top:7px; padding-left:19px;">

<strong>Prikaži:</strong>

<select name='cena' style='width:110px;' onchange="prikazis(this.options[this.selectedIndex].value)">

<?

if($tdc[0]!="" or $tdc[1]!=""){

$fis="$tdc[0]-$tdc[1]-/";$qus=$queryst1;}

else {$fis="/";$qus=$queryst11;}

?>

<option value='<?=$qus?><?=$fis?>'>9 proizvoda</option>

<?

if($_GET[tip]) $ti="&tip=$_GET[tip]"; else $ti="";

if($_GET[datum]) $dat="&datum=$_GET[datum]"; else $dat="";

$ti_dat=$ti.$dat;

if($tdc[2]==3) $sc1="SELECTED"; else

if($tdc[2]==6) $sc2="SELECTED"; else

if($tdc[2]==12) $sc3="SELECTED"; else

if($tdc[2]==24) $sc4="SELECTED"; else

if($tdc[2]==48) $sc5="SELECTED"; else

{ $sc1="SELECTED"; $sc2=""; $sc3=""; $sc4=""; $sc5="";}

?>

<option value="<?=$querys?><?=$tiki?>-<?=$dati?>-6/" <?=$sc2?>>6 proizvoda</option>

<option value="<?=$querys?><?=$tiki?>-<?=$dati?>-12/" <?=$sc3?>>12 proizvoda</option>

<option value="<?=$querys?><?=$tiki?>-<?=$dati?>-24/" <?=$sc4?>>24 proizvoda</option>

<option value="<?=$querys?><?=$tiki?>-<?=$dati?>-48/" <?=$sc5?>>48 proizvoda</option>

</select>

</div>

<!-- end sortiranje --></div>

<script>

function prikazis(page)

{

var ura=page;

window.location=ura

}

</script>

<?

//if(($_GET[idkat2] or $_GET[idkat1]) and $_GET[idkat3]){echo "test";

if($_GET[idkat2]) $ides=$idkats2; else $ides=$idkats1;

$kk=mysql_query("SELECT * FROM kateg_proizvoda_new WHERE id_parent=$ides");

if(mysql_num_rows($kk)>0){

?>

<img src="slicice/pozadina-proizvodi-l.gif" style="float:left;" />

<div style="width:auto; height:15px; float:left; background:url(slicice/pozadina-proizvodi-s.gif) repeat-x;padding:2px 0 3px 0px;">

<?

//if($_GET[idkat1] and ($_GET[idkat2] or $_GET[idkat3])) {

echo kategorije3($idkats,$patH);

?>

</div>

<img src="slicice/pozadina-proizvodi-d.gif" style="float:left;" />

<div style="width:535px;min-height:80px;border:1px solid #cbcbcb; float:left; padding:5px;">

<?

while($kk1=mysql_fetch_assoc($kk))

{

$ci=mysql_query("SELECT * FROM proizvodi_new WHERE katid=$kk1[id] AND akt='Y'");

$ci1=mysql_num_rows($ci);

if($_GET[idkat2]) $idv2="$_GET[idkat2]/"; else $idv2="";

echo "<a href='$patH/proizvodi/$_GET[idkat1]/$idv2$kk1[ime]__$kk1[id]/' class='sc1' style='color:#0087c5;font-size:11px;margin-right:40px;'>$kk1[ime] ($ci1)&raquo;</a> ";

}

$is= mysql_num_rows($kk);

?>

</div>

<?

}



//}

// }

}

if($_GET[idkat1] and !$_GET[idkat2] and !$_GET[idkat3])

echo "</div>";

?>



<?

if(($is>0 and !$_GET[idkat3]) or ($_GET[idkat1] and !$_GET[idkat2] and !$_GET[idkat3])){

?>

<div style="width:398px; height:24px; background:url(<?=$patH?>/slicice/proizvodi.png); margin:5px 0 10px 0; padding:10px 0 0 150px; font-weight:bold; float:left;">

<div style='padding-left:10px;'>

<? echo kategorije3($idkats,$patH); ?>

</div>

</div>

<?

}else{

?>

<div style="width:398px; height:24px; background:url(<?=$patH?>/slicice/proizvodi1.png); margin:5px 0 10px 0; padding:10px 0 0 150px; font-weight:bold; float:left;">

<div style='padding-left:10px;'>

<? echo kategorije3($idkats,$patH); ?>

</div>

</div>

<?

}

?>

<table border="0" width="99%" cellspacing="0" cellpadding="0">

<tr>

<!-- body_text //-->

<td width="100%" valign="top">

<?

if($_GET[idkat2] or $_GET[idkat3]) $nastr=9; else $nastr=6;

if($tdc[2]) $ByPage1=$tdc[2]; else $ByPage1=$nastr;

if($_GET[link2]) $Start1=$_GET[link2]; else $Start1=0;

if($tdc[0]) $idfirme=" AND proizvodi_new.idfirme='$fir[1]'";

if($tdc[1]==1) $orderby="ORDER BY proizvodi_new.id DESC"; else

if($tdc[1]==2) $orderby="ORDER BY proizvodi_new.id ASC"; else

if($tdc[1]==3) $orderby="ORDER BY trenutna_cena DESC"; else

if($tdc[1]==4)

$orderby="ORDER BY trenutna_cena ASC";

//$orderby=" ORDER BY cena1=if(cena1>cena,-1,-1 ) ASC, cena ASC";

else

if($tdc[1]==5) $orderby="ORDER BY proizvodi_new.naslov ASC"; else

if($tdc[1]==6) $orderby="ORDER BY proizvodi_new.naslov DESC"; else

if($tdc[1]==7) $orderby="ORDER BY firme.ime ASC"; else

if($tdc[1]==8) $orderby="ORDER BY firme.ime DESC";

else $orderby="ORDER BY proizvodi_new.naslov ASC";

//$pr=mysql_query("SELECT * FROM proizvodi_new WHERE akt='Y' AND katid IN ($in) $idfirme $orderby LIMIT $Start1,$ByPage1");

if($ein>1){

$pr=mysql_query("SELECT*, IFNULL(cena1, cena) AS trenutna_cena,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.katid IN ($in) $idfirme AND idtip LIKE '%-2-%' $orderby LIMIT $Start1,$ByPage1");

if(mysql_num_rows($pr)==0)

{

$pr=mysql_query("SELECT naslov,naslov1,opis,slika1,cena,cena1,nalageru, idtip,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.cena1>0 AND proizvodi_new.katid IN ($in) $idfirme ORDER BY RAND() LIMIT 6");

}

$ukup=mysql_query("SELECT*, IFNULL(cena1, cena) AS trenutna_cena,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.katid IN ($in) $idfirme AND idtip LIKE '%-2-%'");

if(mysql_num_rows($pr)==0)
{
echo "<div style='width:100%;margin-top:30px;text-align:center;padding-bottom:30px;font-size:14px;'>Trenutno nema akcija u ovoj kategoriji!</div>";
}

}

else

//$pr=mysql_query("SELECT naslov,naslov1,opis,slika1,cena,cena1,nalageru, idtip,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.katid IN ($in) $idfirme $orderby LIMIT $Start1,$ByPage1");

{

$pr=mysql_query("SELECT *, IFNULL(cena1, cena) AS trenutna_cena,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.katid IN ($in) $idfirme $orderby LIMIT $Start1,$ByPage1");

$ukup=mysql_query("SELECT *, IFNULL(cena1, cena) AS trenutna_cena,proizvodi_new.id as 'idd' FROM proizvodi_new WHERE proizvodi_new.akt='Y' AND proizvodi_new.katid IN ($in) $idfirme");

}

$br_prik=mysql_num_rows($pr);

$n=0;

while($pr1=mysql_fetch_assoc($pr)){
if($pr1[id]=="" and $pr1[naslov1]=="panasonic_klima_cu_uw12gke") $pr1[id]=4204;
$b=$n%3;

if($b==0 and $n>0)

echo "<div style='float:left;width:100%;height:10px;'></div>";

$cen= format_cene($pr1[id]);

$cene=explode("-",$cen);

$akc=preg_match("/-2-/",$pr1[idtip]);

$best=preg_match("/-6-/",$pr1[idtip]);

?>

<div class="prikaz">

<div style="text-align:center; width:170px; height:155px; margin-top:5px;">

<a href='<?=$patH?>/proizvodi_info/<? echo "$pr1[naslov1]__$pr1[id]/"; ?>'>

<?

$fi=mysql_query("SELECT * FROM firme WHERE id='$pr1[idfirme]'");

$fi1=mysql_fetch_array($fi);

$img=image_size1($higs,'',$pr1[slika1],"images");

$im=explode("-",$img);

echo "<img src='$patH/images/$pr1[slika1]' border='0' alt='".stripslashes("$pr1[naslov]")."' title='".stripslashes("$pr1[naslov]")."' width='$im[0]' height='$im[1]' /></a>";

//echo "<img src='$patH/thumb/$pr1[slika1]/$im[0]/150/' border='0' alt='".stripslashes("$pr1[naslov]")."' title='".stripslashes("$pr1[naslov]")."' width='$im[0]' height='150'></a>";

if($pr1[nalageru]==0)

echo "<span style='color:red;font-weight:bold;'>NEMA NA LAGERU</span>";

else echo "";

?>

</div>

<div style="text-align:center; padding:5px; width:160px; height:40px;">

<a class="ml5" href="<?=$patH?>/proizvodi_info/<? echo "$pr1[naslov1]__$pr1[id]/";?>">

<?

//echo stripslashes("$fi1[ime]")." ".stripslashes("$pr1[naslov]");

echo stripslashes("$pr1[naslov]");

?>

</a>

</div>

<div class="sc2" style="vertical-align:top; height:35px; margin-left:10px;"><!--div za cenu-->



<?

if($cene[1]>0){

?>

<s style="color:#7F7F7F; font-size:9px">

<?

}

echo $cene[0];

?>

<span class="currency_symbol"><?=$din?></span>

<?

if($cene[1]>0){

?>

</s>

<span style="color: #ff0000">

<span class="currency_symbol"></span>

<?

echo $cene[1];

?>

<span class="currency_symbol"><?=$din?></span></span>

<?

}

?>

</div>



<div style="margin-left:5px; float:left; height:35px;">

<a href="javascript:void(0)" onclick="displaySubs(<?=$pr1[id]?>,'yes','<?=$patH?>',this);" onmouseout="hides('info');">

<img src="<?=$patH?>/images/buttons/dodaj.gif" border="0" alt="Kupi belu tehniku" title="Kupovina bele tehnike" width="98" height="20" /></a>

</div>

<?

if($best==1){

?>

<img src='<?=$patH?>/slicice/best_bay.gif' width='51' height='40' class='akcija_gif' />

<?

}else

if($cene[1]>0 and $akc==1){

?>

<img src='<?=$patH?>/slicice/akcija.gif' width='51' height='40' class='akcija_gif' />

<?

}

?>

<!-- end prikaz --></div>



<?

$n++;

}

?>

<div id='info' ><div style='padding:3px;'>Prebačno u korpu</div></div>

</td>

<!-- body_text_eof //-->

</tr>

</table>

<?

$br_zapisa=mysql_num_rows($ukup);

?>

<div class="smallText" style="float:left; padding-top:8px;">

<?

if($_GET[link2]==0) $jed=1; else $jed=0;

$od=$_GET[link2]+$jed;

$do=$br_prik+$_GET[link2];

echo "Prikazano <b>$od</b> - <b>$do</b> (od ukupno <b>$br_zapisa</b> proizvoda)";

?>

</div>

<div class="smallText" style="float:right;">

<?

include("$page_path2/pagin.php");

if($_GET[tdc]) $tdce="$tiki-$dati-$ceni"; else $tdce="";

if($_GET[idkat1] and ($_GET[idkat2] or $_GET[idkat3] or $ein>1))

pagin($br_zapisa,$ByPage1,"$_GET[link2]","$querys$tdce/");

?>

</div>



<div style="width:548px; height:20px; background:url(<?=$patH?>/slicice/gradient.gif) bottom no-repeat;"></div>

<?

$on=mysql_query("SELECT * FROM strane WHERE id_page='".idpages("azuriranje.php","slo")."' AND akt='Y'");

while($on1=mysql_fetch_assoc($on))

{

echo "";

if(strlen($on1[naslov])>0)

echo "<span >$on1[naslov]</span>";

opis(1,$on1[opis],"","","");

echo "";

read_images($on1[id],$idpage,"idstrane",184,177,"$on1[naslov]");

}

?>



<!-- end #sredina --></div>

<br class="clearfloat" />

<?php include_once('footer.php'); ?>
 


I kažite mi posle da se pravim pametan i da sam razmažen....

 
0

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.84-48-89.nextgentel.com.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 22:22 - pre 127 meseci
Od tebe kao pokretaca teme (neko sa pitanjem/problemom) se najvise ocekuje da diskutujes on-topic, ovaj poslenji post mi deluje vise kao jadanje prijatelju nego sto tebe zaista zanima naslov teme koji si postavio "Zašto je MySQLi/PDO tako komplikovan za početnike?"
Po meni postavljeni kod (a uskoro i tema) uopste nema veze sa nacinom komunikacije sa bazom niti sa time da li ga je pisao pocetnik, jednostavno je to legacy kod koji si nasledio, i to ce ti se desavati mnogo vise nego sto mislis - aksiom. Da ne izvlacim unapred zakljucke unapred pa da kazem da upravo ti zvucis kao pocetnik tako sto izdizes sebe gazeci druge i time sto objavljujes tudji komercijalni kod koji nije open source (sto nije bas profesionalno), ostavicu temu jos neko vreme otvorenu a u nadi da ces nastaviti diskusiju on-topic. Ali ako tema i dalje ne bude imala svrhu, onda jednostavno nema svrhu.
 
0

Milan Kragujevic
Software Engineer

Član broj: 231903
Poruke: 2220
*.dynamic.isp.telekom.rs.

Sajt: https://milankragujevic.c..


+201 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 22:39 - pre 127 meseci
Kako god, stvarno ne razumem u čemu je vaš problem, pitao sam na samom početku zašto PDO i MySQLi api mora da bude tako komplikovan za početnike i svi koji su odgovorili su mi objašnjavali kako nije teško da naučim, dok je sam cilj mog pitanja da li postoji neki poseban razlog zašto to još uvek nije pojednostavljeno kako bi encourage ljude da koriste modernije i sigurnije APIje. Stoga što se mene tiče niko ništa nije ni odgovorio. A ta moja predposlednja poruka sa kodom je odgovor na
Citat:
> (Milan Kragujevic: /p3354550 ): Da, ali sada meni zadaje problem što neki idiot, koji je igrom slučaja dobio posao i napravio taj užasni CMS, koristio mysql_ api i kopiranje koda za konekciju u svakom fajlu.

Ja bih ti za ovo zabranio pristup. Kako te bre nije sramota? Juče si otkrio PHP pa misliš da si posisao svu pamet?

Akp to se ne sviđa iči ne umeš onda nemoj da prihvataš posao a ne dapjuješ nekoga zato što ti se ne sviđa kako je napravio program. Otkud ti znaš kad je on to napravio i zašto je baš tako pravio.

Na kraju krajeva to je samo pitanje navika, i stila, a svakako nije pogrešno. Pogrešan si samo ti u celoj toj priči.


Ako je to navika i stil onda sam ja leteće špageti čudovište. Mislim stvarno, $_GET[nesto]

Ili recimo ovo...

Code (php):

while($pr1=mysql_fetch_assoc($pr)){
if($pr1[id]=="" and $pr1[naslov1]=="panasonic_klima_cu_uw12gke") $pr1[id]=4204;
$b=$n%3;


Hardkodovana vrednost u kod za neku glupost koju ne razumem uopšte. Tako se ne popravljaju bagovi!

upravo ti zvucis kao pocetnik tako sto izdizes sebe gazeci druge - Hmm.. What? Ne verujem da su početnici pisali SOCK proksije u phpu ili klonove Opera Mini server-side processing enginea.

i time sto objavljujes tudji komercijalni kod koji nije open source (sto nije bas profesionalno), - Još jedno What. Taj kod je beskoristan bez drugih delova, a osim toga toliko niskog kvaliteta je da ću morati da prepišem celu aplikaciju. Ne radi se samo o meni, gomile sajtova bivaju hakovani putem SQLinjection, a ta metoda bi trebalo već da je iskorenjena/zastarela, pošto očigledno imamo prepared statements i stored procedures ili čak nekoliko miliona escape funkcija, od kojih nijedna ne radi, ali nisu uklonjene ili direktno popravljene zbog backwards kompatibilnosti, kao recimo mysql_escape_string i mysql_real_escape_string
 
0

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
*.84-48-89.nextgentel.com.

Sajt: norway.dakipro.com


+190 Profil

icon Re: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?10.10.2013. u 22:53 - pre 127 meseci
Problem je sto mi ne razumemo sta je ustvari tvoj problem od samog pocetka teme. Novi alati i sistemi se ne prave sa zahtevom "da ne bude komplikovano za pocetnike" na prvom mestu vec da prvo rese probleme koji su prethodni imali, i to je vec napisano medju prvim odgovorima, ako ti se taj odgovor ne svidja mozes i sam pogledati na netu kako otprilike ide razvojni put alata i koji se zahtevi postavljaju i koji problemi resavaju.

Poruka koju si citirao, nebitno da li si izvukao pouku, je obrisana a kako vidim ni moju poruku nisi shvatio. Probaj ubuduce malo objektivnije da pises, bez previse emocija, jeste malo teze ali bude ozbiljnije.
 
0

[es] :: PHP :: Opinion: Zašto je MySQLi/PDO tako komplikovan za početnike?
(Zaključana tema (lock), by dakipro)

[ Pregleda: 4724 | Odgovora: 16 ] > FB > Twit

Postavi temu

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.