2016-08-25 5 views
0

У меня возникла проблема в моем коде, когда я пытаюсь поместить несколько записей. Я пробовал разные решения, но проблема не была решена. Единственная проблема заключается, чтобы получить значение поля «доблесть»Несколько записей в PHP MySQL

<? $produtocotacao = "select * from cadcotacao2 WHERE idcotacao = '$idcotacao' ORDER by id DESC"; 
$result = mysql_query ($produtocotacao, $marechal) or die(mysql_error()); 
while ($linha = mysql_fetch_array ($result)) { 
    $id = $linha["id"]; 
    $idproduto = $linha["idproduto"]; 
    $produto = $linha["produto"]; 
    $user = $linha["user"]; 

    ?> 
    <form id="form6" method="post" action=""><tr> 
    <td align="center"><? echo $linha['idproduto']; ?></td> 
    <td align="center"><? echo $linha['produto']; ?></td> 
    <td align="left" valign="middle"> 
    <input name="id6[]" type="hidden" value="<? echo $linha['id']; ?>" /> 
    <input name="idcotacao[]" type="hidden" value="<? echo $idcotacao; ?>" /> 
    <input name="idproduto[]" type="hidden" value="<? echo $linha['idproduto']; ?>" /> 
    <input name="idfornecedor[]" type="hidden" value="<? echo "teste"; ?>" /> 
    <input name="ip[]" type="hidden" value="<? echo $ip; ?>" /> 
    <input name="valor[]" type="text" id="valor" placeholder="Ex: 110,50" class="m-wrap span6" /> 
    </td> 
    </tr> 

    <? 
    if(isset($_POST['done2'])){ 

     $cotacao = array(); 

     $cotacao[] = array('id' => $linha['id'], 'idcotacao' => $idcotacao, 'idproduto' => $idproduto, 'idfornecedor' => "teste", 'ip' => $ip, 'valor' => $_POST['valor']); 

     foreach ($cotacao as $rst) { 
      $id = $rst['id']; 
      $idcotacao = $rst['idcotacao']; 
      $idproduto = $rst['idproduto']; 
      $idfornecedor = $rst['idfornecedor']; 
      $ip = $rst['ip']; 
      $valor = $rst['valor']; 

      $sql = "INSERT INTO `cadcotacao4` (`ip`, `idcotacao`, `idproduto`, `idfornecedor`, `valor`) VALUES ('{$ip}', '{$idcotacao}', '{$idproduto}', '{$idfornecedor}', '{$valor}');"; 

      if(mysql_query($sql)){ 
       $erro = "Cotação Respondida!"; 
      } 
     } 

    } 
} ?> 

код записи в MySQL эти строки ниже:

id timestamp   ip   idforn idprod forn valor 
47 2016-08-25 15:47:45 179.209.99.217 2 6745 teste Array 
48 2016-08-25 15:47:45 179.209.99.217 2 1  teste Array 
+0

'$ _POST ['valor']' - массив, и вы используете его в контексте строки, что заставляет php выдать предупреждение и дать буквальное слово 'Array' в качестве значения« массива ». Поскольку вы не упомянули о получении/наблюдении этого предупреждения, вы, вероятно, работаете с display_errors/error_reporting DISABLED. Это плохое решение. Они НИКОГДА не должны находиться в окне разработки/отладки. –

+0

Привет, Марк Б. Я не вижу этого предупреждения. Функция error_reporting (E_ALL) включена. У вас есть решение? –

+0

как насчет display_errors? если это отключено, ошибки/предупреждения просто регистрируются где-то. либо включите дисплей, либо религиозно проверьте, где они регистрируются. –

ответ

0

трудности с вопросом является то, что ваш код кажется очень испорчено структурно. Простите меня, если я не понимаю, что вы пытаетесь сделать.

Кажется, вы делаете классическую ошибку начинающего начинающего PHP, не понимая, что на PHP выполняется весь код PHP на странице (на сервере), прежде чем любой динамический HTML и/или JavaScript и т. Д. Будет выполнен на стороне клиента.

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

Во-вторых, если вы используете несколько входов типа (valor []), это действительно имеет смысл, если вы повторяете входы в одной форме - так почему вы обновляете форму для каждой строки? Только одна форма будет отправлена.

Либо использовать одну форму с повторяющимися несколько входов (если вы хотите изменить несколько строк с одним представить) ИЛИ использовать отдельные формы (желательно по-другому называется) с простыми входами (доблесть) (для отображения нескольких результатов, но только измените по одному) вместо множителей (доблесть []).

Так что, я бы изменить свой код что-то вроде этого:

<?php 
     if(isset($_POST['done2'])){ 
      $ids=$_POST['id6']; 
      $idcotacaos = $_POST['idcotacao']; 
      $idprodutos = $_POST['idproduto']; 
      $idfornecedors = $_POST['idfornecedor']; 
      $ips = $_POST['ip']; 
      $valors = $_POST['valor']; 
      $i=0; 
      foreach($ids as $id) 
      { 
       $idcotacao = $idcotacaos[$i]; 
       $idproduto = $idprodutos[$i]; 
       $idfornecedor = $idfornecedors[$i]; 
       $ip = $ips[$i]; 
       $valor = $valors[$i]; 

       $sql = "INSERT INTO `cadcotacao4` (`ip`, `idcotacao`, `idproduto`, `idfornecedor`, `valor`) VALUES ('{$ip}', '{$idcotacao}', '{$idproduto}', '{$idfornecedor}', '{$valor}');"; 

       if(mysql_query($sql)){ 
        $erro = "Cotação Respondida!"; 
       } 
       $i++; 
      } 

     } 

     $produtocotacao = "select * from cadcotacao2 WHERE idcotacao = '$idcotacao' ORDER by id DESC"; 
     $result = mysql_query ($produtocotacao, $marechal) or die(mysql_error()); 
?> 
       <form id="form6" method="post" action=""> 
<?php 
     while ($linha = mysql_fetch_array ($result)) { 
      $id = $linha["id"]; 
      $idproduto = $linha["idproduto"]; 
      $produto = $linha["produto"]; 
      $user = $linha["user"]; 

?> 
       <tr> 
       <td align="center"><? echo $linha['idproduto']; ?></td> 
       <td align="center"><? echo $linha['produto']; ?></td> 
       <td align="left" valign="middle"> 
       <input name="id6[]" type="hidden" value="<? echo $linha['id']; ?>" /> 
       <input name="idcotacao[]" type="hidden" value="<? echo $idcotacao; ?>" /> 
       <input name="idproduto[]" type="hidden" value="<? echo $linha['idproduto']; ?>" /> 
       <input name="idfornecedor[]" type="hidden" value="<? echo "teste"; ?>" /> 
       <input name="ip[]" type="hidden" value="<? echo $ip; ?>" /> 
       <input name="valor[]" type="text" id="valor" placeholder="Ex: 110,50" class="m-wrap span6" /> 
       <input type="submit" name="done2" value="Save Changes"> 
       </td> 
       </tr> 

<?php 
     } 
?> 
       </form> 

Бит изменения обхвата через ид и получать элементы каждого из других многочисленных значений POST [] в том, что цикл затем выполнив sql, используя эти элементы. Надеюсь, это то, чего вы пытались достичь.

+0

Есть и другие улучшения, которые вы могли бы сделать, например, сделать idcotacao одним входным сигналом вне цикла - аналогично idfornecedor. Затем вы просто получите единственные значения из массива POST. –

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