2016-05-12 242 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'");