Вставить, если строка не существует - PullRequest
1 голос
/ 17 ноября 2010

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

У меня есть таблица на одной странице, я использую jQuery для прохождения каждой строки и отправки значений в виде массива на страницу php, которая проходит через каждую строку и обновляет соответствующую строку в базе данных mysql. Это здорово, если вы хотите редактировать только то, что у вас есть. Если пользователь добавит еще одну строку в таблицу, он все равно отправит все строки, но мне нужно вставить php, если он не найдет соответствующую строку для обновления, что имеет смысл?

Это мой код для обновления php:

if (isset($_POST['data']) && is_array($_POST['data'])) {
              foreach ($_POST['data'] as $row => $data) {
                $sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
                $result = mysql_query($sql); 
              }
            }

«Индекс» - это индекс строки из таблицы на первой странице, если это поможет?

Ответы [ 3 ]

4 голосов
/ 17 ноября 2010

Во-первых, этот запрос невероятно небезопасен. Вы должны использовать mysql_real_escape_string.

Во-вторых, вы можете проверить, существует ли свойство индекса, но это подвергает вас риску для неверных пользовательских данных (всегда предполагайте, что пользовательские данные могут быть испорчены). Если rowid и orderid образуют уникальный ключ на таблице, то, вероятно, вам лучше использовать ON DUPLICATE KEY UPDATE:

$sql = 'INSERT INTO `orders` VALUES (' . mysql_real_escape_string( $data['supp_short_code'] ) /* ... */ ' ON DUPLICATE KEY UPDATE ' // your original sql
3 голосов
/ 17 ноября 2010

Просто создайте оператор IF, чтобы проверить, существует ли $ data ['index']. Если нет, то создайте оператор вставки, а не обновление.

if (isset($_POST['data']) && is_array($_POST['data'])) {
          foreach ($_POST['data'] as $row => $data) {
            if($data['index']){
              $sql = "UPDATE `orders` SET supp_short_code='".$data['supp_short_code']."', project_ref='".$data['project_ref']."', om_part_no='".$data['om_part_no']."', description='".$data['description']."', quantity=".$data['quantity_input'].", cost_of_items='".$data['cost_of_items']."', cost_total='".$data['cost_total_td']."' where order_id = ".$data['order_id']." and row_id = ".$data['index']."";
            } else {
              $sql = /*Create INSERT statement*/;
            }
              $result = mysql_query($sql); 
          }
        }
1 голос
/ 17 ноября 2010

Так как мы имеем дело с mysql, здесь может пригодиться REPLACE.http://dev.mysql.com/doc/refman/5.0/en/replace.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...