Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 14.07.2015, 08:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

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

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

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

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

Последний раз редактировалось kostyanet, 14.07.2015 в 08:15.
Ответить с цитированием
  #12 (permalink)  
Старый 14.07.2015, 08:17
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

Но вы зачем-то захотели смотреть как это сделать на PHP. Странно...
Ответить с цитированием
  #13 (permalink)  
Старый 15.07.2015, 09:37
Новичок на форуме
Отправить личное сообщение для docrec Посмотреть профиль Найти все сообщения от docrec
 
Регистрация: 12.07.2015
Сообщений: 8

Вроде разобрался.
Как я понял сам 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;

ЗЫ Спасибо всем за комментарии по теме и проявленное терпение.
Ответить с цитированием
  #14 (permalink)  
Старый 15.07.2015, 09:40
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Нельзя так записывать в базу, данные извне обязательно обработаны перед записью в базу.
Ответить с цитированием
  #15 (permalink)  
Старый 15.07.2015, 09:49
Новичок на форуме
Отправить личное сообщение для docrec Посмотреть профиль Найти все сообщения от docrec
 
Регистрация: 12.07.2015
Сообщений: 8

У меня обрабатываются. В теме упрощенный пример.
Ответить с цитированием
  #16 (permalink)  
Старый 15.07.2015, 10:04
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Ну обработка не такая и сложная, не сотни строк кода, а значит, если видим этот код приведенный, то вывод соответствующий - наличие дыр.
Ответить с цитированием
  #17 (permalink)  
Старый 15.07.2015, 10:17
Новичок на форуме
Отправить личное сообщение для docrec Посмотреть профиль Найти все сообщения от docrec
 
Регистрация: 12.07.2015
Сообщений: 8

А как правильно обработать данные для этого примера? Можно дописать код для наглядности?
Ответить с цитированием
  #18 (permalink)  
Старый 15.07.2015, 10:33
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

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 = ""; - это бесполезная операция.
Ответить с цитированием
  #19 (permalink)  
Старый 15.07.2015, 15:01
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

Любой программист который соблазнился простой лапшевидного кода, утонет в этой лапше как только истечет время готовки.
Ответить с цитированием
  #20 (permalink)  
Старый 15.07.2015, 15:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

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

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

Последний раз редактировалось kostyanet, 15.07.2015 в 15:16.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подойдет ли для моей задачи javascript honeycomb0 Оффтопик 12 27.03.2014 20:49
redui - javascript библиотека для создания пользовательского интерфейса artemkv Ваши сайты и скрипты 0 04.03.2014 02:01
Тесты на javascript по физике для школьников (без регистрации) afportal Ваши сайты и скрипты 5 10.04.2012 18:19
Подходит ли Javascript для решения следующей задачи? alikol Общие вопросы Javascript 7 24.10.2010 14:10
Что нужно знать для изучения серверного javascript Иваннн Серверные языки и технологии 26 15.06.2010 16:05