2016-06-17 7 views
2

У меня есть форма, которая имеет несколько раскрывающееся меню (16) speed[] и некоторые другие поляСоздание динамического оператора вставки - PHP - Mysql

Данные из выпадающего меню должны быть вставлена ​​в таблицу Mysql

Что я сделал, так это то, что я взял счет count($_POST["speed"]);, а затем прохожу до конца массива скорости.

Проблема заключается в том:

  1. Если кто-то из выпадающего списка не выбран он возвращает "-1", если используется `($ _POST [ "скорость"] [$ я] =» -1") для этого, но это не сравнить и переходит в контур ПЧ

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

$ SQL при печати

INSERT INTO mytablename (w_name,wtype,speed1,speed2, speed3, speed4, speed5, speed6, speed7, speed8, speed9, speed10, speed11, speed12, speed13, speed14, speed15, speed16, coach_id) VALUES ('name', '', ''-1''800''-1''-1''200''-1''-1''-1''-1''-1''-1''-1''-1''-1''-1''200'', '208') 

Мой PHP код

$itemCount = count($_POST["speed"]); 
     $itemValues=0; 
     $query = "INSERT INTO mytablename (w_name,wtype,speed1,speed2, speed3, speed4, speed5, speed6, speed7, speed8, speed9, speed10, speed11, speed12, speed13, speed14, speed15, speed16, coach_id) VALUES "; 
     $bldSpltString=""; 
     $queryValue = ""; 
     for($i=0;$i<$itemCount;$i++) { 
      if(($_POST["speed"][$i]!="-1") || !empty($_POST["speed"][$i])) { 

       $bldSpltString .= "'" . $_POST["speed"][$i] ."'"; 
      } 
     } 
     $queryValue .= "('" . $wkout . "', '" . $wtype . "', '" . $bldSpltString . "', '" .$_SESSION['id']."')"; 

     $sql = $query.$queryValue; 
     echo $sql; 
     exit; 
+0

2-го уровня sql-инъекции. Люди даже не нуждаются в вашей форме для инъекций. – Drew

ответ

2

Я хотел бы сделать что-то вроде этого:

<?php 
    function dynamicInsert($table_name, $assoc_array){ 
     $keys = array(); 
     $values = array(); 
     foreach($assoc_array as $key => $value){ 
      $keys[] = $key; 
      $values[] = $value; 
     } 
     $query = "INSERT INTO `$table_name`(`".implode("`,`", $keys)."`) VALUES('".implode("','", $values)."')"; 
     echo $query; 
    } 
    dynamicInsert("users", array(
     "username" => "Test User", 
     "password" => "Password123" 
    )); 
?> 

ПРЕДУПРЕЖДЕНИЕ: Этот код не является безопасным, Я бы запустил mysql_real_escape_string и любую другую необходимую санитарию на var iables отправляется в mysql. Я также избегаю позволять этому скрипту работать на любом публичном обращении, поскольку динамическая вставка может позволить огромные угрозы безопасности!

Смежные вопросы