ugrás a tartalomhoz

Selectbox tömb átadása PHP-nak. + egy csavar. :D

quasimidi · 2004. Nov. 9. (K), 14.58
Sziasztok!

a következő kérdésben szeretnék segítséget kapni a megvalósítást illetően: van egy smarty alapú programocska, amiben egy fájl-megosztó alkalmazást készítek. Szeretném megoldani hogy a feltöltend fájlhoz hozzá lehessen rendelni adatbázisból usereket, a köv. képpen: van 2 selectbox, az egyikből "átdobálom" egy gombbal a másikba azokat a usereket, akik jogosultak a fájl megtekintéséhez. Ezt egy javascriptel valósítom meg. (alább a minta kód).

A problémám ott kezdődik, hogyha egy selectboxot passzolunk át a PHP-nak, akkor ugye a nevének pl. "name[]"-nek kellene lennie. Viszont ha így nevezek el egy selectboxto, akkor az oldalon lévő javascripptel nem tudok rá hivatkozni.

Kérlek nézzétek meg az alábbi kódot és látni fogjátok h. mi a bajom.
Tehát a kérdés: hogyan lehet megoldani hogy megkapjam azokat az elemeket az űrlap feldolgozó oldalon (php), amiket <select name="shared_user_id" multiple> küldök el?

<body topmargin="0" leftmargin="0" style="background-color:#8dc0e4">
{php}include_once("menu_cnt.php");{/php}
{literal}
<script language= "JavaScript">
<!--
function one2two() {

    m1len = m1.length ;
    for ( i=0; i<m1len ; i++){
        if (m1.options[i].selected == true ) {
            m2len = m2.length;
            m2.options[m2len]= new Option(m1.options[i].text);
        }
    }

    for ( i = (m1len -1); i>=0; i--){
        if (m1.options[i].selected == true ) {
            m1.options[i] = null;
        }
    }
}

function two2one()
{
   m2len = m2.length ;
        for ( i=0; i<m2len ; i++){
            if (m2.options[i].selected == true ) {
                m1len = m1.length;
                m1.options[m1len]= new Option(m2.options[i].text);
            }
        }

        for ( i=(m2len-1); i>=0; i--) {
            if (m2.options[i].selected == true ) {
                m2.options[i] = null;
            }
        }
}
//-->
function allSelect()
{
  List = document.fileupload.shared_user_id;
  for (i=0;i<List.length;i++)
  {
     List.options[i].selected = true;
  }
}
</script>
{/literal}
<div align="left">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<form action="?type=upload" enctype="multipart/form-data" method="POST" name="fileupload" style="border: 0px" onsubmit="allSelect()">
<tr>
<th colspan="2" class="maintext" align="left">&Uacute;j f&aacute;jl felt&ouml;lt&eacute;se</th>
</tr>
<tr><td colspan="2"><hr size="1" color="black" width="100%"></td></tr>
<tr>
<td class="maintext-dim">F&aacute;jl helye:</td>
<td>
<input type="file" name="file" maxlength="200" >&nbsp;
<input type="submit" value="Felt&ouml;lt&eacute;s" name="btnUpload" style="height:20px" onclick="isEmpty(this);"></td>
</tr>
<tr>
<td colspan="2">
<select name="all_user_id" size="5" multiple>
{html_options output=$person_options values=$person_values}
</select>
<p align="center"><input type="button" onClick="one2two()" value=" >> "></p>
<select name="shared_user_id" size="5" multiple>
</select>
<p align="center"><input type="button" onClick="two2one()" value=" << " ></p>
</td>
</tr>
</form>
</table>
<hr size="1" color="black" width="100%">
</div>
<div class="maintext-dim">T&aacute;rhely m&eacute;ret: {$dir_size} MB foglalt az 5 MB-b&oacute;l.</div>
<div><hr size="1" color="black" width="100%"></div>
<div align="left">
{foreach from=$directory item=name}{$name}{/foreach}
</div>
<div><hr size="1" color="black" width="100%"></div>
<div class="maintext-dim">R&eacute;szedre megosztott f&aacute;jlok:</div>
<div><hr size="1" color="black" width="100%"></div>
<div>
{foreach from=$list_shared_files item=name}{$name}{/foreach}
</div>
<script language="Javascript">
var m1 = document.fileupload.all_user_id;
var m2 = document.fileupload.shared_user_id;
</script>
 
1

Selectbox tömb átadása PHP-nak. + egy csavar. :D

Nagy Péter · 2004. Nov. 9. (K), 15.22
És ha ID-vel hivatkozol rá?
<select name="all_user_id" id="m1" size="5" multiple>
{html_options output=$person_options values=$person_values}
</select>
.
.
.
<select name="shared_user_id" id="m2" size="5" multiple>
</select>
.
.
.
<script language="Javascript">
var m1 = document.getElementbyId(m1);
var m2 = document.getElementbyId(m2);
</script>
2

Szia Tronic! Elvileg műk

quasimidi · 2004. Nov. 9. (K), 15.40
Szia Tronic!

Elvileg működne, azonban mind az IE, mind a Firefox azt mondja hogy nincsen tulajdonsága az m1,m2-nek
Lehetne hivatkozni ID szerint is JS-ben a html tagokra?

Error: m1 has no properties
Source File: http://*******.hu/modules/fileshare/?type=list
Line: 103
3

oksa, asszem megvan. [code]

quasimidi · 2004. Nov. 9. (K), 15.45
oksa, asszem megvan.
<script language="Javascript">
var m1 = document.getElementById('m1');
var m2 = document.getElementById('m2');
</script>

úgy nézem működik. Mármost le kell tesztelnem hogy a php-oldalon is megkapom-e a selectbox tömböt.
4

Tronic megoldása működik,

quasimidi · 2004. Nov. 9. (K), 16.04
Tronic megoldása működik, azonban (az alábbi módosítással) sem tudom fogadni a második listbox (shared_user_id) tömbjét php-ban ($_REQUEST["shared_user_id"]).

<script language= "JavaScript">
<!--
function one2two() {

    m1len = m1.length ;
    for ( i=0; i<m1len ; i++){
        if (m1.options[i].selected == true ) {
            m2len = m2.length;
            m2.options[m2len]= new Option(m1.options[i].text,m1.options[i].value);
        }
    }

    for ( i = (m1len -1); i>=0; i--){
        if (m1.options[i].selected == true ) {
            m1.options[i] = null;
        }
    }
}

function two2one()
{
   m2len = m2.length ;
        for ( i=0; i<m2len ; i++){
            if (m2.options[i].selected == true ) {
                m1len = m1.length;
                m1.options[m1len]= new Option(m2.options[i].text,m2.options[i].value);
            }
        }

        for ( i=(m2len-1); i>=0; i--) {
            if (m2.options[i].selected == true ) {
                m2.options[i] = null;
            }
        }
}
//-->
</script>
{/literal}.
.
.
.
</div>
<script language="Javascript">
var m1 = document.getElementById('m1');
var m2 = document.getElementById('m2');
</script>
5

RE: Selectbox tömb átadása PHP-nak. + egy csavar. :D

Anonymous · 2004. Nov. 9. (K), 16.23
Sziasztok!

Én ezt a problémát úgy oldottam meg, hogy egy rejtett mezőbe az űrlap elküldésekor egy JS belepakolta a selectbox összes elemét, elválasztva pl. ;-el. A rejtett mezőnek az értékét ki lehet olvasni php oldalon csak annyit kell tenni, hogy feldarabolni a ; mentén és kész. Arra kell figyelni, hogy ; ne legyen a selecbox értékei között vagy ha van le kell kódolni.
6

Hmmm... érdekes és használ

quasimidi · 2004. Nov. 9. (K), 16.25
Hmmm... érdekes és használható megoldás, de mint olyan szeretnék tisztába kerülni hogy ez hogyan valósítható meg JS-ből New Option(); használatával.
7

Megcsináltam a hidden mezős

quasimidi · 2004. Nov. 10. (Sze), 16.33
Megcsináltam a hidden mezős megoldást, ezzel viszont az a baj, hogy elég bonyis kezelni a hidden mező értékeit, ha a második listboxhoz hozzáadsz, majd elveszel elemeket.Szerintem.
Van vkinek vmi más javaslata?
8

"Megcsináltam a hidden mezős" - > JS példa

Anonymous · 2004. Nov. 10. (Sze), 20.36
Sziasztok!

Lehet hogy rosszul gondolom, de a probléma az az volt, hogy adjuk egy selectbox tartalmát át a php-nek. Ebben az esetben semmi bonyolult nincs benne, hisz közvetlen az elküldés előtt (gombra linke kettintás vagy esemény lefutása előtt) egy egyszerű JS fg.-el összeszeded a selectbox adatait és beleteszed a hidden mezőbe.
Az viszont egy másik kérdés, hogy egészen addig, míg az oldalt nem küldöd el, hogyan oldod meg a töltögetést és a törlést.

<!--
//groups a <SELECT> neve
//form1 a <FORM> neve
//groups_ok a <INPUT type=hidden> neve

function collect_data(){
lista_p=document.form1.groups;
hossz=lista_p.options.length;
document.form1.groups_ok.value='';
for(i=0;i<hossz;i++){
document.form1.groups_ok.value+=lista_p.options[i].value+';';
}
document.form1.submit();
}
-->