Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema inserimento in db di dati da xml

    Ciao a tutti,
    scusate per il titolo ma ho cercato di semplificarlo il più possibile.
    Ho un problema ad inserire in un db dei dati presi da un file xml.
    Non so se è giusto cosi ma la procedura che ho utilizzato per il recupero dei dati dal file xml è la seguente e funziona:
    codice:
    $objDOM = new DOMDocument();  
      $objDOM->load("articoli.xml"); //make sure path is correct  
     
     
      $product = $objDOM->getElementsByTagName("Product");  
      // for each note tag, parse the document and get values for  
      // tasks and details tag.  
     
      foreach( $product as $value )  
      {  
      //echo $product.' '.$value; 
        $InternalID = $value->getElementsByTagName("InternalID");  
        $InternalID_output  = $InternalID->item(0)->nodeValue;  
     
        $Code = $value->getElementsByTagName("Code");  
        $Code_output  = $Code->item(0)->nodeValue;  
     
        $Description = $value->getElementsByTagName("Description");  
        $Description_output  = $Description->item(0)->nodeValue;  
    
        $Category = $value->getElementsByTagName("Category");  
        $Category_output  = $Category->item(0)->nodeValue; 
    
        $Subcategory = $value->getElementsByTagName("Subcategory");  
        $Subcategory_output  = $Subcategory->item(0)->nodeValue;
    
        $Vat = $value->getElementsByTagName("Vat");  
        $Vat_output  = $Vat->item(0)->nodeValue;
    
        $Um = $value->getElementsByTagName("Um");  
        $Um_output  = $Um->item(0)->nodeValue;
    
        $NetPrice1 = $value->getElementsByTagName("NetPrice1");  
        $NetPrice1_output  = $NetPrice1->item(0)->nodeValue;
    
        $GrossPrice1 = $value->getElementsByTagName("GrossPrice1");  
        $GrossPrice1_output  = $GrossPrice1->item(0)->nodeValue;
    
        $SizeUm = $value->getElementsByTagName("SizeUm");  
        $SizeUm_output  = $SizeUm->item(0)->nodeValue;
    
        $WeightUm = $value->getElementsByTagName("WeightUm");  
        $WeightUm_output  = $WeightUm->item(0)->nodeValue;
    
        $Notes = $value->getElementsByTagName("Notes");  
        $Notes_output  = $Notes->item(0)->nodeValue;
    
        $ManageWarehouse = $value->getElementsByTagName("ManageWarehouse");  
        $ManageWarehouse_output  = $ManageWarehouse->item(0)->nodeValue;
    
        $MinStock = $value->getElementsByTagName("MinStock");  
        $MinStock_output  = $MinStock->item(0)->nodeValue;
    
        $AvailableQty = $value->getElementsByTagName("AvailableQty");  
        $AvailableQty_output  = $AvailableQty->item(0)->nodeValue;
    
        $ImageFileName = $value->getElementsByTagName("ImageFileName");  
        $ImageFileName_output  = $ImageFileName->item(0)->nodeValue;
    
    
        echo "InternalID: " . $InternalID_output . "
    ";  
    	echo "Code: " . $Code_output . "
    ";
    	echo "Description: " . $Description_output . "
    ";
    	echo "Category: " . $Category_output . "
    ";
    	echo "Subcategory: " . $Subcategory_output . "
    ";
    	echo "Vat: " . $Vat_output . "
    ";
    	echo "Um: " . $Um_output . "
    ";
    	echo "NetPrice1: " . $NetPrice1_output . "
    ";
    	echo "GrossPrice1: " . $GrossPrice1_output . "
    ";
    	echo "SizeUm: " . $SizeUm_output . "
    ";
    	echo "WeightUm: " . $WeightUm_output . "
    ";
    	echo "Notes: " . $Notes_output . "
    ";
    	echo "ManageWarehouse: " . $ManageWarehouse_output . "
    ";
    	echo "MinStock: " . $MinStock_output . "
    ";
    	echo "AvailableQty: " . $AvailableQty_output . "
    ";
    	echo "ImageFileName: " . $ImageFileName_output . "
    ";
    
    }
    A questo punto mi si pone il problema di dover inserire tutti i dati in un db ma facendo attenzione che i risultati di "Category" e "Subcategory" non siano già presenti e se non sono presenti li inserisce. Ho provato e riprovato ma senza risultati.

    Qualcuno può darmi una mano a terminarlo?
    La procedura che ho utilizzato per il recupero dei dati dal file xml è giusta o ne esistono di più semplici?
    Grazie

  2. #2
    Moderatore di Off Topic, Kickstarter e XML L'avatar di Sky
    Registrato dal
    Jul 2000
    residenza
    Roma
    Messaggi
    1,053
    Puoi specificare che i campi category e subcategory del database abbiano un indice "Unique".

    http://dev.mysql.com/doc/refman/5.0/...ate-index.html

    A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. This constraint does not apply to NULL values except for the BDB storage engine. For other engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL. If you specify a prefix value for a column in a UNIQUE index, the column values must be unique within the prefix.
    Lo Stato deve dare ai cittadini, come diritto, ciò che la mafia dà come favore.
    Carlo Alberto dalla Chiesa

    Facebook | Twitter | Last.fm | LinkedIn | Quora

  3. #3
    Ciao, quindi dovrei modificare le tabelle del db.
    Non c'è una soluzione utilizzando solo php?
    Cioé, io avrei preferito estrarre tutti i dati dal file xml e confrontarli con quelli già presenti nel db. Se non ci sono li inserisce e se invece sono già presenti salta.
    Penso si possa fare ma non ho idea (ne ho provato di tutte), di come mettere giù lo script.

  4. #4
    Fai una semplice query per vedere se i dati sono presenti

    Codice PHP:
    $sql "SELECT * FROM nome_tabella
            WHERE category = '
    $Category_output'
            AND subcategory = '
    $Subcategory_output'":

    $res mysql_query($sql);

    if (
    mysql_num_rows($res)) {
        
    // category e subcategory gia' presenti
    } else {
        
    // inserisci nel database


  5. #5
    Ciao e grazie per la risposta.
    Funziona tutto ma purtroppo ho riscontrato un altro problema che non riesco a risolvere e che mi pare alquanto complicato.
    Non avevo pensato che ogni categoria contiene più sottocategorie e che queste (purtroppo!), vanno nello stesso campo utilizzato dalla categoria (sarà poi lo script tramite l'id di un altro campo a capire quale è una categoria e quale una sottocategoria).
    In pratica i dati andrebbero inseriti cosi:
    codice:
    Categoria1
    -- Sottocategoria1
    -- Sottocategoria2
    -- ecc
    Categoria2
    -- Sottocategoria1
    -- Sottocategoria2
    -- ecc
    E può anche accadere che una categoria non contenga sottocategorie.
    E' risolvibile questo problema?
    Ho cercato per tutto il forum qualcosa di analogo ed anche sul web ma non trovo nulla che possa darmi una mano a comprendere come fare.

  6. #6
    Niente, le sto provando tutte ma non riesco o riesco facendo solo casini.
    Rischio di buttare notti e notti di lavoro se qualcuno non mi da una mano.
    Forza ragazzi, qualcuno in gamba che mi dia una mano

  7. #7
    Ho fatto una cosa cosi e vorrei che qualcuno dei più esperti mi dica se va bene o si può semplificare:
    codice:
    $sql = "SELECT * FROM categories_description WHERE categories_name = '$Category_output'";
    $res = mysql_query($sql);
    
    if (mysql_num_rows($res)) {
    
    } else {
    
    mysql_query("INSERT INTO categories_description 
    (categories_id, language_id, categories_name) VALUES('$aumento_cat', '4', '$Category_output' ) ") 
    or die(mysql_error()); 
     
    mysql_query("INSERT INTO categories_description 
    (categories_id, language_id, categories_name) VALUES('$aumento_cat', '1', '' ) ") 
    or die(mysql_error());  
    
    mysql_query("INSERT INTO categories 
    (categories_id) VALUES('$aumento_cat') ") 
    or die(mysql_error());  
    
    }
    A questo punto vi domanderete il perché di cosi tanti INSERT. In effetti il secondo serve ad inserire un campo che deve avere identico id del primo ($aumento_cat), il secondo valore "1" ed il terzo deve essere vuoto.

    Avevo pensato di fare qualcosa, una sorta di loop non appena è stato elaborato il secondo INSERT ovvero dopo che la categoria è stata inserita. Inserita la categoria ci vorrebbe qualcosa che inserisca tutte le sottocategorie corrispondenti. Si può fare?

  8. #8
    Nessuno che abbia voglia di darmi una manina?

  9. #9

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.