AJAX и PHP

ivo75

Registered
Използвам AJAX и PHP за зареждане на данни след избор на стойност от комбобокс ето така: http://www.w3schools.com/php/php_ajax_database.asp

има ли друг начин "по-модерен", че този начин е от 5-6 години най-малко?
 
Разбира се.

Зареждаш си jQuery библиотеката.

HTML:
<script type="text/javascript" src="./jquery.js"></script>

Естествено файлът jquery.js трябва да е наличен в дадената директория. След това просто използваш следния фасулски скрипт.

[js]var formData = $("#some-form").serializeArray(); // пакетираш полетата на дадената форма във формат за изпращане на POST заявка

$.ajax({
type: "POST",
url: "request.php",
data: formData
}).done(function(response) {

// обработваш върнатите данни от PHP скрипта, които се съдържат в променливата response

});[/js]

ПРОМЯНА

Иначе в PHP скрипта, просто използвай PDO, или MySQLi за боравене с базата данни, защото mysql_xxx функциите са много остарели и имат ниско ниво на сигурност, за разлика от тези две PHP разширения.
 
Да кажем, че е достатъчно фатално.

В Prepared Statements е цялата работа. Доста теми са пускани относно това и е обяснявано защо е по-добре да се ползват новите дайвъри.
По-горе имаше тема за сигурност, може и там да намерите подробен отговор относно това.
 
Ако ще се прави нов скрипт/сайт хубаво е да е на новата "технология" , но ако е стар и не се обнови но е добре защитен няма да е фатално.
IMO :)
 
Зависи. Например mysql extension-a за php спира да се поддържа и ако хостинга се ъпдейтне на нова версия на php-то, ще почнат да излизат разни warning-и. It depends де, щото warning-a може да е спрян от конфигурацията по дифоулт.
 
stoqnski каза:
ivo75 каза:
Толкова ли е фатално ако използвам MySQL, a не MySQLi
и мен ме интересува
Може да бъде и фатално, ако не използваш mysql_xxx функциите правилно. При тях трябва задължително да провериш всички данни, които се подават със заявката към базата данни. Трябва да използваш много функции, като preg_match(), strlen(), ctype_alpha(), ctype_alphanum(), ctype_digit() и други подобни, за да се убедиш, че не се подава зловреден SQL код. В противен случай могат да ти вкарат SQL инжекция и да стане мазаляк. Горещо те съветвам да използваш PDO, или алтернативно MySQLi.

Mysql_xxx функциите е възможно да са малко по-бързи, но това е много спорен въпрос и аз поне не съм стигнал до някакво категорично становище.

Освен всичко PDO е и много приятно за работа, като му свикнеш. Както и jQuery, но това вече е друга тема.
 
Проблема е, че не съм работил досега с MySQLi или с PDO и не знам как да използвам заявките там, дали ще свикна бързо :). За защита от SQL инжекции използвам един код на Dreamweaver и си мисля, че имат добре защита от инжекции. Ето го кода:

Код:
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}


$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
	$modeli=$_POST['model_por'];
	echo $modeli;
  $insertSQL = sprintf("INSERT INTO porachki (model_por, broy_por, cena_por, razmer_por, date_por) VALUES (%s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['model_por'], "text"),
                       GetSQLValueString($_POST['broy_por'], "int"),
                       GetSQLValueString($_POST['cena_por'], "double"),
                       GetSQLValueString($_POST['razmer_por'], "text"),
                       GetSQLValueString($_POST['date_por'], "date"));

  mysql_select_db($database_porachki, $porachki);
  $Result1 = mysql_query($insertSQL, $porachki) or die(mysql_error());

  $insertGoTo = "aftermodeli.php";
  if (isset($_SERVER['QUERY_STRING'])) {
    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
    $insertGoTo .= $_SERVER['QUERY_STRING'];
  }
//  header(sprintf("Location: %s", $insertGoTo));
}
?>
 
Много зависи какво точно ще подаваш,за мен лично най-трудно да "handling" са коментарите, другите неща могат да минат по по-горе упоменатите провери (които са доста лесниза разбиране и ползване)
Код:
preg_match(), strlen(), ctype_alpha(), ctype_alphanum(), ctype_digit()
 

Back
Горе