2013-06-23 62 views
1

我在php中有以下形式,但我想使insert.php行動,在MySQL的新行中插入一切...我不知道該怎麼做,因爲有幾個字段集,它很容易與一個簡單的形式,但不是每個$_cliente$_servicioPHP表單提交數組作爲行

代碼更新

<?php 
require("database.class.php"); 
//database server 
define('DB_SERVER', "localhost"); 

//database usuario 
define('DB_USER', "root"); 
//database password 
define('DB_PASS', "root"); 
define('DB_DATABASE', "nivelservicio"); 
$db = new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE); 
$db->connect(); 
    $sql = "SELECT * FROM servicios"; 
    $_row = $db->query($sql); 
    $_servicios = array(); 
    while($row = $db->fetch_array($_row)) { 
     $_servicios[$row['id']] = $row['nombre']; 
    } 

    $sql = "SELECT * FROM clientes"; 
    $_row = $db->query($sql); 
    $_clientes = array(); 
    while($row = $db->fetch_array($_row)) { 
     $_clientes[$row['id']] = $row['nombre']; 
    } 
?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title></title> 
     <style> 
      body{ 
       margin:0; 
       border:0; 
      } 
      #formfieldset{ 
       width: 350px; 
       font-family: helvetica, sans-serif, verdana; 
       font-size:12px; 
      } 

      h1 { 
       font-size:36px; 
       font-family: Georgia; 
       font-style: italic; 
       border-bottom:1px solid #000; 
      } 

      h2 { 
       font-size:18px; 
       font-color:#1E1E1E; 
      } 


     </style> 
    </head> 
    <body> 
     <form action="insert.php" method="post"> 
     <div id="formfieldset"> 
      <?php foreach ($_clientes as $key_cliente => $cliente) : 
       switch ($cliente) { 
        case "Produban": 
         $_servicios = array_diff($_servicios, array(
          "GESTI", 
          "VULCANO" 
         )); 
         break; 
       } ?> 

       <h1><?php echo $cliente ?></h1> 
       <input type='hidden' name='cliente_id[<?php echo $key_cliente ?>' value='<?php echo $key_cliente ?>'> 
       <?php foreach($_servicios as $key_servicio => $servicio) : ?> 
        <h2><?php echo $servicio ?></h2> 
        <input type="hidden" name="servicio_id[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]" value="<?php echo $key_servicio; ?>"> 
        <label>Estado</label> 
        <select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>"> 
         <option value="OK">OK</option> 
         <option value="KO">KO</option> 
        </select> 
        <label>Texto</label><input type="text" name="texto"> 
       <?php endforeach; ?> 
      <?php endforeach; ?> 

      <br> 
      <input type="submit" name="insertar" value="Insertar"> 
     </div> 
     </form> 
    </body> 
</html> 
<?php 
$db->close(); 
?> 

insert.php

if(isset($_POST['insertar'])){ 
    var_dump($_POST); 

    foreach ($clientes as $key_cliente => $cliente) { 
     foreach ($servicios as $key_servicio => $servicio) { 
      //echo $_POST['estado'][$key_cliente][$key_servicio] . '<br />'; 
      $sql = "INSERT INTO datos 
       (servicio_id, cliente_id, estado, texto, fecha) 
       VALUES 
       ('".$_POST['servicio_id'][$key_cliente][$key_servicio]."', 
        '".$_POST['cliente_id'][$key_cliente][$key_servicio]."', 
         '".$_POST['estado'][$key_cliente][$key_servicio]."', 
          '".$_POST['texto'][$key_cliente][$key_servicio]."', 
           '".date('d-m-Y')."' 
      )"; 

      $db->query($sql); 
     } 
    } 
    echo "Valores insertados"; 
} 

回答

3

您需要更改輸入字段的名稱數組是這樣的:

<select name="estado[]"> 

然後在你的PHP,你可以這樣做:

<?php 

foreach ($_POST['estatdo'] as $key => $val) { 
    echo $_POST['estatdo'][$key] . ' - ' echo $_POST['texto'][$key] . ' - ' echo $_POST['servicio_id'][$key] . '<br />'; 
} 

這裏有一個完整的例子:

<form action="insert.php" method="post"> 
<div id="formfieldset"> 
    <?php foreach ($_clientes as $key_cliente => $cliente) : 
     switch ($cliente) { 
      case "Produban": 
       $_servicios = array_diff($_servicios, array(
        "GESTI", 
        "VULCANO" 
       )); 
       break; 
     } ?> 

     <h1><?php echo $cliente ?></h1> 
     <input type='hidden' name='cliente_id[<?php echo $key_cliente ?>]' value='<?php echo $key_cliente ?>'> 
     <?php foreach($_servicios as $key_servicio => $servicio) : ?> 
      <h2><?php echo $servicio ?></h2> 
      <input type="hidden" name="servicio_id[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]" value="<?php echo $key_servicio; ?>"> 
      <label>Estado</label> 
      <select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]"> 
       <option value="OK">OK</option> 
       <option value="KO">KO</option> 
      </select> 
      <label>Texto</label><input type="text" name="texto"> 
     <?php endforeach; ?> 
    <?php endforeach; ?> 

    <br> 
    <input type="submit" name="insertar" value="Insertar"> 
</div> 
</form> 

所以在這個例子中我們有一個雙重嵌套數組,所以而不是estado[]我們有estado[][]。也代替使用[]這使得與連續數字鍵的陣列(即,0,1,2,3)我已經改變它使用客戶端ID和服務ID是這樣的:

<select name="estado[<?php echo $key_cliente ?>][<?php echo $key_servicio ?>]> 

而然後在你的PHP你可以像這樣循環:

foreach ($clientes as $key_cliente => $cliente) { 
    foreach ($servicios as $key_servicio => $servicio) { 
     echo $_POST['estado'][$key_cliente][$key_servicio] . '<br />; 
    } 
} 
+0

這工作正常,但有一個$鍵的問題。我有7個$ _cliente和大約40 $ _servicio ...所以當$> 7 ...'(!)時,它會讓顧客的$ key變得麻煩。注意:未定義的偏移量:8在/var/www/nivelservicio/insert.php上第14行' –

+0

你能給我一些建議嗎?謝謝:) –

+0

所以我已經更新了答案,告訴你如何做一個嵌套數組 – chrislondon