Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript для базы данных (https://javascript.ru/forum/misc/56959-javascript-dlya-bazy-dannykh.html)

kostyanet 14.07.2015 08:10

На яваскрипт можно добавить только в локальную базу - localStorage.

Цитата:

Сообщение от docrec
ля опытного программиста займет несколько минут. Пример добавления записи в базу данных на PHP

По-колхозному несколько минут, да, а индустриально это с десяток классов на разные там типы полей и класс контроллера формы для всех этих классов.

Ну как вы проверите что данные можно записать? Ну типа проверить не пусто ли? А если можно записать пусто в это поле? Не обязательное. Где хранятся данные какое поле обязательное, какое файловое, какое дата, какое число и все такоэ?

Так что чем у программиста больше опыта, тем меньше он пишет за других по нелепым ТЗ. И соотв наоборот - чем меньше опыта, тем больше воображения что любую бнопню можно заколхозить.

Чтоб жизнь малиной не казалась https://en.wikipedia.org/wiki/Active_record_pattern

А этот ваш аякс - всего лишь транспорт. Сам по себе он умеет только передавать туда запрос и получать оттуда ответ. Это - элементарно. А все остальное не по теме.

kostyanet 14.07.2015 08:17

Я вам пытался объяснить что если

Цитата:

Сообщение от docrec
Это сделано через PHP.

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

Но вы зачем-то захотели смотреть как это сделать на PHP. Странно...

docrec 15.07.2015 09:37

Вроде разобрался.
Как я понял сам JS не предназначен для поставленной мной задачи. А делается на HTML + PHP. Изначально я не постил свой PHP код, чтобы посмотреть точку зрения опытного программиста на этот вопрос. Чтобы не быть голословным выкладываю свой код:
<?php
function db_connect() {
  // Подключение к серверу баз данных
  $result = new mysqli('localhost', 'database', 'password', 'user'); 
  if (!$result)
    echo 'Невозможно подключиться к серверу баз данных.<br>';
  else
    return $result;
}

function add_item($name, $description) {
  $conn = db_connect();
  $query = "insert into itemsbase values ('$name', '$description')";
  if (!$conn->query($query)) {
    echo "Не удается добавить запись в базу данных.<br>";
	return false;
  }
  else {
    echo "Запись в базу данных добавлена.<br>";
  }
  return true;
}

if (isset($_POST['name'])) {
  $name = $_POST['name'];
  if (isset($_POST['description'])) $description = $_POST['description']; else $description = "";
  add_item($name, $description);
}

?>
<form name="itemform" action="item.php" method="post">
Название:
<input type="text" name="name">
Описание:
<input type="text" name="description">
<input type="submit" value="Добавить">
</form>

Код:

CREATE TABLE IF NOT EXISTS `itemsbase` (
  `name` char(100) COLLATE utf8_unicode_ci NOT NULL,
  `description` char(255) COLLATE utf8_unicode_ci NOT NULL,
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


ЗЫ Спасибо всем за комментарии по теме и проявленное терпение.

laimas 15.07.2015 09:40

Нельзя так записывать в базу, данные извне обязательно обработаны перед записью в базу.

docrec 15.07.2015 09:49

У меня обрабатываются. В теме упрощенный пример.

laimas 15.07.2015 10:04

Ну обработка не такая и сложная, не сотни строк кода, а значит, если видим этот код приведенный, то вывод соответствующий - наличие дыр.

docrec 15.07.2015 10:17

А как правильно обработать данные для этого примера? Можно дописать код для наглядности?

laimas 15.07.2015 10:33

mysql_real_escape_string в данном случае. Если предполагается прием данных не одного поля, то лучше так:

array_walk_recursive($_POST, function(&$v) {
        return '"' . mysql_real_escape_string(stripslashes(trim($v))) . '"';    
});


Можно проверять тип, и для значений is_numeric() приводить данные к integer, а экранирование и кавычки для строк. А вообще надо переходить на PDO, ну или mysqli, где эти задачи (экранирование) решаются на уровне драйвера.

$description = $_POST['description']; else $description = ""; - это бесполезная операция.

kostyanet 15.07.2015 15:01

Цитата:

Сообщение от docrec
выкладываю свой код

Колхоз имени Свеклы Морковиной. Поэтому вам и кажется что все должно быть просто. Ну в общем можно и просто, но сложнота как то шило все равно вылезет в другом месте.

Любой программист который соблазнился простой лапшевидного кода, утонет в этой лапше как только истечет время готовки.

kostyanet 15.07.2015 15:13

Теперь в чем разница обычного и аякс-запроса:

<?php

/*
   тут пропущены функции коннекта и записи в бд 
*/

class SomeClass extends ClassGettersWithSetters {

   protected function get_ajax(){
 /*
   любым способом проверяется что это аякс 
   например по заголовку - канонично
   по ключу в урле
   по спец-полю
   по кукам
   ниже - по заголовку и факт кешируется в проперти объекта
 */
   return $this->_d['ajax']=isset($_SERVER['HTTP_X_REQUESTED_WITH'])
	 && strcasecmp($_SERVER['HTTP_X_REQUESTED_WITH'],'xmlhttprequest')==0;
   }

}

if (isset($_POST['name'])) {
  $name = $_POST['name'];
  if (isset($_POST['description'])) $description = $_POST['description']; else $description = "";
  add_item($name, $description);
/* 
  То есть все как обычно до этой развилки: если аякс - отпостить 
   в браузер слово Saved и сдохнуть, а если не аякс то пропустить и нарисовать форму
*/
  if($this->ajax)
    exit('Saved');
}

?>
<form name="itemform" action="item.php" method="post">
Название:
<input type="text" name="name">
Описание:
<input type="text" name="description">
<input type="submit" value="Добавить">
</form>


Часовой пояс GMT +3, время: 16:12.