Selectbox tömb átadása PHP-nak. + egy csavar. :D
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?
■ 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">Új fájl feltöltése</th>
</tr>
<tr><td colspan="2"><hr size="1" color="black" width="100%"></td></tr>
<tr>
<td class="maintext-dim">Fájl helye:</td>
<td>
<input type="file" name="file" maxlength="200" >
<input type="submit" value="Feltölté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árhely méret: {$dir_size} MB foglalt az 5 MB-bó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észedre megosztott fá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>
{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">Új fájl feltöltése</th>
</tr>
<tr><td colspan="2"><hr size="1" color="black" width="100%"></td></tr>
<tr>
<td class="maintext-dim">Fájl helye:</td>
<td>
<input type="file" name="file" maxlength="200" >
<input type="submit" value="Feltölté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árhely méret: {$dir_size} MB foglalt az 5 MB-bó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észedre megosztott fá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>
Selectbox tömb átadása PHP-nak. + egy csavar. :D
{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>
Szia Tronic! Elvileg műk
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?
Source File: http://*******.hu/modules/fileshare/?type=list
Line: 103
oksa, asszem megvan. [code]
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.
Tronic megoldása működik,
<!--
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>
RE: Selectbox tömb átadása PHP-nak. + egy csavar. :D
É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.
Hmmm... érdekes és használ
Megcsináltam a hidden mezős
Van vkinek vmi más javaslata?
"Megcsináltam a hidden mezős" - > JS példa
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();
}
-->