Foros del Web » Programando para Internet » PHP »

Select Multiple; al enviar solo llega un valor

Estas en el tema de Select Multiple; al enviar solo llega un valor en el foro de PHP en Foros del Web. Hola el problema es asi tengo una columna con una lista de productos que uno selecciona y va a la siguiente pero el tema es ...
  #1 (permalink)  
Antiguo 08/12/2006, 18:00
Avatar de AJVEvoluzione  
Fecha de Ingreso: agosto-2004
Ubicación: Buenos Aires
Mensajes: 195
Antigüedad: 19 años, 7 meses
Puntos: 1
Select Multiple; al enviar solo llega un valor

Hola el problema es asi tengo una columna con una lista de productos que uno selecciona y va a la siguiente pero el tema es al enviarla solo me llega el ultimo producto seleccionado, cual será el problema?

Esta dentro de un php

pongo parte del mismo:
Código PHP:
<?php 
$num
GetIp();
if (
$REMOTE_ADDR == ""$ip "no ip";
else 
$ip getHostByAddr($REMOTE_ADDR);
         
        
$dia=date("d/m/Y");
        
$hora=date("H:i");  
    include_once(
'class.phpmailer.php');
    
$postback = isset($_POST['postback']) ? true false;
    
    if (
$postback) {
        
extract($_POST);
        
$mail = new phpmailer (); 
        
$mail -> From $to;
        
$mail -> FromName "- Miweb -"
        
$mail -> AddAddress ($to);
                
$mail -> AddReplyTo ($email);
$mail -> Subject "Productos pedidos $dep Ref. N $ref";
$mail->Body "<table border='0' width='100%' height='100%' cellspacing='0' cellpadding='0'><tr>";
$mail->Body .= "<td width='100%' align='left'><strong>Fecha: </strong>".$dia."<strong> a las </strong> ".$hora."<strong><br>"
$mail->Body .= "<strong>Nombre del producto: </strong>".$dep."<strong><br>";
$mail->Body .= "Seleccionados: </strong>".$PickList."<strong><br>";
$mail->Body .= "</td></tr></table>";  
$mail -> IsHTML (true);
$archivos '';
        
$msg "Mensaje Enviado";
        
           if (isset (
$_FILES["archivos"])) { 
            
$msg .= "<ul>";
            foreach (
$_FILES["archivos"]["error"] as $key => $error) { 
                if (
$error == UPLOAD_ERR_OK) { // Si no hay error
                    
$tmp_name $_FILES["archivos"]["tmp_name"][$key];
                    
$name $_FILES["archivos"]["name"][$key];
                    
$msg .= "<li>$name</li><br>";
                    
$name uniqid('bc') . '_' $name
                    
$mail -> AddAttachment ($tmp_name$name); 
                } 
#if
               
# foreach
            
$msg .= '</ul>';
        } 
# if
        
if (!$mail -> Send ()){
            
$msg "No se pudo enviar el email";
        }
    }
?>

Código HTML:
<html>

<head><script>


var dragapproved=false
var minrestore=0
var initialwidth,initialheight
var ie5=document.all&&document.getElementById
var ns6=document.getElementById&&!document.all

function iecompattest(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function drag_drop(e){
if (ie5&&dragapproved&&event.button==1){
document.getElementById("dwindow").style.left=tempx+event.clientX-offsetx+"px"
document.getElementById("dwindow").style.top=tempy+event.clientY-offsety+"px"
}
else if (ns6&&dragapproved){
document.getElementById("dwindow").style.left=tempx+e.clientX-offsetx+"px"
document.getElementById("dwindow").style.top=tempy+e.clientY-offsety+"px"
}
}

function initializedrag(e){
offsetx=ie5? event.clientX : e.clientX
offsety=ie5? event.clientY : e.clientY
document.getElementById("dwindowcontent").style.display="none" 
tempx=parseInt(document.getElementById("dwindow").style.left)
tempy=parseInt(document.getElementById("dwindow").style.top)

dragapproved=true
document.getElementById("dwindow").onmousemove=drag_drop
}

function loadwindow(url,width,height){
if (!ie5&&!ns6)
window.open(url,"","width=width,height=height,scrollbars=1")
else{
document.getElementById("dwindow").style.display=''
document.getElementById("dwindow").style.width=initialwidth=width+"px"
document.getElementById("dwindow").style.height=initialheight=height+"px"
document.getElementById("dwindow").style.left="10px"
document.getElementById("dwindow").style.top=ns6? window.pageYOffset*1+5+"px" : iecompattest().scrollTop*1+10+"px"
document.getElementById("cframe").src=url
}
}

function stopdrag(){
dragapproved=false;
document.getElementById("dwindow").onmousemove=null;
document.getElementById("dwindowcontent").style.display="" 
}

</script>
<script LANGUAGE="JavaScript">

var singleSelect = true;  
var sortSelect = true;  
var sortPick = true; 

function initIt() {
  var selectList = document.getElementById("SelectList[]");
  var selectOptions = selectList.options;
  var selectIndex = selectList.selectedIndex;
  var pickList = document.getElementById("PickList[]");
  var pickOptions = pickList.options;
  pickOptions[0] = null;  
  if (!(selectIndex > -1)) {
    selectOptions[0].selected = true;  
    selectOptions[0].defaultSelected = true;  
  }
  selectList.focus();  
}

function addIt() {
  var selectList = document.getElementById("SelectList[]");
  var selectIndex = selectList.selectedIndex;
  var selectOptions = selectList.options;
  var pickList = document.getElementById("PickList[]");
  var pickOptions = pickList.options;
  var pickOLength = pickOptions.length;
  while (selectIndex > -1) {
    pickOptions[pickOLength] = new Option(selectList[selectIndex].text);
    pickOptions[pickOLength].value = selectList[selectIndex].value;
    if (singleSelect) {
      selectOptions[selectIndex] = null;
    }
    if (sortPick) {
      var tempText;
      var tempValue;
      while (pickOLength > 0 && pickOptions[pickOLength].value < pickOptions[pickOLength-1].value) {
        tempText = pickOptions[pickOLength-1].text;
        tempValue = pickOptions[pickOLength-1].value;
        pickOptions[pickOLength-1].text = pickOptions[pickOLength].text;
        pickOptions[pickOLength-1].value = pickOptions[pickOLength].value;
        pickOptions[pickOLength].text = tempText;
        pickOptions[pickOLength].value = tempValue;
        pickOLength = pickOLength - 1;
      }
    }
    selectIndex = selectList.selectedIndex;
    pickOLength = pickOptions.length;
  }
  selectOptions[0].selected = true;
}

function delIt() {
  var selectList = document.getElementById("SelectList[]");
  var selectOptions = selectList.options;
  var selectOLength = selectOptions.length;
  var pickList = document.getElementById("PickList[]");
  var pickIndex = pickList.selectedIndex;
  var pickOptions = pickList.options;
  while (pickIndex > -1) {
    if (singleSelect) {
      selectOptions[selectOLength] = new Option(pickList[pickIndex].text);
      selectOptions[selectOLength].value = pickList[pickIndex].value;
    }
    pickOptions[pickIndex] = null;
    if (singleSelect && sortSelect) {
      var tempText;
      var tempValue;
      while (selectOLength > 0 && selectOptions[selectOLength].value < selectOptions[selectOLength-1].value) {
        tempText = selectOptions[selectOLength-1].text;
        tempValue = selectOptions[selectOLength-1].value;
        selectOptions[selectOLength-1].text = selectOptions[selectOLength].text;
        selectOptions[selectOLength-1].value = selectOptions[selectOLength].value;
        selectOptions[selectOLength].text = tempText;
        selectOptions[selectOLength].value = tempValue;
        selectOLength = selectOLength - 1;
      }
    }
    pickIndex = pickList.selectedIndex;
    selectOLength = selectOptions.length;
  }
}


function selIt(btn) {
  var pickList = document.getElementById("PickList[]");
  var pickOptions = pickList.options;
  var pickOLength = pickOptions.length;
  if (pickOLength < 1) {
    alert("No Selections in the Picklist\nPlease Select using the [->] button");
    return false;
  }
  for (var i = 0; i < pickOLength; i++) {
    pickOptions[i].selected = true;
  }
  return true;
}

</script>
<script
language="JavaScript"> 

if (top.location != self.location)top.location = self.location; 
//--> 
</script>

<title></title>
</head>

<body bgcolor="#C9E8FA" background="bc.JPG" onLoad="initIt();">
<?php if (isset($msg)) echo $msg;?>
<div id="dwindow"
style="position:relative;background-color:#C9E8FA;cursor:hand;left:0px;top:0px;display:none"
onMousedown="initializedrag(event)" onMouseup="stopdrag()" onSelectStart="return false"><div
align="right" style="background-color:#C9E8FA"></div><div id="dwindowcontent"
style="height:100%"><!--webbot bot="HTMLMarkup" startspan TAG="XBOT" --><IFRAME id="cframe" src width="100%" height="100%"><!--webbot
bot="HTMLMarkup" endspan -->
<!--webbot bot="HTMLMarkup" startspan TAG="XBOT" --></IFRAME><!--webbot
bot="HTMLMarkup" endspan -->
</div></div>

<form name="frm" id="frm" action method="post" enctype="multipart/form-data"
onSubmit="return selIt();">
  <table>
    <tr>
      <td><select NAME="SelectList[]" ID="SelectList" SIZE="5" multiple="multiple"
      style="width: 150px">
        <option VALUE="01sel">Selection 01</option>
        <option VALUE="02sel">Selection 02</option>
        <option VALUE="03sel">Selection 03</option>
        <option VALUE="04sel">Selection 04</option>
        <option VALUE="05sel">Selection 05</option>
        <option VALUE="06sel">Selection 06</option>
        <option VALUE="07sel">Selection 07</option>
        <option VALUE="08sel">Selection 08</option>
        <option VALUE="09sel">Selection 09</option>
        <option VALUE="10sel">Selection 10</option>
      </select> </td>
      <td><input TYPE="BUTTON" VALUE="-&gt;" ONCLICK="addIt();"> <br>
      <input TYPE="BUTTON" VALUE="&lt;-" ONCLICK="delIt();"> </td>
      <td><select NAME="PickList[]" ID="PickList" SIZE="5" multiple="multiple"
      style="width: 150px">
        <option VALUE="01sel">Selection 01</option>
      </select> </td>
    </tr>
    <tr>
      <td ALIGN="right"><input type="submit" value="Enviar" id="postback" name="postback"
      accesskey="21" ONCLICK="javascript:loadwindow('carga.htm',766,460)" /> </td>
    </tr>
  </table>
</form>
</body>
</html> 

Última edición por AJVEvoluzione; 09/12/2006 a las 14:12 Razón: para aclarar un punto
  #2 (permalink)  
Antiguo 12/12/2006, 21:14
Avatar de AJVEvoluzione  
Fecha de Ingreso: agosto-2004
Ubicación: Buenos Aires
Mensajes: 195
Antigüedad: 19 años, 7 meses
Puntos: 1
Re: Select Multiple; al enviar solo llega un valor

Alguien me da una mano?
  #3 (permalink)  
Antiguo 13/12/2006, 01:57
 
Fecha de Ingreso: abril-2003
Ubicación: Portugalete
Mensajes: 28
Antigüedad: 21 años
Puntos: 0
Re: Select Multiple; al enviar solo llega un valor

para que el valor pase, creo recordar que tienes que seleccionarlo justo despues de hacer el submit.
Me explico.
Parece ser que la select multiple pierde el foco cuando le haces un submit, con lo cual, con javascript, en el boton de submit le tienes que poner una función que seleccione todos para que pasen.
Nosotros teniamos una aplicación, que al final, decidimos poner 2 select multiples.
De una pasabamos a otra los valores, y así al hacer el submit seleccionabamos toda la select y lo grababamos.
Espero haberte ayudado.

un saludo
  #4 (permalink)  
Antiguo 13/12/2006, 09:48
Avatar de Erikfrancisco  
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 20 años, 4 meses
Puntos: 4
Re: Select Multiple; al enviar solo llega un valor

Para obtener los valores seleccionados de un select multiple, en el form el name lo tienes que declarar como un array; para que te quede más claro checa este ejemplo:
Código PHP:
<?php
if ( isset( $_POST['submit'] ) )
{
   
$valores $_POST['seleccion']; // la variable contendrá un array con los valores seleccionados

   
echo "Valores seleccionados: ";

   foreach( 
$valores as $muestra )
      echo 
$muestra." ";
   echo 
"<p>";
}
?>
<form name="algo" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<select name="seleccion[]" size="3", multiple>
   <option value="1">Uno</option>
   <option value="2">Dos</option>
   <option value="3">Tres</option>
   <option value="4">Cuatro</option>
   <option value="5">Cinco</option>
</select><br/>
<input type="submit" name="submit" value="Enviar">
</form>
U otra forma de hacerlo es que mediante una función javascript recorras los valores seleccionados y guardarlos en un array para que a su vez este array se lo asignes a un campo oculto y cuando recivas las variables mediante POST sólo hagas referencia a este campo oculto:
Código PHP:
<?php
if ( isset( $_POST['submit'] ) )
{
   
$valores $_POST['oculto']; // la variable contendrá un array con los valores seleccionados

   
echo "Valores seleccionados: ".$valores."<p>";
}
?>
<html>
<head>
<script type="text/JavaScript">
   function cuales_seleccionados(objetoSelect) // Esta función servirá para guardar los valores y textos de los docentes que harán el examen en las variables valores_seleccionados y textos_seleccionados
   {
      var valores_seleccionados = new Array();
      var index = 0;

      for ( var i = 0; i < objetoSelect.options.length; i++ ) // recorremos todas las opciones
      {
         if ( objetoSelect.options[i].selected ) // si la opcion fue seleccionada la guardamos en el array
         {
            valores_seleccionados[index] = objetoSelect.options[i].value; // guardamos los valores de la selección
            index++;
         }
      }

      if ( valores_seleccionados.length > 0 )
      {
         document.algo.oculto.value = valores_seleccionados; // le asignamos como valor al campo oculto los valores seleccionados
      }
   }
</script>
</head>
<body>
<form name="algo" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<select name="seleccion" size="3", multiple onchange="cuales_seleccionados(document.algo.seleccion);">
   <option value="1">Uno</option>
   <option value="2">Dos</option>
   <option value="3">Tres</option>
   <option value="4">Cuatro</option>
   <option value="5">Cinco</option>
</select><br/>
<input type="hidden" name="oculto">
<input type="submit" name="submit" value="Enviar">
</form>
</body>
</html>
Espero que esto te haya servido para darte unas luces. Suerte

Última edición por Erikfrancisco; 13/12/2006 a las 10:03
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:17.