2015-05-18 1 views
0

У меня есть следующий код, который вставляет данные в мою базу данных sql. :Вставить в поля динамической формы базы данных sql добавлено

<?php 

require 'database.php'; 

if(!empty($_GET['wid']))  { $wid = $_GET['wid']; } 
elseif(!empty($_POST['wid'])) { $wid = $_POST['wid']; } 
else       { $wid = null;   } 

if (!empty($_POST)) { 
     // keep track validation $ 

     $ModelError  = null; 
     $DescriptionError = null; 
     $CostError  = null; 
     $RetailError  = null; 
     $QuantityError = null; 

     // keep track post values 

     $Model  = $_POST['model']; 
     $Description = $_POST['description']; 
     $Cost   = $_POST['cost']; 
     $Retail  = $_POST['retail']; 
     $Quantity  = $_POST['qty']; 

     // validate input 
     $valid = true; 
     if (empty($Model)) { 
      $ModelError = 'Please enter Model'; 
      $valid = false; 
     } 
     if (empty($Description)) { 
      $DescriptionError = 'Please enter Description'; 
      $valid = false; 
     } 
     if (empty($Cost)) { 
      $CostError = 'Please enter Cost'; 
      $valid = false; 
     } 
     if (empty($Retail)) { 
      $RetailError = 'Please enter Retail'; 
      $valid = false; 
     } 
     if (empty($Quantity)) { 
      $QuantityError = 'Please enter Quantity'; 
      $valid = false; 
     } 

if ($valid) { 
      $pdo = Database::connect(); 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql = "INSERT INTO items (WID, model, description, cost, retail, qty) values(?, ?, ?, ?, ?, ?);"; 
      $q = $pdo->prepare($sql); 
      $q->execute(array($wid,$Model, $Description, $Cost, $Retail, $Quantity)); 

      Database::disconnect(); 
      header("Location: index.php"); 
     } 
    } 
?> 
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <title>Workorder System</title> 

    <!-- Bootstrap core CSS --> 
    <link href="css/jquery-ui.min.css" rel="stylesheet"> 
    <link href="css/bootstrap.min.css" rel="stylesheet"> 
    <link href="css/datepicker.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 

    <!-- Custom styles for this template --> 
    <link href="css/sticky-footer-navbar.css" rel="stylesheet"> 

    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> 
    <!--[if lt IE 9]> 
     <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> 
     <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> 
    <![endif]--> 
    </head> 

    <body> 


    <!-- Begin page content --> 
    <div class="container content"> 
     <div class='row'> 
      <div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'> 
       <h1 class="text-center title">Workorder System </h1> 
      </div> 
     <h2>&nbsp;</h2> 
     <div class='row'> 
      <div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'> 
      <form class="form-horizontal" action="index.php" method="post"> 
      <input type="hidden" name="wid" value="<?php echo htmlentities($wid); ?>"> 
       <table class="table table-bordered table-hover"> 
        <thead> 
         <tr> 
          <th width="2%"><input id="check_all" class="formcontrol" type="checkbox"/></th> 
          <th width="15%">ID</th> 
          <th width="15%">Model #</th> 
          <th width="38%">Description</th> 
          <th width="15%">Cost</th> 
          <th width="15%">Retail</th> 
          <th width="15%">Quantity</th> 
         </tr> 
        </thead> 
        <tbody> 
         <tr> 
          <td> 
          <input class="case" type="checkbox"/></td> 
          <td> 
          <input type="text" data-type="ID" name="idNo[]" id="idNo_1" class="form-control autocomplete_txt" autocomplete="off"></td> 
          <td> 

          <div class="control-group <?php echo !empty($ModelError)?'error':'';?>"> 
            <div class="controls"> 
             <input type="text" data-type="model" name="model[]" id="model_1" placeholder="Model" value="<?php echo !empty($Model)?$Model:'';?>" class="form-control autocomplete_txt" autocomplete="off"> 
              <?php if (!empty($ModelError)): ?> 
               <span class="help-inline"><?php echo $ModelError;?></span> 
              <?php endif; ?> 
            </div> 
          </div> 

          </td> 
          <td> 

          <div class="control-group <?php echo !empty($DescriptionError)?'error':'';?>"> 
            <div class="controls"> 
             <input type="text" data-type="description" name="description[]" id="description_1" placeholder="Description" value="<?php echo !empty($Description)?$Description:'';?>" class="form-control autocomplete_txt" autocomplete="off"> 
              <?php if (!empty($DescriptionError)): ?> 
               <span class="help-inline"><?php echo $DescriptionError;?></span> 
              <?php endif; ?> 
            </div> 
          </div> 

          </td> 
          <td> 

          <div class="control-group <?php echo !empty($CostError)?'error':'';?>"> 
            <div class="controls"> 
             <input type="text" data-type="cost" name="cost[]" id="cost_1" placeholder="Cost" value="<?php echo !empty($Cost)?$Cost:'';?>" class="form-control autocomplete_txt" autocomplete="off"> 
              <?php if (!empty($CostError)): ?> 
               <span class="help-inline"><?php echo $CostError;?></span> 
              <?php endif; ?> 
            </div> 
          </div> 

          </td> 
          <td> 

          <div class="control-group <?php echo !empty($RetailError)?'error':'';?>"> 
            <div class="controls"> 
          <input type="text" data-type="retail" name="retail[]" id="retail_1" placeholder="Retail" value="<?php echo !empty($Retail)?$Retail:'';?>" class="form-control autocomplete_txt" autocomplete="off"> 
          <?php if (!empty($RetailError)): ?> 
               <span class="help-inline"><?php echo $RetailError;?></span> 
              <?php endif; ?> 
            </div> 
          </div> 

          </td> 
          <td> 

          <div class="control-group <?php echo !empty($QuantityError)?'error':'';?>"> 
            <div class="controls"> 
          <input type="number" name="quantity[]" id="quantity_1" placeholder="Quantity" value="<?php echo !empty($Quantity)?$Quantity:'';?>" class="form-control autocomplete_txt" autocomplete="off"> 
          <?php if (!empty($QuantityError)): ?> 
               <span class="help-inline"><?php echo $QuantityError;?></span> 
              <?php endif; ?> 
            </div> 
          </div> 

          </td> 
         </tr> 
        </tbody> 
       </table> 
      </div> 
     </div> 
     <div class='row'> 
      <div class='col-xs-12 col-sm-3 col-md-3 col-lg-3'> 
       <button class="btn btn-danger delete" type="button">- Delete</button> 
       <button class="btn btn-success addmore" type="button" id="Add">+ Add More</button> 
      </div> 
     </div> 
     <h2>Notes: </h2> 
     <div class='row'> 
      <div class='col-xs-12 col-sm-12 col-md-12 col-lg-12'> 
       <div class="form-group"> 
        <textarea class="form-control" rows='5' id="notes" placeholder="Your Notes"></textarea> 
       </div> 
      </div> 
     </div>  
     <div class="form-actions"> 
          <button type="submit" class="btn btn-success">Create</button> 
          <a class="btn" href="index.php">Back</a> 
         </div> 
    </div> 

    <script src="js/jquery.min.js"></script> 
    <script src="js/jquery-ui.min.js"></script> 
    <script src="js/bootstrap.min.js"></script> 
    <script src="js/bootstrap-datepicker.js"></script> 
    <script src="js/auto.js"></script> 
    </body> 
