Запись таблицы базы данных в xml - PullRequest
0 голосов
/ 10 марта 2012

Во-первых, я не хочу альтернативный код, я только хочу помочь сделать эту работу.Используя приведенный ниже код, я хочу записать данные из таблицы базы данных в файл xml, но я получаю только «john» и «123» с правильными тегами xml, и мой второй foreach () не работает, но первыйforeach () для отображения таблицы работ.

<?php

$dbhandle = sqlite_popen("propertydb", 0666, $err_msg);
if(!$dbhandle) die("Could not open the database");

$query = "CREATE TABLE property(pCode VARCHAR(8), price VARCHAR(6), 
iFile VARCHAR(15),          visits VARCHAR(3))";
if(!sqlite_query($dbhandle, $query)){ echo "table not created (maybe already
created)";
} 

$query = sqlite_query($dbhandle, 'SELECT * FROM property');  
$result = sqlite_fetch_all($query, SQLITE_ASSOC);  

foreach ($result as $arow) {
echo '<br> Postcode:  ' . $arow['pCode'] . '  Price:  ' . $arow['price'] . 
' Image  File:  ' . $arow['iFile'] . ' Visits:  ' . $arow['visits'];
}

$outfilepointer = fopen("property.xml","w");
$outtext = "<estateagent> \n";
$outtext .= "<agentname>john</agentname> \n";
$outtext .= "<agentphone>123</agentphone> \n";
foreach ($result->property as $oneproperty)
{
$propertyname = $oneproperty->propertyname;
outtext .= '<property><postcode> $arow["pCode"] </postcode>
<price> $arow["price"]</price> <imagefile> $arow["iFile"] </imagefile> <visits>
$arow["visits"] 
</visits>    </property> \n';
}
$outtex .= "</estateagent>";
fwrite($outfilepointer, $outtext);
fclose($outfilepointer);
sqlite_close($dbhandle);
?>

Это то, что мой вывод должен быть ...

<estateagent>
<agentname></agentname>
<agentphone></agentphone>
<property>
<postcode></postcode><price></price><imagefile></imagefile><visits></visits>
</property>
<property>...</property>
<property>...</property>
</estateagent>

1 Ответ

1 голос
/ 10 марта 2012

Я только что попытался использовать ваш код, и теги XML появляются. Попробуйте открыть его в блокноте, чтобы увидеть.

Что касается цикла foreach, вам нужно объединить строки.

outtext .= '<property><postcode> $arow["pCode"] </postcode> 
<price> $arow["price"]</price> <imagefile> $arow["iFile"] </imagefile> <visits> 
$arow["visits"]  
</visits>    </property> \n'; 

Для foreach я понимаю, что sqlite_fetch_all возвращает массив. Вы рассматриваете это как переменную.

Попробуйте использовать: foreach ($result as $oneproperty). Поскольку я не уверен, как структурирована ваша база данных, если это не работает для вас, опубликуйте вывод $result, используя var_dump($result).

Вышеуказанное означает, что будет выведена литеральная строка и никакие переменные не будут вставлены. Вам нужно сделать это:

outtext .= '<property><postcode>'. $arow["pCode"]. '</postcode> 
<price>'. $arow["price"].'</price> <imagefile>'. $arow["iFile"].' </imagefile> <visits>'. 
$arow["visits"].'
</visits>    </property> \n'; 

Наконец, вместо создания тегов вручную со строками, рассмотрите возможность использования XML Writer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...