2016-05-12 239 views
0

我有一個XML文件,並在我檢查後需要數據庫中的數據。所以我顯示在一個表中的數據,然後我嘗試寫入數據庫中的數據。但與我的代碼,我只得到我的數據庫中的XML的第一組數據。但每個xml至少有20個或更多。我怎樣才能寫入數據庫中的所有數據?PHP讀取XML並寫入數據庫

與此代碼i。從XML

<form action="insert.php" method="post" /> 
    <table id="Wagen"> 
     <thead> 
      <tr>   
      <th>Typ</th> 
      <th>Kennzeichen</th> 
      <th>Fahrer</th> 
      </tr> 
     </thead> 

     <tbody> 

    <?php 
     $url = ('./cars.xml'); 
     $xml = simplexml_load_file(urlencode($url), null, true); 


     foreach ($xml->car as $cars) :?> 
    <tr>   
      <td><input type="hidden" name="name" value="<?php echo $cars->typ; ?>"><?php echo $cars->typ; ?></td> 
      <td><input type="hidden" name="kfz-nr" value="<?php echo $cars->plate; ?>"><?php echo $cars->plate; ?></td> 
      <td><input type="hidden" name="fahrer" value="<?php echo $cars->driver; ?>"><?php echo $cars->driver; ?></td> 
    </tr> 

<?php endforeach; ?> 

     </tbody> 
    </table> 
    <input type="submit" name="senden" value="XML speichern" /> 
</form> 

和與此代碼我嘗試在數據庫中寫入數據顯示的數據。但我只得到我桌子上的第一排。而不是其他人。

<?php 

    error_reporting(E_ALL); 
     $MYSQL_HOST = 'localhost'; 
     $MYSQL_USER = 'username'; 
     $MYSQL_PASS = 'password'; 
     $MYSQL_DATA = 'database'; 

     $connid = @mysql_connect($MYSQL_HOST, $MYSQL_USER, $MYSQL_PASS) OR die("Error: ".mysql_error()); 
     mysql_select_db($MYSQL_DATA) OR die("Error: ".mysql_error()); 

     if (isset($_POST['senden'])) 
    { 
     $sql = 
       "INSERT INTO myTable 
       (fahrzeug, 
       kennzeichen, 
       fahrer 
      ) 
       VALUES 
       ('".mysql_real_escape_string(trim($_POST['name']))."', 
       '".mysql_real_escape_string(trim($_POST['kfz-nr']))."', 
       '".mysql_real_escape_string(trim($_POST['fahrer']))."'); 
       mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
       mysql_query("SET NAMES 'utf8'"); 
    } 
?> 

我希望有人能幫助我。 :)

+0

這是完全正確的,你只有一個值。因爲您只發送一個值。 – xAqweRx

回答

1

在你的foreach循環中,你編寫了多組具有不同值的隱藏輸入,但所有這些都具有相同的名稱,因此提交後只有一個輸入被POST發送。 因此,在您的數據庫代碼中,您只需添加通過的單個輸入即可。

總之,您需要爲每個隱藏輸入和數據庫插入中的循環使用不同的名稱,以循環所有發送的結果。

一種方法是在輸入名稱後面添加[],使其返回一個數組。

<input type="hidden" name="name[]" value="<?php echo $cars->typ; ?>"> 
<input type="hidden" name="kfz-nr[]" value="<?php echo $cars->plate; ?>"> 
<input type="hidden" name="fahrer[]" value="<?php echo $cars->driver; ?>"> 

會導致類似:

$_POST[kfz-nr][0]=="ABC123"; 
$_POST[kfz-nr][1]=="KLM901"; 
$_POST[kfz-nr][2]=="RGB255"; 

等。然後在您的插入方法這樣做:

if (isset($_POST['senden'])) 
{ 
$count = count($_POST['name']); 
for($i=0;$i<$count;$i++){ 
    $sql = 
      "INSERT INTO myTable 
      (fahrzeug, 
      kennzeichen, 
      fahrer 
     ) 
      VALUES 
      ('".mysql_real_escape_string(trim($_POST['name'][$i]))."', 
      '".mysql_real_escape_string(trim($_POST['kfz-nr'][$i]))."', 
      '".mysql_real_escape_string(trim($_POST['fahrer'][$i]))."'); 
      mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error()); 
      mysql_query("SET NAMES 'utf8'"); 
} 
} 
+0

謝謝。你們倆。我嘗試了Ergo的方法,它的工作非常完美。 :) – speeddrive

0
  1. send data from html
  2. 保存數據作爲數組,而不是一個元件(下面PHP的例子)
  3. 不在PHP使用MySQL。庫MySQLi或PDO

$values = array(); 
for($i=0; $i < count($_POST['names']); $i++){ 
    $values[] = "(" . 
      "\"" . mysql_real_escape_string(trim($_POST['name'][$i]).""\",". 
      "\"" . mysql_real_escape_string(trim($_POST['kfz-nr'][$i])."\",". 
      "\"" . mysql_real_escape_string(trim($_POST['fahrer'][$i])."\"". 
      ")"; 
} 

$sql = "INSERT INTO myTable (fahrzeug, kennzeichen, fahrer) VALUES " . implode($values); 
mysql_query($sql) OR die("<pre><br>" . $sql . "</pre><br>".mysql_error()); 
mysql_query("SET NAMES 'utf8'");