Visualizzazione risultati 1 fino 7 di 7

Discussione: Problema scrittura file XML con controllo attributo

  1. #1
    Guest

    Predefinito Problema scrittura file XML con controllo attributo

    Salve a tutti!
    Ho un problemino...mi sto rimbecillendo con le variabili e non riesco a capire dov'è il problema...praticamente devo registrare degli ordini. Apro il file xml per scriverci sopra...lo vorrei scrivere nel seguente modo

    Codice:
    <carello>
    <utente id="tizio">
           <elemento>
                    <nome></nome>
                    <costo></costo>
                    <tipo></tipo>
             </elemento>
    </utente>
    E vorrei fare la scrittura in modo che se l'utente che cerca di scrivere è già presente continua a scrivere sotto il suo Id...altrimenti si crea un nuovo nodo col nuovo nome dell'utente come Id.

    Ho scritto questo codice ma sbaglio sicuramente qualcosa nel passaggio padre-figlio per scrivere ma non capisco dove...Help!

    Codice PHP:
    session_start();

    foreach (
    $xml->children() as $utente) {
    if (
    $utente->attributes()->id == $_SESSION['utent']) {

    $p=$utente->addChild('elemento');
    $p->addChild('nome',$_POST['nomea']);
    $p->addChild('costo',$_POST['costoa']);
    $p->addChild('tipo',$_POST['tipoa']);
    $xml->asXML('carrello.xml');
    }
    else{
    $elemento=$xml->addChild('utente');
    $elemento->addAttribute('id',$_SESSION['utent']);
    $p=$elemento->addChild('elemento');
    $p->addChild('nome',$_POST['nomea']);
    $p->addChild('costo',$_POST['costoa']);
    $p->addChild('tipo',$_POST['tipoa']);
    $xml->asXML('carrello.xml');
    }
    }
    }

  2. #2
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Prova così:
    Codice PHP:
    foreach($xml->children() as $utente){
    if(
    $utente->attributes()->id == $_SESSION['utent']){
    $elemento = $utente;
    break;
    }
    }
    if(!
    $elemento){
    $elemento = $xml->addChild('utente');
    $elemento->addAttribute('id', $_SESSION['utent']);
    }
    $p = $elemento->addChild('elemento');
    $p->addChild('nome', $_POST['nomea']);
    $p->addChild('costo', $_POST['costoa']);
    $p->addChild('tipo', $_POST['tipoa']);
    $xml->asXML('carrello.xml');

  3. #3
    Guest

    Predefinito

    Siete la mia salvezza!!! :D ma sbagliavo con l'indirizzamento figlio-padre vero?

  4. #4
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Sbagliavi nel ciclo: ogni volta che veniva eseguito aggiungeva qualcosa.

  5. #5
    Guest

    Predefinito

    Ah XD infatti poi aveva creato dei flag spostando la scrittura fuori dal ciclo...ma facevo lo stesso problema...


    Avrei un'altro quesito:
    Se volessi stampare tutti gli elementi di un utente con un un certo id?

  6. #6
    karl94 non è connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    17,745

    Predefinito

    Dovresti prima identificare l'elemento utente avente quel dato id mediante il foreach del mio codice, una volta trovato, iterare tra tutti i suoi figli sempre con un foreach.

  7. #7
    Guest

    Predefinito

    Riposto su questa discussione in quanto sto tentando di articolare maggiormente il lavoro che mi hai passato.

    La registrazione degli ordini è ok...Adesso mi sono accorto della mancanza di una variabile mancante...ossia la Quantità degli elementi che si ordinano.
    Che si deve incrementare ogni volta che aggiungo e diminuire ogni volta che tolgo (con annessa condizione che se arriva la quantità a zero si deve eliminare l'oggetto)

    Adesso con la tua struttura di scrittura sul mio file carrello come posso controllare se il file è già presente nel carrello e se presente aumentare di uno la quantità oppure se non presente aggiungerlo. (ho capito che si deve mettere un foreach ma non riesco a determinare le variabili da far scorrere)

    Codice PHP:
    foreach($xml->children() as $utente){
    if(
    $utente->attributes()->id == $_SESSION['utent']){
    $elemento = $utente;
    break;
    }
    }
    if(!
    $elemento){
    $elemento = $xml->addChild('utente');
    $elemento->addAttribute('id',$_SESSION['utent']);
    }
    foreach(
    $elemento-> .....
    $p = $elemento->addChild('elemento');
    $p->addChild('quantità',);
    $p->addChild('nome',$_POST['nume']);
    $p->addChild('costo',$_POST['custo']);
    $p->addChild('tipo',$_POST['tupo']);
    $xml->asXML('carrello.xml');
    (una volta risolto il controllo posso implementare anche la struttura di eliminazione che ho già pronta...)

    -

    ho tentato con questo pezzo di codice ma non riesco ad uscirne...

    Codice PHP:
    $f=0;

    foreach(
    $xml->children() as $utente){
    if(
    $utente->attributes()->id == $_SESSION['utent']){
    $elemento = $utente;
    break;
    }
    }
    if(!
    $elemento){
    $elemento = $xml->addChild('utente');
    $elemento->addAttribute('id',$_SESSION['utent']);
    }
    foreach(
    $xml->children() as $utente){
    if(
    $utente->attributes()->id == $_SESSION['utent']){
    foreach(
    $utente->elemento as $elemento){
    if ((
    $elemento->nome==$_POST['nume'])&&($elemento->costo==$_POST['custo'])&&($elemento->tipo==$_POST['tupo'])){
    echo
    "Articolo già presente lo incrementeremo!!<br>";
    $o=$elemento->quantità;
    $o++;
    $elemento->quantità=$o;
    $f = fopen("carrello.xml", "w");
    fwrite($f, $xml->asXML());
    fclose($f);
    $f=1;
    break;
    }
    }}}
    if (
    £f==0){
    $p = $elemento->addChild('elemento');
    $p->addChild('nome',$_POST['nume']);
    $p->addChild('costo',$_POST['custo']);
    $p->addChild('tipo',$_POST['tupo']);
    $p->addChild('quantità',1);
    $xml->asXML('carrello.xml');
    }
    HelpMe
    Ultima modifica di javascripter : 09-06-2011 alle ore 19.55.03 Motivo: up/post consecutivo

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •