Jump to content
php.lv forumi

Formu apstrāde un objekti


NiTrino

Recommended Posts

1)

if (isset($_POST['forma'])) {
$lauks1 = mysql_real_escape_string($_POST['lauks1']);
$lauks2 = mysql_real_escape_string($_POST['lauks2']);
$error = false;

if (!$lauks1) {
	$error = true;
}

if (!$error) {
	$result = $Objekts->izsauktMetodi($lauks1, $lauks2);
}
}

 

2)

if (isset($_POST['forma'])) {
$result = $Objekts->izsauktMetodi($_POST); // metode veic eskeiposhanu, kljudu paarbaudi
}

 

3)

if (isset($_POST['forma'])) {
$lauks1 = mysql_real_escape_string($_POST['lauks1']);
$lauks2 = mysql_real_escape_string($_POST['lauks2']);

$result = $Objekts->izsauktMetodi($lauks1, $lauks2); // metode veic kljudu paarbaudi
}

 

Kurš no šiem liekas pārskatāmāks, saprotamāks, praktiskāks? Savi varianti arī vēlami! :)

Link to comment
Share on other sites

Viskrutāk jau butu nerakstīt manuāli to lauku pārbaudes, bet automatizēt to visu šādi:

$fields = array("lauks1" => array("type" => "integer"),
			"lauks2" => array("type" => "string", "validate" => "\w+@\w+.\w+"),
			"lauks3" => array("type" => "string", "default" => "index"),
		   ); 

$errroMsg = validate_fields($fields, $_POST);

if (count($errorMsg) == 0)
{
// tālāk jau droši izmantojam $_POST["lauks1"] bez aizspriedumiem
...
}
else
{
// parādi $errorMsg
...
}

Attiecīgi validate_fields metode automātiski izskries cauri $fields masīvam un pārbaudīs lauku tipus, pielietos attiecīgu konvertāciju (integeriem - intval, string - escape_string), piešķirs defaultās vērtības, utt.. pēc vajadzības. Un pēc tam varēsi brīvi lietot datus no $_POST nešauboties, ka tie tur nav, ir slikti, vai tml.

Link to comment
Share on other sites

Es rakstu šādi:

POST datus pārbaudu pirms padošanas klasei, jo kļūdu paziņojumus varētu vajadzēt padot dažādās valodās. Klasei padodu neeskeipotus, jo, klasi atkārtoti izmantojot, var aizmirsties eskeipot.

 

if (isset($_POST['forma'])) {
$error = false;

if (!$_POST['lauks1']) {
	$error = true;
}

if (!$error) {
	$result = $Objekts->izsauktMetodi($_POST['lauks1'], $_POST['lauks2']);
}
}

Link to comment
Share on other sites

1. variants, bet eskeipošanu pilnīgi noteikti ir jāveic tuvāk DB darbībām, ja vien tu taisies virzīties MVC virzienā. Tā jau ir darbība, kas attiecas uz datu saglabāšanu datuāzē, nevis kontrolieri.

 

Ja par koda strukturēšanu, tad man liekas jēdzīgs šāds variants

 

// php daļa
$allowedActions = array('step1', 'step2', 'processform', 'intro');
$step = (!empty($_REQUEST['action']) ? $_REQUEST['action'] : '');
$ivrec = new MyController();
if (in_array($step, $allowedActions)){
	$ivrec->$step();
}else{
	$ivrec->intro();
}

+

Class MyController{
function step1(){
}
function step2(){
}
function processform(){
	// post datu apstrāde, vajadzīgie db update
}
function intro(){
}

// HTML daļa
<form method="post">
<input type="hidden" name="action" value="processform" />
</form>

Link to comment
Share on other sites

Kontrolerī veicu ieejošu datu validāciju, taču eskeipošana notiek db klasē, tieši pirms kverija.

+ nav iespējams aizmirst eskeipot datus - ielaist caurumus;

+ par eiskoeipošanu nav jādomā, tā notiek automātiski

- var nākties eskeipot datus vairākas reizes, bet tā kā datu eskeipošanai seko kverijs un šis kverijs aizņem par vairākām kārtām vairāk skaitļošanas resursu, nekā skaitļošana, tad tas ir sīkums.

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