Hejsan.
Har nu suttit ett par timmar med ett och samma problem, men jag kommer verkligen inte på någon lösning.
Vad jag vill åstadkomma:
Jag vill ladda upp och läsa av en xml-fil.
Där efter vill jag lägga in data från xml-filen till min databas.
Har angett kolumnen "url" som en unik index, så att det inte blir några dubbletter i databasen.
Sen vill jag kontrollera om det finns några "produkter" i databasen som inte finns med i xml filen.
De produkter som finns i databasen men inte i xml filen skall tas bort.
Mitt problem
Allt går som smort tills det kommer till att ta bort de produkter i datbasen som inte finns med i xml-filen.
Min kod
PHP-kod:
$upload_path = "xml-files/";
$allowed_filetypes = array('.xml', '.csv');
$filename = $_FILES['uploadedfile']['name'];
$ext = substr($filename, strpos($filename,'.'), strlen($filename)-1);
if(!in_array($ext,$allowed_filetypes)) { die("Du har inte laddat upp en .xml- eller .csv-fil. Var vänlig försök igen."); }
if(!is_writable($upload_path)) { die("Du kan inte ladda upp filen till mappen."); }
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'],$upload_path . $filename)) {
$upload_sucess = 'Filen laddades upp utan problem. Du kan kolla på den <a href="' . $upload_path . $filename . '" title="$filename">här</a>';
// hämta ut data från xml-filen
$xml = simplexml_load_file($upload_path . $filename);
foreach ($xml->product as $product) {
$sale = $product->fields->sale;
$product_image = mysql_real_escape_string($product->fields->extraImageProductLarge);
$product_name = mysql_real_escape_string($product->name);
$product_brand = mysql_real_escape_string($product->brand);
$product_store = mysql_real_escape_string($product->programName);
$product_price = mysql_real_escape_string($product->price);
$product_url = mysql_real_escape_string($product->productUrl);
$product_category = mysql_real_escape_string($product->fields->productGroup);
$product_race = mysql_real_escape_string($product->fields->gender);
$product_info = mysql_real_escape_string($product->description);
// hämta data från databasen om de redan tillagda produkterna
$query = "SELECT * FROM products";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
$db_image = $row['img'];
$db_name = $row['title'];
$db_brand = $row['brand'];
$db_store = $row['store'];
$db_price = $row['price'];
$db_url = $row['url'];
$db_category = $row['category'];
$db_race = $row['race'];
$db_info = $row['info'];
}
if ($sale == 'true') {
$query = "INSERT INTO products (img, title, brand, store, price, url, category, race, visible, info) VALUES ";
$query .= "('$product_image', '$product_name', '$product_brand', '$product_store', $product_price, '$product_url', '$product_category', '$product_race', 1, '$product_info') ";
$query .= "ON DUPLICATE KEY UPDATE url = '$product_url'";
$insert = mysql_query($query) or die (mysql_error());
$query = "DELETE FROM products WHERE url <> '$product_url'";
$delete = mysql_query($query) or die (mysql_error());
}
}
Det är denna snutt som strular för mig:
PHP-kod:
$query = "DELETE FROM products WHERE url <> '$product_url'";
$delete = mysql_query($query) or die (mysql_error());
Vad som händer
Filen laddas upp, produkterna läggs till, allt går fint.
Sen när den kommer till att ta bort produkter så tar den bort ALLA produkter UTOM den sist tillagda.. hm.
Någon med några idéer varför denna kod är så elak och förstör för mig? :/
Eller du kanske kommer på en annan lösning på mitt problem?
Tack på förhand, Fredrik