Jump to content
php.lv forumi

Kāda jēga pārdefinēt mainīgos?


daGrevis

Recommended Posts

Daži skripti sākās apmēram tā...

 

$x = mysql_real_escape_string( $_POST['x'] );
$y = $_GET['y'];


if( isSet( $x ) ) {

mysql_query("

	SELECT `{$x}`
	FROM `z`

") or exit( mysql_error() );

}

 

Es rakstu tā un domāju, ka tā ir labāk. xD

 

if( isSet( $_POST['x'] ) ) {

mysql_query("

	SELECT `" . mysql_real_escape_string( $_POST['x'] ) . "`
	FROM `z`

") or exit( mysql_error() );

}

 

Galīgi neko "nerubīju"? xD xD

Link to comment
Share on other sites

Jo vairāk koda, jo krutāks programmētājs!

 

Šādos gadījumos papildus mainīgie protams nav vajadzīgi. Bet gadījumos kad ar POST[]/GET[] vērtībām tiks veiktas kaut kādas operācijas, labākai koda lasāmībai manuprāt labāk pieņemt ka viņi ir konstantes un izveidot kopijas.

 

$_POST['a']*=5; //nafig

$a=$_POST['a'];$a*=5; //labais

Link to comment
Share on other sites

Normālos gadījumos $_POST, $_GET masīvus izmanto tikai lai "izņemtu" datus.

 

$text = $_POST['text'];

$text = funkcija($text);

$text = funkcija1($text);

$text = funkcija2($text);

 

Otrkārt, $text ir vieglāk uzrakstīt nekā $_POST['text'] :)

Link to comment
Share on other sites

Ar to likšanu "pa taisno" var uzkāpt uz grābekļa diezgan ātri.Cik pašam tā nav bijis,ka,uzskatot,ka nekādas papildus darbības ar POST datiem vajadzīgas nebūs,tas tiek vienkārši ar visu validāciju iekš kverija iemests.Paiet laiciņš,un kodam savajagās kādus uzlabojumus,un tad "ai,nu bet tur jau nebūs vajadzības" sāk atspēlēties,kad nākas no katra kverija to post atkal ķeksēt ārā,un definēt ar visām apstrādēm jau sākumā,ko būtu varējis izdarīt jau pirmajā reizē.Otrs tāds pats grābeklis ir {} nelietošana aiz if,domājot ka tur jau ar to 1 darbību mūžam pietiks tajā vietā :)

Link to comment
Share on other sites

vienkārš princips, kurš atvieglo dzīvi, ir vienmēr (ar to domājot 100 gadījumus no 100) likt figūriekavas aiz if.

webā tas sīkums, bet programmējot lidmašīnas, tas var nebūt tāds sīkums

 

btw, viena simtmiljonu kosmosa misija nojuka dēļ viena nepareiza cipara kodā. kļūda atklājās tad, kad pēc dažiem gadiem zondei bija jāsāk kaut kas darīt, bet nekas nenotika :D

Link to comment
Share on other sites

Tāpēc, kā kods

"SELECT `" . mysql_real_escape_string( $_POST['x'] ) . "`,`" . mysql_real_escape_string( $_POST['y'] ) . "`,`" . mysql_real_escape_string( $_POST['z'] ) . "`,`" . mysql_real_escape_string( $_POST['a'] ) . "`,`" . mysql_real_escape_string( $_POST['b'] ) . "`,`" . mysql_real_escape_string( $_POST['c'] ) . "`,`" . mysql_real_escape_string( $_POST['d'] ) . "`
               FROM `z` WHERE id = `" . mysql_real_escape_string( $_POST['id'] ) . "` "

Nav īpaši lasams.

Edited by Леший
Link to comment
Share on other sites

Īsti negribu iedziļināties saturā, bet par šo gan ierunāšos..

 

 

$x = mysql_real_escape_string( $_POST['x'] );
$y = $_GET['y'];

if( isSet( $x ) ) { // Wtf? Sho tu tak jau define, kapec japarbauda? 
       mysql_query("
               SELECT `{$x}`
               FROM `z`

       ") or exit( mysql_error() );

Link to comment
Share on other sites

1) Iesaku izmantot MVC paternu aplikācijas strūktūras būvēšanai

2) Piebūvēt klāt automātisku ievaddatu validāciju, kur validāciju nevis programmē, bet drīzāk deklarē.

Piemērs, kur tiek izsaukta AjaxController-a index action-s addComment. Tajā pašā klasē deklarējam kādi ievaddati drīkst nākt requestā un kādā formā tiem jābūt. Var sataisīt, ka pie nepareiziem datiem requestu pārtrauc vai var sataisīt callback funkcijas, kuras atgriež kļūdu paziņojumus.

Deklarējam visu stāvokli (ielogojies lietotājs, post-a saturs) kādam jābūt, lai tālāk izpildītu action-a metodi un rakstam vienkāršu metodi. Viss ir labi pārskatām, nekādu lieku mainīgo. Varam pat iebūvēt, ka tiek detektēti nesankcionēti mainīgie POST-ā un reģistrēt urķēšanas mēģinājumu.

class Index extends AjaxController{
 public addComment_input=array(
   "logged"=>true,
   "post"=>array(
     "aid"=>array("type"=>"int","min"=>1), \\article id
     "text"=>array("type"=>"text","min"=>20,"max"=>500,"extra"=>"htmlpurifier")
   )
 );
 function addComment($input){    
   $a=new Comment();
   $a['aid']=$input['aid'];
   $a['text']=$input['text'];
   $a['uid']=LoggedUser->getID();
   $a->insert();
   DB::commit();
 }
}

3) Izmantot kādu datubāzes abstrakcijas slāni, piem., ORM vai izmantot PDO, vai izmantot savas funkcijas, kurās padodot parametrus tās tiek automātiski eskeipotas.

Edited by codez
Link to comment
Share on other sites

Īsti negribu iedziļināties saturā, bet par šo gan ierunāšos..

 

 

$x = mysql_real_escape_string( $_POST['x'] );
$y = $_GET['y'];

if( isSet( $x ) ) { // Wtf? Sho tu tak jau define, kapec japarbauda? 
       mysql_query("
               SELECT `{$x}`
               FROM `z`

       ") or exit( mysql_error() );

 

Pilnīgi neloģisks kods, kad tika rakstīts tikai, lai parādītu, par ko ir runa. Protams, ka isSet() tur loģiski nevajag. xD

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
×
×
  • Create New...