problema con passaggio di variabili

ciao,

ho questo codice ( riassunto):

<?php
require_once 'library/config.php';
require_once 'library/cart-functions.php';

$action = (isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

switch ($action) {
   case 'add' :
      addToCart();
      break;
   case 'update' :
      updateCart();
      break;
   case 'delete' :
      deleteFromCart();
      break;
   case 'view' :
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] . "?page=cart&action=update"; ?>" method="post" name="frmCart" id="frmCart">
<script type="text/javascript">

var regiondb = new Object()
regiondb["1"] = [{value:"1", text:"Carta"},
                      {value:"2", text:"Contrassegno"},
                      {value:"3", text:"Bollettino"}];
regiondb["2"] = [{value:"1", text:"Carta"},
                    {value:"4", text:"Bonifico"}];
regiondb["3"] = [{value:"1", text:"Carta"},
                          {value:"4", text:"Bonifico"}];

function setCities(chooser) {
    var newElem;
    var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;
    var cityChooser = chooser.form.elements["id_pag"];
    while (cityChooser.options.length) {
        cityChooser.remove(0);
    }
    var choice = chooser.options[chooser.selectedIndex].value;
    var db = regiondb[choice];
    newElem = document.createElement("option");
    newElem.text = "tipo di pagamento:";
    newElem.value = "";
    cityChooser.add(newElem, where);
    if (choice != "") {
        for (var i = 0; i < db.length; i++) {
            newElem = document.createElement("option");
            newElem.text = db[i].text;
            newElem.value = db[i].value;
            cityChooser.add(newElem, where);
        }
    }
}


</script>

<select name="id_area" onchange="setCities(this)">
<option value="" selected="selected">Seleziona un area:</option>

<option value="1">Italy</option>
<option value="2">Europe</option>
<option value="3">Extra Europe</option>
</select>
</td></tr>
<tr><td colspan="8">
<select name="id_pag" onchange="this.form.submit();">
<option value="" selected="selected">Seleziona il tipo di pagamento:</option>
</select>
</td></tr>
</tr>
 <tr>
   <td colspan="6" align="right">Sub-totale</td>
  <td><?php echo displayAmount($subTotal); ?></td>
  <td>&nbsp;</td>
 </tr>
<tr class="content">
   <td colspan="6 align="right">Spese di Spedizione</td>
  <td><?php

if(isset($_POST['id_area']) && isset($_POST['id_pag'])) {

$query=mysql_query("SELECT prezzo FROM tbl_shipping WHERE id_area = ".$_POST['id_area']." AND id_pag = ".$_POST['id_pag']." AND id_abb ='0'")or die(mysql_error());
  $row = dbFetchAssoc($query);
     extract($row);
     echo $prezzo;
 } else {echo "no";}

         ?>

in pratica questa è una combo <select> per la selezione delle spese di spedizione.

all'evento onchange del select, invio le variabili alla stessa pagina per eseguire la query.

il problema è quello switch all'inizio del codice, che fa eseguire delle funzioni in base a quello che riceve dall'action del form, in questo caso deve fare l'update ( dal file incluso cart-functions.php).

non capisco perchè non mi vengono valorizzate le 2 variabili della select.

se io tolgo lo switch, mi vengono passate regolarmente.

a questo punto mi viene da pensare che devo creare una funzione all'interno di cart-functions.php, in cui metto la query, ma come faccio poi a richiamare la variabile $prezzo?

inviato 10 anni fa
iTek
iTek
1
X 0 X

per prima cosa cerca di capire per quale motivo la presenza dello switch crea problemi. Forse le funzioni che richiama influiscono sul resto del codice?

Quando selezioni un valore dalla selec quale funzione viene richiamata dallo switch?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

eh si, lo switch richiama delle funzioni che mi "dirotta" le 2 var della select sulla funzione updateCart() del file dove ci sono tutte le funzioni.

quando seleziono un valore dal select utilizzo l'evento onchange="this.form.submit() che utilizza il form action="<?php echo $_SERVER['PHP_SELF'] . "?page=cart&action=update"; ?>"

pagina cart è dove sono.

a me servirebbe solo poter eseguire la query e stampare il risultato. quindi pensavo di creare una funzione dentro la funzione updateCart() in cui ci metto la query:

<?phpfunction prezzo($_POST['id_area'],$_POST['id_pag']){

if(isset($_POST['id_area']) && isset($_POST['id_pag'])) {

$query=mysql_query("SELECT prezzo FROM tbl_shipping WHERE id_area = ".$_POST['id_area']." AND id_pag = ".$_POST['id_pag']." AND id_abb ='0'")or die(mysql_error());
  $row = dbFetchAssoc($query);
    return $row;
} else {
return echo "no";
}

}?>

e poi richiamare $prezzo nella pagina cart:

echo prezzo();

però non funziona..non so se è giusta la funzione....

la funzione updateCart():

<?phpfunction updateCart()
{

   $cartId     = $_POST['hidCartId'];
   $productId  = $_POST['hidProductId'];
   $itemQty    = $_POST['txtQty'];
   $numItem    = count($itemQty);
   $numDeleted = 0;
   $notice     = '';

   for ($i = 0; $i < $numItem; $i++) {
      $newQty = (int)$itemQty[$i];
      if ($newQty < 1) {
         // remove this item from shopping cart
         deleteFromCart($cartId[$i]);
         $numDeleted += 1;
      } else {
         

         // update product quantity
         $sql = "UPDATE tbl_cart
               SET ct_qty = $newQty
               WHERE ct_id = {$cartId[$i]}";

         dbQuery($sql);
      }

      }

function prezzo($_POST['id_area'],$_POST['id_pag']){

if(isset($_POST['id_area']) && isset($_POST['id_pag'])) {

$query=mysql_query("SELECT prezzo FROM tbl_shipping WHERE id_area = ".$_POST['id_area']." AND id_pag = ".$_POST['id_pag']." AND id_abb ='0'")or die(mysql_error());
  $row = dbFetchAssoc($query);
    return $row;
} else {
return echo "no";
}

}



   if ($numDeleted == $numItem) {
      
      header('Location: home.php?page=cart');
   } else {
      header('Location: home.php?page=cart');
   }

   exit;
}?>
risposto 10 anni fa
iTek
iTek
1
modificato 10 anni fa
X 0 X

allora, facendo delle prove ho provato a mettere la funzione all'inizio del file dove c'è lo switch:

<?php function query() {
    if (isset($_POST['id_area']) && isset($_POST['id_pag'])) {
        $query = mysql_query("SELECT prezzo FROM tbl_shipping WHERE id_area = ".$_POST['id_area']." AND id_pag = ".$_POST['id_pag']." AND id_abb ='0'")or die(mysql_error());
          $row = dbFetchAssoc($query);
         extract($row);
 return $prezzo;

    } return "no";
}

echo query();exit;

$action = (isset($_GET['action']) && $_GET['action'] != '') ? $_GET['action'] : 'view';

switch ($action) {
   case 'add' :
      addToCart();
      break;
   case 'update' :
      updateCart();
      break;
   case 'delete' :
      deleteFromCart();
      break;
   case 'view' :
}?>

quindi se lo metto prima dello switch, funziona metre se metto echo query(); dopo lo switch, le variabili POST non vengono passate.

ho provato anche a mettere la funzione query() dentro alla funzione updateCart() ( quella richiamata dallo switch ), ma mi da errore di Fatal error: Call to undefined function: query().

come cavolo faccio a recuperare queste 2 benedette funzioni??? :'(

risposto 10 anni fa
iTek
iTek
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda