2015-08-14 4 views
0

У меня проблема с php-скриптом.Записать запрос sql sql из массива данных (php, mysql)

У меня есть массив, который генерируется из формы, где $_POST['store'] является массивом из JQuery формы с функциональностью, чтобы добавить несколько строк:

Array 
(
    [client] => 
    [darvad] => 
    [owca] => 
    [ldrive] => 
    [store] => Array 
     (
      [product] => Array 
       (
        [0] => 430 
        [1] => 440 
        [2] => 430 
       ) 

      [quantity] => Array 
       (
        [0] => 123 
        [1] => 1223 
        [2] => 232 
       ) 

      [segums] => Array 
       (
        [0] => Mixed park 
        [1] => Light vehicle 
        [2] => Trucks 
       ) 

      [deadline] => Array 
       (
        [0] => 2015-08-04 
        [1] => 
        [2] => 
       ) 

      [renewal] => Array 
       (
        [0] => 1 
       ) 

     ) 

) 

И мне нужно, чтобы получить значения из этого массива в SQL вставки даного и зациклируйте его.

$sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline) VALUES (...),(...),(...).... ";

HTML КОД:

  <div id="container"> 
      <div id="content" role="main"> 

      <?php 
       echo "<pre>"; 
       print_r($_POST); 
       echo "</pre>"; 
      ?> 

<form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post" id=multiForm> 
    <label for="client">Klients: *</label><input id="client" type="text" name="client" placeholder="Reg.nr | Pk.kods" value="" /></br> 
    <label for="selector1">Darījuma vadītājs: *</label> 
    <select id="selector1" name="darvad" > 
     <option value="">-Dar. vadītājs-</option> 
<?php 
    $sql = "SELECT Vards_Uzvards, Tables_ID FROM users"; 
    $results = $wpdb->get_results($sql); // return an object, not ARRAY_N 
if ($results) { 
    foreach ($results as $row) { 
     echo "<option value = '".$row->Tables_ID."'>".$row->Vards_Uzvards."</option>"; 
}} 
    echo "</select></br>";       
?> 
<label for="owcafind"><a href="<?php echo site_url('/sample-page/owca/'); ?>" target="_blank">Meklēt OWCA kodu:</a> *</label><input id="owcafind" type="text" name="owca" placeholder="OWCA Kods (8)" value="" /></br> 

<label for="ldrive">Mape L diskā:</label><input id="ldrive" type="text" name="ldrive" placeholder="Mape L diskā" value="" /></br> 

Produkti: <a href="#" class="addRow"><img src="<?php echo site_url('/img/plus-icon.png'); ?>" width="15px"></a><br/> 
<table class="multi"> 
<!-- table title --> 
<tr><th>Produkts</th><th>Vienību skaits</th><th>Riska segums:</th><th>Deadline:</th><th>Atjaunojums</th><th>[Option]</th></tr> 
<!-- row template, when added new row --> 
<tr style="display:none;" class="templateRow"> 
<td><select name="store[product][]"> 
<option value="" selected="selected">-Produkts-</option> 
<option value="430">OCTA</option> 
<option value="440">KASKO</option> 
</select></td> 
<td><input type="text" name="store[quantity][]" /></td> 
<td><select name="store[segums][]"> 
<option value="" selected="selected">-Riska segums-</option> 
<option value="Mixed park">Mixed park</option> 
<option value="Light vehicle">Light vehicle</option> 
<option value="Trucks">Trucks</option> 
<option value="Buss">Buss</option> 
</select></td> 
<td><input type="date" name="store[deadline][]" class="datepicker" /></td> 
<td><input type="checkbox" name="store[renewal][]" value="1" /></td> 
<td><a class="del" href="#"><img src="<?php echo site_url('img/minus-icon.jpg'); ?>" width="15px"></a></td> 
</tr> 
<!-- default values --> 
<tr> 
<td><select name="store[product][]" > 
<option value="" selected="selected">-Produkts-</option> 
<option value="430">OCTA</option> 
<option value="440">KASKO</option> 
</select></td> 
<td><input type="text" name="store[quantity][]" /></td> 
<td><select name="store[segums][]"> 
<option value="" selected="selected">-Riska segums-</option> 
<option value="Mixed park">Mixed park</option> 
<option value="Light vehicle">Light vehicle</option> 
<option value="Trucks">Trucks</option> 
<option value="Buss">Buss</option> 
</select></td> 
<td><input type="date" name="store[deadline][]" class="datepicker" /></td> 
<td><input type="checkbox" name="store[renewal][]" value="1" /></td> 
<td></td> 
</tr> 
<!-- /default values --> 
</table> 
+1

так, что стало результатом ваших попыток? любые сообщения об ошибках, которые могут нам помочь? – DevDonkey

+0

Как хранятся данные? «VALUES (...), (...), (...) ....«; »- это может быть просто значение« 0, 1, 2, 3, 4 »в большой длинной строке ? – Christian

+0

Форма выглядит так: http://s12.postimg.org/t4shn4mml/form_example.png – AlexIL

ответ

1

Из Вашего вопроса, похоже, это то, что вы после

$itemCount = sizeof($array['store']['product']); 

for ($i = 0; $i < $itemCount; $i++) { 
    $sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline) VALUES ("' . $array['store']['product'][$i] . '", "' . $array['store']['quantity'][$i] . '", "' . $array['store']['segums'][$i] . '", "' . $array['store']['deadline'][$i] . '");"; 

    // Run the sql statement on the database here 
} 

Вы должны обеспечить, чтобы все предоставленные пользователем значения надлежащим образом спасся перед сохранением в базе данных.

+0

У меня есть ошибка с этим, $ itemCount return 0 и код не сработали. – AlexIL

+0

Изменили свой код, спасибо! – AlexIL

0

Если массив называется $ массив, то вы можете получить доступ к значениям массивов, как так;

// product; 
$array['store']['product']; 
// quantity; 
$array['store']['quantity']; 
// etc. 

Тогда, если они будут идти в одну колонку (который является плохой форме и я не рекомендую, то вы можете сделать что-то вроде этого;

// product; 
$prod_string = ''; 
foreach ($array['store']['product'] as $key => $prod) { 
    $prod_string .= $prod; 
} 

Затем вы можете использовать $prod_string в запросе

или, если вам нужно вставить строку для каждого из ключей;.

// We use the key from the product loop to get the others; 
foreach ($array['store']['product'] as $key => $prod) { 
    $prod_val = $prod; 
    $qty_val = !empty($array['store']['quantity'][$key]) ? $array['store']['quantity'][$key] : ''; 
    $seg_val = !empty($array['store']['segums'][$key]) ? $array['store']['segums'][$key] : ''; 
    $dl_val = !empty($array['store']['deadline'][$key]) ? $array['store']['deadline'][$key] : ''; 
    // Right here create your query and insert. 
    $sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline) VALUES ($prod_val, $qty_val, $seg_val, $dl_val);" 
    // I'm not sure what library you're using for your db management, so will leave that out. 
} 

Тогда вы будете иметь значение каждого.

ПРИМЕЧАНИЕ - Я не проверял наличие чистых значений почтовых сообщений. Т.е., санированный вход. Это выходит за рамки этого вопроса.

+0

Пытается запустить ваш код, есть ошибка: Предупреждение: Неверный аргумент, предоставленный foreach() – AlexIL

+0

Возможно, вам стоит обновить свой вопрос с помощью точного кода, который вы используете. Имейте в виду, что предупреждение не является ошибкой, а выполнение кода не останавливается. – Christian

+0

У меня был вопрос с кодом html. Я попытался вставить $ array = $ _POST перед вашим кодом. И почти сделано.Ошибка: INSERT INTO tsales_funnel_mrecord (Product_type, Vien_skaits, Riska_segums, Крайний срок) ЗНАЧЕНИЯ (440, 2321, Легкое транспортное средство, 2015-08-07); У вас возникла ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования около «vehicle, 2015-08-07)» в строке 1 – AlexIL

0

Сделали это:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {  
// We use the key from the product loop to get the others; 
$array = $_POST; 
$itemCount = sizeof($array['store']['product']); 
// Loop through all $itemCount 
$values_string = ''; 
for ($i = 0; $i < $itemCount; $i++) { 
    $prod = esc_sql($array['store']['product'][$i]); 
    $quant = esc_sql($array['store']['quantity'][$i]); 
    $seg = esc_sql($array['store']['segums'][$i]); 
    $deadline = esc_sql($array['store']['deadline'][$i]); 
    $renewal = esc_sql($array['store']['renewal'][$i]); 
    if ($i < $itemCount - 1) { 
    $new_str = "('".$prod."','".$quant."','".$seg."','".$deadline."','".$renewal."'),"; 
    } else{ 
    $new_str = "('".$prod."','".$quant."','".$seg."','".$deadline."','".$renewal."');"; 
    } 
    $values_string .= $new_str; 
} 
// Run the sql statement on the database here 
$sql_rec = "INSERT INTO tsales_funnel_mrecord (Product_type, Vien_skaits, Riska_segums, Deadline, Atjaunojums) VALUES $values_string"; 
$wpdb->query($sql_rec); 
} 
+0

Как я уже сказал в комментариях к моему ответу, esc_sql() не защитит от инъекций. – Christian

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