Newsgroup: it.comp.www.php
Titolo: Passare due valori in una select

public function ShowArticoli()
{
    $sql = "SELECT ProductID, ProductName, ProductPrice FROM 
product_mugs_test";
    $res = mysql_query($sql,$this->conn);
    $articoli = '<option value="0">scegli...</option>';
 
        while($row = mysql_fetch_array($res))
        {
            $articoli .= '<option value="' . $row['ProductID'] . '">' . 
utf8_encode($row['ProductName']) . ' - ' . 
utf8_encode($row['ProductColor']) .'</option>';
        }
 
    return $articoli;
}
 
 
$("select#articoli").change(function(){
    var articoli = $("select#articoli option:selected").attr('value');
    $.post("select.php", {ProductID:articoli}, function(data){
    });
});
 
 
Seleziona Prodotto:<br />
        <select id="articoli" onChange="calculate('total');" name="articoli" 
 >
          <?php echo $opt->ShowArticoli(); ?>
</select>
 
 
Nella Form sulla select dove onChange="calculate('total');" devo passare il 
valore $row['ProductPrice'], ci riesco solo se modifico  $articoli .= 
'<option value="' . $row['ProductPrice'] . '">
 
Quello che devo fare è con submit inviare il valore  $row['ProductID'] 
mentre "LIVE" sul form visualizzare il prezzo in un div  <div 
id="total"></div>
 
Naturalmente LIVE utilizzo lo script qua sotto
 
Coma faccio a far passare due valori in una select???
 
 
 
 
<script>
  calculate = function(totalElement)
  {
      if (totalElement)
      {
          var calculation  = '';
          var overall = '';
          var fields = new Array();
          var theElement = document.getElementById(totalElement);
          var userInputs = myform.elements;
          var the_type = '';
          for (var f = 0; f < userInputs.length; f++)
          {
              if (userInputs[f].className=='special_value')
              {
                  if (userInputs[f].type=='select-one')
                  {
                      if(userInputs[f].options[userInputs[f].selectedIndex].value)
                      {
                          fields[f] = 
userInputs[f].options[userInputs[f].selectedIndex].value;
                      }
                      else
                      {
                          fields[f] = 0;
                      }
                  }
                  else if(userInputs[f].type=='radio' || 
userInputs[f].type=='checkbox')
                  {
                      if (userInputs[f].checked)
                      {
                          fields[f] = userInputs[f].value;
                      }
                      else
                      {
                          fields[f] = 0;
                      }
                  }
                  else
                  {
                      if (userInputs[f].value)
                      {
                          fields[f] = userInputs[f].value;
                      }
                      else
                      {
                          fields[f] = 0;
                      }
                  }
              }
          }
 
          for (var i=0; i<fields.length; i++)
          {
              calculation += fields[i];
 
              if (i!=fields.length-1)
              {
                  calculation += '+';
              }
          }
 
          if (calculation!='')
          {
              overall = eval(calculation).toFixed(2);
          }
 
          if (overall!='')
          {
              theElement.innerHTML = '&pound;'+overall;
          }
      }
  }
</script>
 
 

 Coma faccio a far passare due valori in una select???
 
Tantissime strade:
 - se usi come doctype html5 puoi semplicemente mettere il valore 
nell'attributo data-*:
 <
http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-
 
data-with-the-data-attributes>
E poi leggerlo con getAttribute:
 
https://developer.mozilla.org/en/DOM/element.getAttribute
 
 - Altrimenti, per esempio, nel value potresti mettere i due valori 
separati da un separatore, e poi separarli con split:
 <
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/
 
String/split>

 
 
"Cristiano Larghi"  ha scritto nel messaggio 
news:j9vls3$7ok$1...@dont-email.me...

Scusa ma non ho capito molto vedendo i link
 
Ti spiego
 
Ho una input box cui digito un valore numerico
<input type="text" id="quantita" name="quantita" maxlength="5" 
onblur="calculateTotal()" value="" onchange="calculateTotal()">
 
Poi ho una select box
Seleziona Stampa:<br />
<select id="stampa" name="stampa" onChange="calculateTotal();">
<option>Scegli...</option>
</select>
il valore di questa select  lo ottengo da questa query:
 
 
 
public function ShowStampe()
{
    $sql = "SELECT printtype.PrinttypeID, printtype.Printtype
            FROM printtype
            LEFT JOIN printtype_product ON printtype.PrinttypeID = 
printtype_product.PrinttypeID
            LEFT JOIN product_mugs_test ON product_mugs_test.ProductID = 
printtype_product.ProductID
            WHERE printtype_product.ProductID=$_POST[ProductID]
            ORDER BY printtype.Printtype
            ";
    $res = mysql_query($sql,$this->conn);
    $stampe = '<option value="0">scegli...</option>';
 
        while($row = mysql_fetch_array($res))
        {
            $stampe .= '<option value="' . $row['PrinttypeID'] . '">' . 
utf8_encode($row['Printtype']) . '</option>';
        }
 
    return $stampe;
}
 
 
Dopodiche una volta selezionato il valore nella select box eseguo la query 
sottostante.
 
Nella query qua sotto riesco a prendere il valore $_POST[PrinttypeID] ma 
dove $$VALORE$$  dovrei inserire il valore numerico nella input box
 
 
public function ShowCosti()
{
    $sql = " SELECT PrinttypeID, scaglione_range_da, scaglione_range_a, 
range_prezzo, range_aggiuntivo
                    FROM rangeprice
                    WHERE PrinttypeID = $_POST[PrinttypeID]
                    AND $$VALORE$$  between scaglione_range_da AND 
scaglione_range_a
            ";
    $res = mysql_query($sql,$this->conn) or die ("Query Failed 
".mysql_error(). print $sql);
 
        while($row = mysql_fetch_array($res))
        {
            $array_costi[] = "costi_prices[" . $row[0] . "] = " . $row[3] . 
"";
 
        }
 
    return $costo;
}
 
Come faccio?
 
 

 Scusa ma non ho capito molto vedendo i link
 
Di più non saprei che dirti ... prima di lavorare server-side dovresti 
imparare IMHO i linguaggi client-side. I link a me sembrano chiarissimi e 
semplicissimi.
 
Le due strade per "passare due valori in una select" che ho proposto (tra 
le tante possibili):
 
a) se usi HTML5 puoi mettere tutti i valori che vuoi in attributi che 
iniziano con name="data-", e il documento verrà validato correttamente. 
Poi puoi leggerli con getAttribute.
 
b) Nel value metti per esempio "valore1!valore2", e con la function split 
li dividi usando "!" come separator; così avrai i due valori che ti 
servono nei due indici dell'array generato da split.

 
 
"Cristiano Larghi"  ha scritto nel messaggio 
news:ja53k5$i78$1...@dont-email.me...

comincio a capire
i valori del .value li devo dividere con la ! corretto?
 
input box per far leggere il valore è corretto cosi:
<input type="text" data-id="quantita"
oppure
<input type="text" data-quantita="quantita"
 
Poi per riprenderlo
var attribute = element.getAttribute(data-id);
corretto?
 
 
 

 var attribute = element.getAttribute(data-id); corretto?
 
Corretto!

 WHERE PrinttypeID = $_POST[PrinttypeID]
->cut
 
Uhm.. correggetemi se sbaglio, ma questa non è una grande, grossa, 
enorme SQLi ? infili $_POST nella query senza un minimo di 
"sanificazione". Mboh..

 "sanificazione". Mboh..
 
Yes!

 Yes!
Allora il tipo che mi disse che un buon 30-40% dei siti web esistenti 
sulla faccia della terra sono vulnerabili alle SQL injection non era poi 
così pazzo :)

 
 
"Awake"  ha scritto nel messaggio 
news:4ec9d3a2$0$1392$4faf...@reader1.news.tin.it...

Posso chiedere come "sanificare" ?
 
 

 
 
"Cristiano Larghi"  ha scritto nel messaggio 
news:jad317$ebp$1...@dont-email.me...

Cosi puo bastare?
class sqlprotect
{
    function secureSuperGlobalGET(&$value, $key)
    {
        $_GET[$key] = htmlspecialchars(stripslashes($_GET[$key]));
        $_GET[$key] = str_ireplace("script", "blocked", $_GET[$key]);
        $_GET[$key] = mysql_real_escape_string($_GET[$key]);
    }
 
    function secureSuperGlobalPOST(&$value, $key)
    {
        $_POST[$key] = htmlspecialchars(stripslashes($_POST[$key]));
        $_POST[$key] = str_ireplace("script", "blocked", $_POST[$key]);
        $_POST[$key] = mysql_real_escape_string($_POST[$key]);
    }
 
    function secureGlobals()
    {
        array_walk($_GET, array($this, 'secureSuperGlobalGET'));
        array_walk($_POST, array($this, 'secureSuperGlobalPOST'));
    }
}
 
 
 
 
public function ShowStampe()
{
    include("sqlprotect.php");
    $sql = new sqlprotect();
    $sql->secureGlobals();
    $sql = "SELECT printtype.PrinttypeID, printtype.Printtype
            FROM printtype
            LEFT JOIN printtype_product ON printtype.PrinttypeID = 
printtype_product.PrinttypeID
            LEFT JOIN product_mugs_test ON product_mugs_test.ProductID = 
printtype_product.ProductID
            WHERE printtype_product.ProductID=".$_POST[ProductID]."


 Cosi puo bastare?
 
Ad un'occhiata veloce pare di si. Comunque, non vedo perchè hai 
dichiarato secureSuperGlobalGET() dal momento che usi solo POST.