Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 24
  1. #11
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    mmmm...secondo me ci sono alcune cose che dovresti riguardare:
    1. evitare di usare il break per fermare il ciclo for, piuttosto cambiare tipo di struttura (es. while);
    2. dentro il ciclo for controlli se l'idprodotto è uguale a quello passato alla funzione, e se la condizione non si verifica, automaticamente aggiungi l'elemento in coda all'array. metti caso che il tuo array contenga già 2 elementi:
    [0]=>(idprodotto=1,quantità=2)
    [1]=>(idprodotto=10,quantità=50)
    quando chiami la funzione carrello(10,50), il ciclo for viene eseguito, l'elemento di posizione 0 ha un'id prodotto diverso da quello passato e quindi l'elemento passato viene inserito come un nuovo elemenco, sebbene fosse già presente.
    3. altro non saprei...ho fatto delle prove ma continua a non funzionare...
    think simple think ringo

  2. #12
    Grazie per i suggerimenti

    Nel tuo script ho riscontrato qesto bug

    Codice PHP:

    // Test
    /* con questa sequenza da errore */
    Carrello("1","2");
    Carrello("2","2"); 

    /* con questa no */
    Carrello("1","2");
    Carrello("3","5"); 
    :master: :master:
    cichity74

  3. #13
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    codice:
    <?php
    error_reporting (E_ALL); 
    session_start();
    function esiste($id_prodotto){
    	$carrello=$_SESSION['prodotti'];
    	$i=0;
    	$flag = false;
    	while ((count($carrello) > 0) && !$flag){
    		$temp=array_shift($carrello);
    		if ($temp['idprodotto'] == $id_prodotto)
    			$flag = true;
    		$i++;
    	}
    	$flag=array('esiste'=>$flag,'pos'=>$i-1);
    	return $flag;
    }
    function Carrello($id_prodotto,$quantita) {
    	if   (array_key_exists('prodotti',$_SESSION)){
    		$flag=esiste($id_prodotto);
    		if ($flag['esiste']){
     			$_SESSION['prodotti'][$flag['pos']]['quantità'] +=$quantita;
    			echo "ID PRODOTTO ESISTENTE, QUANTITA' AGGIUNTA";
    		} else {
    			$temp=array('idprodotto'=>$id_prodotto,'quantità'=>$quantita);
      			array_push($_SESSION['prodotti'],$temp);
    		}
    	} else {
      		$_SESSION['prodotti'][0]=array('idprodotto'=>$id_prodotto,'quantità'=>$quantita);
    	}
    }
    
    
    unset($_SESSION['prodotti']);
    Carrello(1,2);
    Carrello(2,4);
    Carrello(3,4);
    Carrello(1,2);
    Carrello(3,4);
    
    //unset($_SESSION['prodotti'][1]);
    	/*--------------------------------------------------------- 
    	Report Variabili
    	-----------------------------------------------------------*/
    	echo '<hr>';
    	print '<pre>';
    	print_r($_SESSION);
    	print '</pre>';
    	echo '<hr>';
    ?>
    think simple think ringo

  4. #14
    Direi che ora "Spacca...!!!" :gren:
    Ti ringrazio tantissimo per il codice svolto ed la revisione..
    continuero ad lavorarci su, ed a testarlo...nel caso..posto i bug...
    Grazie
    cichity74

    P.S: credo che un lavoro del genere meriti una [pillola]....
    ache se da come ho avuto modo ri riscontrare in questo topic sei un uoma di poche parole e molto codice.... :gren:
    ciao e dinuovo grazie
    cichity74 :mavieni:

  5. #15
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    già, devo dire che la tua analisi è abbastanza veritiera...

    think simple think ringo

  6. #16
    // visualizza carello:
    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>visualizza Ordini</title>
    </head>

    <body>

    <?php
    session_start
    ();
    function 
    SvuotaCarrello(){
        unset(
    $_SESSION['prodotti']);
        
    // reindirizza fuori
    }
    function 
    EliminaArticolo(){
        global 
    $ev;
        for (
    $kk 0$kk <= (count($_POST['quntita'])-1); $kk++) {
                    
    //quantita articolo di $_SESSION != $_POST aggiorno $_SESSION
                
    if ( $_SESSION['prodotti'][$kk]['quantità'] != $_POST['quntita'][$kk] ) {
                        
    $_SESSION['prodotti'][$kk]['quantità'] = $_POST['quntita'][$kk];
                        
    $ev=1;
                    }
                    
    // verico quale eliminare
                
    if ($_POST['stato_articolo'][$kk]==|| $_POST['quntita'][$kk]=="0" || $_POST['quntita'][$kk]==""){
                    
    // 1 elimina gli articoli indicati
                    
    echo 'Elimina Articolo N°' .$kk;
                    unset(
    $_SESSION['prodotti'][$kk]);
                    
    // 2 riordina l'arry di sessione
                    
    arsort ($_SESSION['prodotti']);
                    
    // 3 si riparte
                    
    $ev=0;
                } else {
                
    $ev=1;
                }
            } 
    // END for
    }
    // all'avvio
    $ev=0;
    //-------------------------------------------------------------------------------------

    if (isset($_POST['elimina']) && $_POST['action'] == 'submitted' && $_POST['elimina'] == 'elimina') {
        echo 
    "Elimina
    "
    ;
        
    $ev=2;
    // END elimina

    if (isset($_POST['modifica']) && $_POST['action'] == 'submitted' && $_POST['modifica'] == 'modifica') {
        echo 
    "Modifica
    "
    ;
        
    EliminaArticolo();
    // END modifica

    if (isset($_POST['conferma']) && $_POST['action'] == 'submitted' && $_POST['conferma'] == 'conferma') {
        echo 
    "Conferma
    "
    ;
        
    $ev=3;
    // END conferma

    ?>
    <center>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <table width="590" border="1" cellspacing="0" cellpadding="0">
      <tr>
        <td colspan="7" align="center" valign="middle">[img]ing_graf/carrello.gif[/img]</td>
      </tr>
      <tr align="center" valign="middle">
        <td width="48">Cod.</td>
        <td width="75">Articolo</td>
        <td width="86">Qta. Ord</td>
        <td width="87">Prz. Unit.</td>
        <td width="96">Prezzo</td>
        <td width="75">Conferma</td>
        <td width="67">Elimina</td>
      </tr>
    <?php
        
    // Inizio Ciclo
        
    for ($jj 0$jj <= (count($_SESSION['prodotti'])-1); $jj++) {
            
    //---------------------------------------------------------------------------
            
    if ($ev==0){// all'avvio
                
    $conferma[$jj] = "checked";
                
    $elimina[$jj] = "";
            } 
    // END ev=0
            //---------------------------------------------------------------------------
            
    if ($ev==1){ // modifica
                //Stato articolo
                
    if ($_POST['stato_articolo'][$jj]==1){
                    
    $conferma[$jj] = "checked";
                    
    $elimina[$jj] = "";
                } else {
                    
    $conferma[$jj] = "";
                    
    $elimina[$jj] = "checked";
                }
                } 
    //END ev=1
            //---------------------------------------------------------------------------
            
    $quantita[$jj] = $_SESSION['prodotti'][$jj]['quantità']; // edito la quantita
            //---------------------------------------------------------------------------
            
    ?>
      <tr>
        <td></td>
        <td></td>
        <td><input name="quntita[<?= $jj?>]" type="text" value="<?= $quantita[$jj]; ?>" maxlength="3"></td>
        <td>&euro;</td>
        <td>&euro;</td>
        <td align="center" valign="middle"><input name="stato_articolo[<?= $jj?>]" type="radio" value="1" <?= $conferma[$jj]; ?>></td>
        <td align="center" valign="middle"><input name="stato_articolo[<?= $jj?>]" type="radio" value="0" <?= $elimina[$jj]; ?>></td>
      </tr>
    <?php }?>
      
      <tr>
        <td colspan="3" align="right">Totale&euro;</td>
        <td colspan="2"></td>
        <td colspan="2" align="center">
            <input type="hidden" name="action" value="submitted">
            <input name="elimina" type="submit" id="elimina" value="elimina">

            <input name="modifica" type="submit" id="modifica" value="modifica">

            <input name="conferma" type="submit" id="conferma" value="conferma">
      </tr>
    </table>
    </form>
    </center>

    <?php 
        
    /*--------------------------------------------------------- 
        Report Variabili
        -----------------------------------------------------------*/
        
    echo '<hr>';
        print 
    '<pre>';
            echo 
    '|<- $_POST - ================================ ->|
    '
    ;
            
    print_r($_POST);
            
    //echo '|<- $_GET - ================================= ->|
    ';
            //print_r($_GET);
            echo '
    |<- $_SESSION - ============================= ->|
    ';
            print_r($_SESSION);
        print '
    </pre>';
        echo '
    <hr>';

    ?>

    </body>
    </html>
    Nella funzione EliminaArticolo() ho tentado di reidicizare l'array di sessione con la funzione arsort() ma senza risultatto...
    sono ad un passo dalla fine e mi manca solo di riordinare l'array di sessione eliminando i buchi, e visualizza Ordini è terminato
    almeno credo... :master:
    quale funzione mi consigli... :master:
    ciao e grazie
    cichity74

  7. #17
    l'avevo fatta grossa....
    Codice PHP:
    function EliminaArticolo(){
        global 
    $ev;
        for (
    $kk 0$kk <= (count($_POST['quntita'])-1); $kk++) {
                    
    //quantita articolo di $_SESSION != $_POST aggiorno $_SESSION
                
    if ( $_SESSION['prodotti'][$kk]['quantità'] != $_POST['quntita'][$kk] ) {
                        
    $_SESSION['prodotti'][$kk]['quantità'] = $_POST['quntita'][$kk];
                        
    $ev=1;
                    }
                    
    // verico quale eliminare
                
    if ($_POST['stato_articolo'][$kk]==|| $_POST['quntita'][$kk]=="0" || $_POST['quntita'][$kk]==""){
                    
    // 1 elimina gli articoli indicati
                    
    unset($_SESSION['prodotti'][$kk]);
                    unset(
    $_POST['stato_articolo'][$kk]);
                    unset(
    $_POST['quntita'][$kk]);
                    
    // 2 si riparte
                    
    $ev=0;
                } else {
                
    $ev=1;
                }
            } 
    // END for
            //riordina l'arry di sessione
            
    sort ($_SESSION['prodotti']);
            
    sort ($_POST['stato_articolo']);
            
    sort ($_POST['quntita']);

    Ciao :quipy:
    cichity74

  8. #18

    Strana amonalia ????

    carrello.php:
    Codice PHP:
    <?php
    error_reporting 
    (E_ALL); 
    session_start();
    function 
    esiste($id_prodotto){
        
    $carrello=$_SESSION['prodotti'];
        
    $i=0;
        
    $flag false;
        while ((
    count($carrello) > 0) && !$flag){
            
    $temp=array_shift($carrello);
            if (
    $temp['idprodotto'] == $id_prodotto)
                
    $flag true;
            
    $i++;
        }
        
    $flag=array('esiste'=>$flag,'pos'=>$i-1);
        return 
    $flag;
    }
    function 
    Carrello($id_prodotto$codice_prodotto$articolo$quantita$prezzo) {
        if    (
    array_key_exists('prodotti',$_SESSION)){
            
    $flag=esiste($id_prodotto);
            if (
    $flag['esiste']){
                  
    $_SESSION['prodotti'][$flag['pos']]['quantità'] +=$quantita;
            } else {
                
    $temp=array('idprodotto'=>$id_prodotto,'codice_prodotto'=>$codice_prodotto,'articolo'=>$articolo,'quantità'=>$quantita,'prezzo'=>$prezzo);
                   
    array_push($_SESSION['prodotti'],$temp);
            }
        } else {
               
    $_SESSION['prodotti'][0]=array('idprodotto'=>$id_prodotto,'codice_prodotto'=>$codice_prodotto,'articolo'=>$articolo,'quantità'=>$quantita,'prezzo'=>$prezzo);
        }
    }


    //unset($_SESSION['prodotti']);
    // idprodotto | codice_prodotto | articolo | quantità | prezzo
    /*  */
    Carrello(1"A0047""Testo Chimica"250.15);
    Carrello(2"A0015""Testo Analisi"421.1);
    Carrello(3"A0033""Testo Matematica"450.5);
    Carrello(7"A0025""Testo Greco"434.15);
    Carrello(1"A0047""Testo Chimica"250.15);
    //unset($_SESSION['prodotti'][1]);
        /*--------------------------------------------------------- 
        Report Variabili
        -----------------------------------------------------------*/
        
    echo '<hr>';
        print 
    '<pre>';
        
    print_r($_SESSION);
        print 
    '</pre>';
        echo 
    '<hr>';
    ?>
    visualizza_ordini.php:
    Codice PHP:
    error_reporting (E_ALL); 
    session_start();
    function SvuotaCarrello(){
        unset($_SESSION['prodotti']);
        // reindirizza fuori
    }
    function EliminaArticolo(){
        global $ev;
        for ($kk = 0; $kk <= (count($_POST['quntita'])-1); $kk++) {
                    //quantita articolo di $_SESSION != $_POST aggiorno $_SESSION
                if ( $_SESSION['prodotti'][$kk]['quantità'] != $_POST['quntita'][$kk] ) {
                        $_SESSION['prodotti'][$kk]['quantità'] = $_POST['quntita'][$kk];
                        $ev=1;
                    }
                    // verico quale eliminare
                if ($_POST['stato_articolo'][$kk]==0 || $_POST['quntita'][$kk]=="0" || $_POST['quntita'][$kk]==""){
                    // 1 elimina gli articoli indicati
                    unset($_SESSION['prodotti'][$kk]);
                    unset($_POST['stato_articolo'][$kk]);
                    unset($_POST['quntita'][$kk]);
                    // 2 si riparte
                    $ev=0;
                } else {
                $ev=1;
                }
            } // END for
            //riordina l'arry di sessione
            sort ($_SESSION['prodotti']);
            sort ($_POST['stato_articolo']);
            sort ($_POST['quntita']);
    }

    // all'avvio
    $ev=0;
    //-------------------------------------------------------------------------------------

    if (isset($_POST['elimina']) && $_POST['action'] == 'submitted' && $_POST['elimina'] == 'elimina') {
        echo "Elimina
    ";
        $ev=2;
    } // END elimina

    if (isset($_POST['modifica']) && $_POST['action'] == 'submitted' && $_POST['modifica'] == 'modifica') {
        echo "Modifica
    ";
        EliminaArticolo();
    } // END modifica

    if (isset($_POST['conferma']) && $_POST['action'] == 'submitted' && $_POST['conferma'] == 'conferma') {
        echo "Conferma
    ";
        $ev=3;
    } // END conferma

    ?>
    <center>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
    <table width="590" border="1" cellspacing="0" cellpadding="0">
      <tr>
        <td colspan="7" align="center" valign="middle">[img]ing_graf/carrello.gif[/img]</td>
      </tr>
      <tr align="center" valign="middle">
        <td width="45" valign="middle">Cod.</td>
        <td width="148" valign="middle">Articolo</td>
        <td width="66" valign="middle">Qta. Ord</td>
        <td width="124" valign="middle">Prz. Unit.</td>
        <td width="117" valign="middle">Prezzo</td>
        <td width="36" align="center">[img]ing_graf/yes.gif[/img]</td>
        <td width="38" align="center">[img]ing_graf/no.gif[/img]</td>
      </tr>
    <?php
        
    if ( count($_SESSION['prodotti']) == ){
            
    // reindirizza fuori
            
    die("Il carello è vuoto");
        } else {
            
    $totale=0;
            
    // Inizio Ciclo
            
    for ($jj 0$jj <= (count($_SESSION['prodotti'])-1); $jj++) {
                if (
    $ev==0){// all'avvio
                    
    $conferma[$jj] = "checked";
                    
    $elimina[$jj] = "";
                } 
    // END ev=0
                
    if ($ev==1){ // modifica
                        //Stato articolo
                        
    if ($_POST['stato_articolo'][$jj]==1){
                            
    $conferma[$jj] = "checked";
                            
    $elimina[$jj] = "";
                        } else {
                            
    $conferma[$jj] = "";
                            
    $elimina[$jj] = "checked";
                        }
                    } 
    //END ev=1
            //-------------------------------------------------------------------------
            // idprodotto | codice_prodotto | articolo | quantità | prezzo
            //-------------------------------------------------------------------------
                
    $id_prodotto[$jj] = $_SESSION['prodotti'][$jj]['idprodotto'];
                
    $codice_prodotto[$jj] = $_SESSION['prodotti'][$jj]['codice_prodotto'];
                
    $articolo[$jj] = $_SESSION['prodotti'][$jj]['articolo'];
                
    $quantita[$jj] = $_SESSION['prodotti'][$jj]['quantità'];
                
    $prezzo[$jj] = $_SESSION['prodotti'][$jj]['prezzo'];
                
    $prezzo_quantita[$jj] = ($prezzo[$jj] * $quantita[$jj]);
                
    $totale += $prezzo_quantita[$jj];
            
    //-------------------------------------------------------------------------
    ?>
      <tr>
        <td><?= $codice_prodotto[$jj]; ?></td>
        <td align="left"><?= $articolo[$jj]; ?></td>
        <td align="center" valign="middle"><input name="quntita[<?= $jj?>]" type="text" value="<?= $quantita[$jj]; ?>" size="4" maxlength="3"></td>
        <td align="left">&euro;<?= $prezzo[$jj]; ?></td>
        <td align="left">&euro;<?= $prezzo_quantita[$jj]; ?></td>
        <td align="center" valign="middle"><input name="stato_articolo[<?= $jj?>]" type="radio" value="1" <?= $conferma[$jj]; ?>></td>
        <td align="center" valign="middle"><input name="stato_articolo[<?= $jj?>]" type="radio" value="0" <?= $elimina[$jj]; ?>></td>
      </tr>
    <?php
            
            
    // END CICLO
         
    // END Verifica
     
    ?> 
      
      <tr>
        <td colspan="3" align="right">Totale&euro;</td>
        <td colspan="2"><?= $totale?></td>
        <td colspan="2" align="center">
            <input type="hidden" name="action" value="submitted">
            <input name="elimina" type="submit" id="elimina" value="elimina">

            <input name="modifica" type="submit" id="modifica" value="modifica">

            <input name="conferma" type="submit" id="conferma" value="conferma">
      </tr>
    </table>
    </form>
    </center>

    <?php 
        
    /*--------------------------------------------------------- 
        Report Variabili
        -----------------------------------------------------------*/
        
    echo '<hr>';
        print 
    '<pre>';
            echo 
    '|<- $_POST - ================================ ->|
    '
    ;
            
    print_r($_POST);
            
    //echo '|<- $_GET - ================================= ->|
    ';
            //print_r($_GET);
            echo '
    |<- $_SESSION - ============================= ->|
    ';
            print_r($_SESSION);
        print '
    </pre>';
        echo '
    <hr>';

    ?>

    </body>
    </html>
    -------------------------------------------------------------
    va tutto ok, ma su visualizza_ordini.php quando elimino 3 articoli su 4 me ne visualizza comunque 2 non riesco a capire dove è l'errore...???
    Ciao
    cichity74 :master:

  9. #19
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    ciao, nn ho guardato molto attentamente il codice, cmq posso osservare una cosa: il ciclo for nella funzione EliminaArticolo prende come riferimento il numero di elementi di $_POST['quntita']. questo funziona se il numero resta fisso, però quando fai unset($_POST['quntita'][$kk]); diminuisci la dimensione dell'array e quindi il ciclo sballa.
    think simple think ringo

  10. #20
    Grazie per il suggerimento....
    Ho provato ad impostare il ciclo con:
    Codice PHP:
    (count($_SESSION['prodotti'])-1
    ma il bug resta se elimino 3articoli su 4 tramite la spunta e vado su modifica...
    rimangono comunque 2 articoli...
    per il resto non presenta anomalie aggiorna le quantità,i parziali ed il totale correttamente....
    potresti (ctrl+c) (ctrl+v) e darci un occhiate?????? :quipy:
    ciao
    cichity74 :quipy:

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.