</html> 

Этот код работал отлично, прежде чем он был изменен. Он используется только вставить строки в базу данных по одному за раз, прежде чем я добавил этот код:

<div class='row'> 
      <div class='col-xs-12 col-sm-3 col-md-3 col-lg-3'> 
       <button class="btn btn-danger delete" type="button">- Delete</button> 
       <button class="btn btn-success addmore" type="button" id="Add">+ Add More</button> 
      </div> 
     </div> 

и Аякса бэкенд:

//adds extra table rows 
var i=$('table tr').length; 
$(".addmore").on('click',function(){ 
    html = '<tr>'; 
    html += '<td><input class="case" type="checkbox"/></td>'; 
    html += '<td><input type="text" data-type="ID" name="idNo[]" id="idNo_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>'; 
    html += '<td><input type="text" data-type="model" name="model[]" id="model_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>'; 
    html += '<td><input type="text" data-type="description" name="description[]" id="description_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>'; 
    html += '<td><input type="text" data-type="cost" name="cost[]" id="cost_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>'; 
    html += '<td><input type="text" data-type="retail" name="retail[]" id="retail_'+i+'" class="form-control autocomplete_txt" autocomplete="off"></td>'; 
    html += '<td><input type="text" data-type="quantity" name="quantity[]" id="quantity_'+i+'" class="form-control changesNo" autocomplete="off" onkeypress="return IsNumeric(event);" ondrop="return false;" onpaste="return false;"></td>'; 
    html += '</tr>'; 
    $('table').append(html); 
    i++; 
}); 

//to check all checkboxes 
$(document).on('change','#check_all',function(){ 
    $('input[class=case]:checkbox').prop("checked", $(this).is(':checked')); 
}); 

//deletes the selected table rows 
$(".delete").on('click', function() { 
    $('.case:checkbox:checked').parents("tr").remove(); 
    $('#check_all').prop("checked", false); 
    calculateTotal(); 
}); 

//autocomplete script 
$(document).on('focus','.autocomplete_txt',function(){ 
    type = $(this).data('type'); 

    if(type =='ID')autoTypeNo=0; 
    if(type =='model')autoTypeNo=1;  

    $(this).autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url : 'ajax.php', 
       dataType: "json", 
       method: 'post', 
       data: { 
        name_startsWith: request.term, 
        type: type 
       }, 
       success: function(data) { 
        response($.map(data, function(item) { 
         var code = item.split("|"); 
         return { 
          label: code[autoTypeNo], 
          value: code[autoTypeNo], 
          data : item 
         } 
        })); 
       } 
      }); 
     }, 
     autoFocus: true,    
     minLength: 0, 
     select: function(event, ui) { 
      var names = ui.item.data.split("|");       
      id_arr = $(this).attr('id'); 
      id = id_arr.split("_"); 
      $('#idNo_'+id[1]).val(names[0]); 
      $('#model_'+id[1]).val(names[1]); 
      $('#description_'+id[1]).val(names[2]); 
      $('#cost_'+id[1]).val(names[3]); 
      $('#retail_'+id[1]).val(names[4]); 
      $('#quantity_'+id[1]).val(1); 
      $('#total_'+id[1]).val(1*names[4]); 
      calculateTotal(); 
     }    
    }); 
}); 

//It restrict the non-numbers 
var specialKeys = new Array(); 
specialKeys.push(8,46); //Backspace 
function IsNumeric(e) { 
    var keyCode = e.which ? e.which : e.keyCode; 
    console.log(keyCode); 
    var ret = ((keyCode >= 48 && keyCode <= 57) || specialKeys.indexOf(keyCode) != -1); 
    return ret; 
} 

и

<?php 

require_once 'config.php'; 
if(!empty($_POST['type'])){ 
    $type = $_POST['type']; 
    $name = $_POST['name_startsWith']; 
    $query = "SELECT ID, model, category, subcategory, description, cost, retail FROM products where UPPER($type) LIKE '".strtoupper($name)."%'"; 
    $result = mysqli_query($con, $query); 
    $data = array(); 
    while ($row = mysqli_fetch_assoc($result)) { 
     $name = $row['ID'].'|'.$row['model'].'|'.$row['description'].'|'.$row['cost'].'|'.$row['retail']; 
     array_push($data, $name); 
    } 
    echo json_encode($data);exit; 
} 

Теперь я получил помощь в разделе ajax кода, который работает (правильно добавляет поля формы), и результаты POST работают нормально (экранированная вкладка веб-разработчика Firefox, и она правильно помещает все мои данные поля формы), единственное, что яУ меня есть проблемы с тем, как переводить МНОЖЕСТВЕННЫЕ представления одновременно. Видимо SQL код, который я работал с одним представлением не работает с несколькими последовательными представлений, и я получаю следующее сообщение об ошибке:

Примечание: Массив для преобразования строки в C: \ WAMP \ WWW \ счета \ индекса. PHP на линии 131 Call Stack #TimeMemoryFunctionLocation +10,0012276928 {главная}() .. \ index.php: 0 Array»класс = "форма контроля autocomplete_txt" автозаполнения = "выключено">

и по какой-то причине:

Примечание: Неопределенный индекс: qty в C: \ wamp \ www \ invoice \ index.php on линия 24

Любая помощь в этом вопросе будет принята с благодарностью, было устранение неисправностей в течение недели теперь: P

+0

у вас есть поле формы 'имя =«количество []»' но когда вы пытаетесь прочитать его, вы '$ Количество = $ _POST [«кол-во»];' так здесь вы используете неправильное имя поля. должно быть '$ Quantity = $ _POST ['quantity'];' – Alex

+0

@Alex Большое спасибо, я знал, что должно быть что-то глупое просто, lol. Вы знаете, как проталкивать данные через какой-то цикл, чтобы представить все это несмотря на динамические данные? – Steven

+0

@Jay_Blanchard Спасибо за изменения, BTW, как вы добавляете желтое форматирование фона для сообщений об ошибках? – Steven

ответ

1

Я не уверен, что вы просите. Но как раз в цикле массивах вы можете:

 $pdo = Database::connect(); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $sql = "INSERT INTO items (WID, model, description, cost, retail, qty) values(?, ?, ?, ?, ?, ?);"; 
     $q = $pdo->prepare($sql); 
     $idx = 0; 
     foraech ($Model as $model_idx) { 
      $q->execute(array($wid,$model_idx, $Description[$idx], $Cost[$idx], $Retail[$idx], $Quantity[$idx])); 
      $idx++; 
     } 
+0

Большое спасибо, это сработало отлично! Кстати, почему это «$ model_idx» вместо «$ model [$ idx]? Кроме того, вы знаете, где я могу разобраться, как изменить этот код, чтобы предотвратить внедрение sql? Еще раз спасибо! – Steven

+0

Вы уже сделали это потому что вы используете инструкцию 'prepare'. – Alex

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