Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Scrivere Xml

  1. #1

    Scrivere Xml

    Ciao a tutti. Ho un file php che mi carica delle immagini e dei testi.
    Io vorrei per ogni immagine caricata, tramite php scrivere sul file images.xml una riga che aggiunge l'immagine caricata.
    Sono disperata anche perchè davvero di php ci capisco poco.
    Grazie in anticipo



    Il mio xml è così composto:
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
    - <images>
    - <pic>
    <image>\public\inserisci\image_files\aria01.jpg</image>
    </pic>
    - <pic>
    <image>\public\inserisci\image_files\aria02.jpg</image>
    </pic>
    </images>

    Mentre la pagina che carica le immagini è la seguente:


    <?php ini_set("memory_limit", "200000000"); // for large images so that we do not get "Allowed memory exhausted"?>
    <?php
    // upload the file
    if ((isset($_POST["submitted_form"])) && ($_POST["submitted_form"] == "image_upload_form")) {

    // file needs to be jpg,gif,bmp,x-png and 4 MB max
    if (($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg" || $_FILES["image_upload_box"]["type"] == "image/gif" || $_FILES["image_upload_box"]["type"] == "image/x-png") && ($_FILES["image_upload_box"]["size"] < 4000000))
    {


    // some settings
    $max_upload_width = 2592;
    $max_upload_height = 1944;

    // if user chosed properly then scale down the image according to user preferances
    if(isset($_REQUEST['max_width_box']) and $_REQUEST['max_width_box']!='' and $_REQUEST['max_width_box']<=$max_upload_width){
    $max_upload_width = $_REQUEST['max_width_box'];
    }
    if(isset($_REQUEST['max_height_box']) and $_REQUEST['max_height_box']!='' and $_REQUEST['max_height_box']<=$max_upload_height){
    $max_upload_height = $_REQUEST['max_height_box'];
    }


    // if uploaded image was JPG/JPEG
    if($_FILES["image_upload_box"]["type"] == "image/jpeg" || $_FILES["image_upload_box"]["type"] == "image/pjpeg"){
    $image_source = imagecreatefromjpeg($_FILES["image_upload_box"]["tmp_name"]);
    }
    // if uploaded image was GIF
    if($_FILES["image_upload_box"]["type"] == "image/gif"){
    $image_source = imagecreatefromgif($_FILES["image_upload_box"]["tmp_name"]);
    }
    // BMP doesn't seem to be supported so remove it form above image type test (reject bmps)
    // if uploaded image was BMP
    if($_FILES["image_upload_box"]["type"] == "image/bmp"){
    $image_source = imagecreatefromwbmp($_FILES["image_upload_box"]["tmp_name"]);
    }
    // if uploaded image was PNG
    if($_FILES["image_upload_box"]["type"] == "image/x-png"){
    $image_source = imagecreatefrompng($_FILES["image_upload_box"]["tmp_name"]);
    }


    $remote_file = "image_files/".$_FILES["image_upload_box"]["name"];
    imagejpeg($image_source,$remote_file,100);
    chmod($remote_file,0644);



    // get width and height of original image
    list($image_width, $image_height) = getimagesize($remote_file);

    if($image_width>$max_upload_width || $image_height >$max_upload_height){
    $proportions = $image_width/$image_height;

    if($image_width>$image_height){
    $new_width = $max_upload_width;
    $new_height = round($max_upload_width/$proportions);
    }
    else{
    $new_height = $max_upload_height;
    $new_width = round($max_upload_height*$proportions);
    }


    $new_image = imagecreatetruecolor($new_width , $new_height);
    $image_source = imagecreatefromjpeg($remote_file);

    imagecopyresampled($new_image, $image_source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
    imagejpeg($new_image,$remote_file,100);

    imagedestroy($new_image);
    }

    imagedestroy($image_source);


    header("Location: submit.php?upload_message=IMMAGINE INSERITA CORRETTAMENTE&upload_message_type=success&show_ima ge=".$_FILES["image_upload_box"]["name"]);
    exit;
    }
    else{
    header("Location: submit.php?upload_message=IMMAGINE NON INSERITA&upload_message_type=error");
    exit;
    }
    }
    ?>


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Fiorepentafaretra - Pannello di amministrazione</title>
    <style type="text/css">
    <!--
    body,td,th {
    }

    .upload_message_success {
    padding:4px;
    background-color:#009900;
    border:1px solid #006600;
    color:#FFFFFF;
    margin-top:10px;
    margin-bottom:10px;
    }

    .upload_message_error {
    padding:4px;
    background-color:#CE0000;
    border:1px solid #990000;
    color:#FFFFFF;
    margin-top:10px;
    margin-bottom:10px;
    }
    .Stile1 {
    font-size: 16px
    }
    body {
    background-color: #A6733E;
    }
    .Stile4 {
    color: #333333;
    font-family: Verdana;
    font-size: 12px;
    font-weight: bold;
    }
    .Stile5 {color: #FFFFFF; font-weight: bold; font-size: 12px; }
    .Stile6 {
    font-family: Verdana;
    font-weight: bold;
    }
    .Stile7 {font-size: 12px}

    -->
    </style>
    <script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
    </head>

    <body>

    <table width="500" border="2" align="center" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF">
    <tr>
    <td><table width="100%" border="0" bgcolor="#E6E6E6">
    <tr>
    <td> <h1 align="center" class="Stile1" style="margin-bottom: 0px">[img]su_submit.jpg[/img]</h1>

    <?php if(isset($_REQUEST['upload_message'])){?>
    <div class="upload_message_<?php echo $_REQUEST['upload_message_type'];?>">
    <div align="center"><?php echo htmlentities($_REQUEST['upload_message']);?> </div>
    </div>
    <?php }?>
    <table width="100%" border="0" align="center"> <td bgcolor="#742425"><div align="center" class="Stile5">INSERISCI UN'IMMAGINE</div></td>

    <tr>
    <td><table width="100%" border="0" align="center">
    <tr>
    </tr>
    </table>
    <form action="submit.php" method="post" enctype="multipart/form-data" name="image_upload_form" id="image_upload_form" style="margin-bottom:0px;">
    <label>L'immagine non può superare 4MB e deve necessariamente essere una jpg.</label>


    La dimensione esatta dell'immagine deve essere 520 x 314 px.

    Ogni immagine deve avere il nome della sezione di riferimento :

    homepage.jpg;
    acqua.jpg;
    aria.jpg;
    fuoco.jpg;
    spirito.jpg;
    terra.jpg



    <table width="500" border="0">

    <tr>
    <td width="359"><div align="right">
    <input name="image_upload_box" type="file" id="image_upload_box" size="30" />
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="submit" value="Inserisci" />
    </div></td>
    </tr>
    </table>


    <div align="left"></div>
    <label></label>
    <div align="center">
    <input name="submitted_form" type="hidden" id="submitted_form" value="image_upload_form" />
    </div>
    </form></td>
    </tr>
    </table>
    <div align="center">
    <?php if(isset($_REQUEST['show_image']) and $_REQUEST['show_image']!=''){?>
    </div>

    <div align="center">
    <?php }?>
    </div></td>
    </tr>
    </table>
    <table width="100%" border="0" align="center" bgcolor="#E6E6E6">
    <tr>
    <td><form action="crea_homepage.php" method="post" name="form" id="form" onsubmit="if (nome.value=='') {alert('Inserisci il testo per la homepage'); return false;}">
    <center>
    <table width="500" border="0">
    <tr>
    <td colspan="2" bgcolor="#742425"><div align="center" class="Stile5">MODIFICA IL TESTO DELLE TUE PAGINE</div></td>
    </tr>
    <tr>
    <td colspan="2"></td>
    </tr>
    <tr>
    <td colspan="2"><div align="center">Sezione homepage</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome" type="text" class="login_home" id="nome" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit" id="Submit" value="Inserisci Homepage" />
    </div></td>
    </tr>
    </table>
    </form>
    <form action="crea_aria.php" method="post" name="form" id="form" onsubmit="if (nome1.value=='') {alert('Inserisci il testo per la sezione aria'); return false;}">
    <table width="500" border="0">
    <tr>
    <td colspan="2"><div align="center">Sezione aria</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome1" type="text" class="login_home" id="nome1" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit1" id="Submit1" value="Inserisci Aria" />
    </div></td>
    </tr>
    </table>
    </form>
    <form action="crea_acqua.php" method="post" name="form" id="form" onsubmit="if (nome2.value=='') {alert('Inserisci il testo'); return false;}">
    <table width="500" border="0">
    <tr>
    <td colspan="2"><div align="center">Sezione acqua</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome2" type="text" class="login_home" id="nome2" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit2" id="Submit2" value="Inserisci Acqua" />
    </div></td>
    </tr>
    </table>
    </form>
    <form action="crea_terra.php" method="post" name="form" id="form" onsubmit="if (nome3.value=='') {alert('Inserisci il testo'); return false;}">
    <table width="500" border="0">
    <tr>
    <td colspan="2"><div align="center">Sezione terra</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome3" type="text" class="login_home" id="nome4" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit3" id="Submit3" value="Inserisci Terra" />
    </div></td>
    </tr>
    </table>
    </form>
    <form action="crea_fuoco.php" method="post" name="form" id="form" onsubmit="if (nome4.value=='') {alert('Inserisci il testo'); return false;}">
    <table width="500" border="0">
    <tr>
    <td colspan="2"><div align="center">Sezione fuoco</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome4" type="text" class="login_home" id="nome4" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit4" id="Submit4" value="Inserisci Fuoco" />
    </div></td>
    </tr>
    </table>
    </form>
    <form action="crea_spirito.php" method="post" name="form" id="form" onsubmit="if (nome5.value=='') {alert('Inserisci il testo'); return false;}">
    <table width="500" border="0">
    <tr>
    <td colspan="2"><div align="center">Sezione spirito</div></td>
    </tr>
    <tr>
    <td width="359"><div align="right">
    <textarea name="nome5" type="text" class="login_home" id="nome5" value="" cols="40" rows="2"></textarea>
    </div></td>
    <td width="131"><div align="left">
    <input type="submit" name="Submit5" id="Submit5" value="Inserisci Spirito" />
    </div></td>
    </tr>
    </table>
    </form></td>
    </tr>
    </table>
    </tr>

    </table>
    </body>
    </html>

  2. #2
    Grazie per avere riempito un paginone di codice che nessuno leggerà mai per intero!

    Scherzo naturalmente.... ad ogni modo, ti posso dire che scrivere in un file XML, con PHP, è come scrivere in uno di testo.
    Ci sono delle funzioni specifiche per l'XML ma dici di essere poco esperta. Per cui passo a consigliarti la soluzione, magari meno elegante, ma forse più semplice.

    Ti consiglio di dare un'occhiata al manuale ufficiale e alla funzione fwrite() per cominciare.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3

    chiedo venia

    Mi spiace per aver riempito il paginone.. io in verità ho già visto vome potrei scrivere... fopen fwrite, il fatto è che non so come integrarlo nel form che inserisce le immagini.
    Come posso inserire una riga nel momento in cui inserisco un'immagine?
    Ecco perchè ho inserito tutto il codice, non so come integrare quel pezzetto di php..
    Grazie cmq!

  4. #4

    up

    nessuno mi riesce ad aiutare?

  5. #5
    Lo script che compone il file XML è quello cui punta la action della form quindi submit.php.
    Da quello che risco a capire nel fiume di simboli che compone il codice che hai postato, credo tu abbia dei problemi nel meccanismo di come passare le variabili in PHP.

    La pagina che contiene la form è un paginone che contiene anche altre porzioni di codice, che sono quelle che si occupano di ricevere le variabili della form stessa.
    PHP ermette di fare tutto in una pagina di script, però non come hai fatto tu.
    Passo a spiegarti come devi fare, separando i due script e rendendo tutto un po' più leggibile ed ottimizzato.

    Allora.
    Nella pagina della form (chiamiamola inserimento.htm) metti solo il codice HTML per visualizzare la form.
    Form che punta alla pagina submit.php che processerà gli input.

    Quest'ultima pagina recupera dagli array $_POST e $_FILES quanto passato dall'utente.
    Per riconoscere l'estensione dell'immagine, puoi usare questo codice:
    Codice PHP:
    $tipo $_FILES['image_upload_box']['type'];
    if (
    $tipo != "image/jpeg" && != "image/gif" && != "image/x-png") { $tipo "";}

    switch(
    $tipo) {
        case 
    "image/jpeg":
        
    $image_source imagecreatefromjpeg($_FILES["image_upload_box"]["tmp_name"]);
        break;
        case 
    "image/gif":
        
    $image_source imagecreatefromgif($_FILES["image_upload_box"]["tmp_name"]);
        break;
        case 
    "image/x-png":
        
    $image_source imagecreatefrompng($_FILES["image_upload_box"]["tmp_name"]);
        break;
        default:
       
    // nel caso non sia nessuno dei suddetti
       
    echo "Spiacente, il tipo di file non è accettato.
       
    <a href=\\"
    javascript:history.back()\\">Torna alla form</a>";
        break;

    Questa è una prima ottimizzazione del tuo codice.
    Il nome del file, così come lo estrapoli $_FILES['name'] è quello che metterai nel XML, per cui vai a comporre, per ogni immagine caricata la stringa xml.

    Codice PHP:
    $nome_foto $_FILES['name'];
    $nodo_xml .= "
    <pic>
    <image>\percorso\alla\foto\$nome_foto</image> 
    </pic>
    "

    Tutto questo ciclo viene ripetuto N volte, dove N è il numero di immagini caricate dall'utente.
    Di volta in volta, quindi, la variabile $nodo_xml, verrà aggiunta del nuovo nodo.

    Usciti da questo ciclo, basterà fare così:
    Codice PHP:
    $inizio_xml = "
    <?xml version=\\"1.0\\" encoding=\\"utf-8\\" standalone=\\"yes\\" ?> 
       <images>
    ";
    $chiusura_xml = "
       </images>
    ";

    $xml = $inizio_xml.$nodo_xml.$chiusura_xml;
    Questo è il momento di scrivere il file XML nel server.
    Codice PHP:
    $handle fopen("/percorso/al/file/images.xml""w");
    fwrite($handle$xml);
    fclose($handle); 
    Ho scritto direttamente qui sul forum e potrebbero esserci degli errori di sintassi.
    Ad ogni modo, spero tu abbia capito il concetto ed il meccanismo.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  6. #6

    santo subito

    Ti ringrazio!
    Controllo il codice, ci provo e ti faccio sapere!

  7. #7

    ci sono riuscita! (quasi)

    Ok funziona! L'unico problema che mi resta, è che mi sovrascrive il file xml piuttosto che aggiornarlo con la lista.
    La riga non me l'aggiunge, me la sostituisce.
    Che si fa? :_) grazie!

    Ecco il codice php:

    <?php
    function getExtension($str) {
    $i = strrpos($str,".");
    if (!$i) { return "";
    } $l = strlen($str) - $i;
    $ext = substr($str,$i+1,$l);
    return $ext; }
    if(isset($_POST['Submit'])) {
    $image=$_FILES['image']['name'];
    if ($image) {
    $filename = stripslashes($_FILES['image']['name']);
    $extension = getExtension($filename);
    $extension = strtolower($extension);
    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")){
    echo '<h1>Puoi inserire solo jpg</h1>';
    $errors=1;
    }else{
    $image_name=time().'.'.$extension;
    $newname="image_files/".$image;

    $copied = copy($_FILES['image']['tmp_name'], $newname);if (!$copied) {
    echo '<h1>Copy unsuccessfull!</h1>';
    $errors=1;}}}}
    if(isset($_POST['Submit']) && !$errors) { echo "<h1>Immagine salvata</h1>"; }
    $nodo_xml .= "<pic>
    <image>$image</image>
    </pic>
    ";
    $inizio_xml = "
    <images>
    ";
    $chiusura_xml = "
    </images>
    ";

    $xml = $inizio_xml.$nodo_xml.$chiusura_xml;
    $handle = fopen("images.xml", "w");
    fwrite($handle, $xml);
    fclose($handle);

    ?>
    <form name="newad" method="post" enctype="multipart/form-data" action="">
    <table>
    <tr><td><input type="file" name="image"></td></tr> <tr><td>
    <input name="Submit" type="submit" value="Upload image"></td></tr>
    </table>
    </form>

  8. #8
    beh.... oltre che copiare ed incollare un codice, sarebbe il caso di dare un'occhiata al manuale ufficiale per vedere la sintassi corretta e le varie opzioni delle funzioni che qualcuno ha usato per lo script suggerito.

    Se lo avessi fatto, avresti visto che la funzione fwrite() oltre alla stringa del file da scrivere, prevede un altro parametro.

    Nello script che ho fatto io c'è W, in quanto pensavo che non avessi necessità di aggiungere singole stringhe.
    Per quello che serve a te, il parametro è A (append).

    Il discorso è che devi fare attenzione alla chiusura dell'XML.
    Se non programmi con attenzione l'aggiunta di nodi, rischi che ti esca una cosa del tipo:

    codice:
    <?xml version="1.0" encoding="utf-8" standalone="yes" ?> 
    - <images>
    - <pic>
    <image>\public\inserisci\image_files\aria01.jpg</image> 
    </pic>
    - <pic>
    <image>\public\inserisci\image_files\aria02.jpg</image> 
    </pic>
    </images>  
    - <pic>
    <image>\public\inserisci\image_files\aria03.jpg</image> 
    </pic>
    - <pic>
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    ho provato, e in un milione di modi. Ho letto di tutto, ho la testa piena di nozioni.
    Ma non funziona, MAI.

  10. #10
    Originariamente inviato da danywebcolf
    ho provato, e in un milione di modi. Ho letto di tutto, ho la testa piena di nozioni.
    Ma non funziona, MAI.
    Se c'è una cosa che onestamente mi fa perdere la voglia di rispondere nel forum è proprio il fatto che qualcuno si lamenti che uno script non funzioni, senza però specificare cosa è che non va!

    Il tuo problema è che sovrascrive???
    Puoi agire in due modi: nella funzione fwrite() cambi il parametro W con A, oppure fai in un secondo modo che passo a spiegarti senza modifcare il parametro.

    Leggi il tuo file XML, magari con la funzione file_get_contents() che permette di inserire tutto un file in una stringa.
    Togli l'ultimo tag (</images>), sia con explode(), sia con un semplice str_replace(), aggiungi una nuova stringa semplicemente concatenando quanto ottenuto con il metodo appena spiegato con quella nuova, rimetti il tag di chiusura del XML e sovrascirvi il tuttto.

    Qualcosa del genere.
    Codice PHP:
    $xml file_get_contents("path/to/file.xml")
    $xml str_replace("</images>"""$xml);

    $new_nodo_xml .= 
    <pic> 
    <image>percorsoallafoto\$nome_foto</image> 
    </pic> 
    "
    ;

    $xml $xml.$new_nodo_xml."</images>";

    $handle fopen("path/to/file.xml""w"); 
    fwrite($handle$xml); 
    fclose($handle); 
    Chiaro?
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

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 © 2025 vBulletin Solutions, Inc. All rights reserved.