Kom ihåg mig?
Home Menu

Menu


sql-satts som inte vill fungera..

Ämnesverktyg Visningsalternativ
Oläst 2012-04-11, 01:27 #1
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Standard sql-satts som inte vill fungera..

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($filenamestrpos($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
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 02:05 #2
makaflOws avatar
makaflOw makaflOw är inte uppkopplad
Medlem
 
Reg.datum: Sep 2011
Inlägg: 167
makaflOw makaflOw är inte uppkopplad
Medlem
makaflOws avatar
 
Reg.datum: Sep 2011
Inlägg: 167
Borde du inte byta ut <> mot = eller tänker jag galet?
makaflOw är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 02:09 #3
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Citat:
Ursprungligen postat av makaflOw Visa inlägg
Borde du inte byta ut <> mot = eller tänker jag galet?
Nej det kan jag inte göra. Tror jag?

då skulle det bli såhär:


TA BORT FRÅN products DÄR url ÄR LIKA MED vad som finns i xml-filen.

Jag vill ju ha det såhär:

TA BORT FRÅN products DÄR url INTE ÄR LIKA MED vad som finns i xml-filen.
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 07:52 #4
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
nosnaj nosnaj är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Mar 2005
Inlägg: 1 012
Du jämför ju inte med xml-filen utan din kod är:
Ta bort alla produkter som inte är den senaste i loopen (xml-filen).

Antingen får du ta bort alla produkter innan du lägger in allt från xml-filen, eller så har du en flagga (en ytterligare kolumn) som anger att produkten lagts till från xml-filen och ej sak tas bort i din delete-sats.
nosnaj är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 07:55 #5
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Om din delete-sql skulle fungera skulle den radera allt utom den produkt du precis lagt till (eller uppdaterat) i databasen.

Det du möjligen kan göra är att bygga upp en kommaseparerad lista över urler och köra en

Kod:
DELETE FROM products WHERE url NOT IN ($product_urls)
Men det är nog vettigare att lägga till en kolumn som heter "updated" eller "changed" med datum och tid för din import och sedan ta bort alla som har ett för gammal värde.
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 11:15 #6
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Smarta grabbar!! Ska sätta mig ned och fixa detta direkt.
Ska jag vara ärlig så satt jag faktiskt och tänkte på exakt samma lösning som er redan från början.. Men jag var så jäkla trött att jag hoppades att den lilla sql-sattsen skulle fungera för mig :P hehe

Tack igen!
jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Oläst 2012-04-11, 12:25 #7
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
jonssondesign jonssondesign är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2010
Inlägg: 709
Tack, det fungerar utmärkt nu!

Skapade en ny kolumn med 0 eller 1.
0 = borttagning
1 = var kvar

jonssondesign är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 18:47.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017