+ Reply to Thread
Page 1 of 2 1 2 LastLast
Results 1 to 10 of 13

Thread: PHP foreach loop

  1. #1

    PHP foreach loop

    No tak este stale sa stvem s touto malou potvorou. Mam 2 select boxy ktore vyzeraju asi takto:
    Code:
    <select multiple name='fromBox[]' id='fromBox'>
    <option>Zemné práce</option>
    <option>Geodeticke prace</option>
    <option>Geotechnické práce</option>
    <option>Práce špeciálneho zakladania - piloty, injektáž, štetovnice,</option>
    </select>
    Oba su generovane dynamicky za pomoci PHPcka ale pre jednoduchost je to tu staticky.

    Code:
    <select multiple name='toBox[]' id='toBox'>
    </select>
    Je to cele prepchate javascriptom ale v jednoduchosti, v prvom selecte sa nachadzaju polozky, ktore sa za pomoci JS daju prehodit do druheho selectu. Ak da clovek odoslat(zabudol som ze som sem nepostol aj celu formu ale selecty su len cast s nej a neni to podstatne) tak som si myslel ze by mohol zbehnut tento kod:

    Code:
    $delete_sql = "DELETE FROM user_odbor_prac WHERE ico = '".$_POST['ico']."'";
    mysql_query($delete_sql);
    						
    foreach($_POST['toBox'] as $Key => $Value)
    {   
         $Query = "INSERT INTO user_odbor_prac(ico, odbor_prac) VALUES('".$_POST['ico']."','$Value')"; 
        $Result = mysql_query($Query); 
    }
    $_POST['ico'] je ICO firmy v databaze, tabulka ma asi taktuto strukturu:

    Code:
    CREATE TABLE IF NOT EXISTS `user_odbor_prac` (
      `ico` int(10) NOT NULL,
      `odbor_prac` longtext COLLATE utf8_slovak_ci NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;
    Zadrhel je, ze foreach nezbehne a absolutne ma odignoruje, ked som skusal dat print $Query tak nic, akoby taka premenna ani neexistovala. Tato cast kodu sa tyka aktualizacie udajov v databaze. Najskor som to skusil cez UPDATE ale tam som si ani neskrtol, tak som skusil toto(premazat tabulku s rovnakym icom a nanovo nahrat data), ale ani to nejde. To ze s tym fakt neviem pohnut som zistil ked som sa pokusil o nieco taketo
    Code:
    for($i = 0; $toBox["$i"] == NULL; $i++)
    {
          $sql = "INSERT INTO user_odbor_prac(ico, odbor_prac) VALUES("'".$_POST['ico']."', 'toBox['".$i."']')'
         mysql_query($sql);
    }
    Ja viem dost zle .

    Taktiez som sa snazil vyuzit kod ktory pouzivam pri prvotnom vkladani info do db:

    Code:
    // zakladny prikaz, na ktory sa budu dalej nabalovat data
            				$insert_prikaz_do_db = "INSERT INTO user_odbor_prac(ico, odbor_prac) VALUES";
            
            				// vytiahneme si udaje zo select-boxov
            				$toBox = $_POST['toBox'];
            				// ak tam nejake udaje su
            				if($toBox) 
    						{
                				 // prejdeme vsetky polia 
                 				foreach ($toBox as $t) 
    							{
    								$i++;
    								if($i == 1)
    								{
    									$insert_prikaz_do_db .= "('".$_POST['ico']."','$t')";
    								}
    								else
    								{
                     					// na zaklade kazdej polozky vytvorime novy udaj
                     					$insert_prikaz_do_db .= ", ('".$_POST['ico']."','$t')";
    								}
                				}
            				}
            				// cely select uzavrieme bodkociarkou
            				$insert_prikaz_do_db .= ";";
            				$insert_array = mysql_query($insert_prikaz_do_db);
    Cuduj sa svete ale nesiel ani ten, preto vas pekne prosim, kto my vie pomoct nech pomoze.

  2. #2
    var_export($_POST) ukazuje čo?
    Ospravedlňujem sa za dlhšiu neprítomnosť na fóre. Som späť. V prípade, že očakávate moju odpoveď v niektorej z tém, napíšte mi prosím SS.

  3. #3
    No tak neviem čo si s tým robil, ale si si istý, že v premennej $_POST['toBox'] niečo je? Určite tým JavaScriptom správne presunieš položky? Lebo mne príde, že je tá premenná proste prázdna, inak by sa ten foreach vykonal. Asi si už skúšal var_dump($_POST); čo? Ale ak nie tak skús. Inak si to neviem vysvetliť.

  4. #4
    var_dump($_POST); printuje toto. On ten foreach ako keby ani neregistruje, pritom to neni v ziadnej podmienke ani nic.
    Code:
    array(15) { ["username"]=> string(3) "lol" ["pass"]=> string(0) "" ["pass2"]=> string(0) "" ["ico"]=> string(6) "432243" ["meno"]=> string(8) "fdasfdsa" ["osoba"]=> string(8) "fdasfdas" ["email"]=> string(12) "fda@fadss.sk" ["tel_mobil"]=> string(6) "432432" ["fax"]=> string(6) "342432" ["mesto"]=> string(6) "fdasfd" ["ulica"]=> string(8) "fdasfdas" ["psc"]=> string(6) "234324" ["stat"]=> string(17) "Česká republika" ["formy"]=> string(26) "AS - akciová spoločnosť" ["submit"]=> string(10) "Aktualizuj" }

  5. #5
    No veď v tom to je, nie? V tej premennej jednoducho neexistuje kľúč toBox. Pravdepodobne ten select ani neodosielaš pretože aj pri prázdnom to asi odošle aspoň prázdne pole $_POST['toBox'] (istý si nie som). Každopádne, chyba bude niekde v html toho formulára, alebo pravdepodobne v tom JS. Ak to posielaš cez AJAX tak pri serializácii formulára nezahrnieš ten select.

  6. #6
    Zdravim, neuverite ale stale sa trapim s tym istym problemom. Presiel som HTML strukturu selectu, presiel som PHP kod ktory hadloval ci uz naplnanie alebo postovanie <option> zo selectu, presiel som JavaScript ktory presuval jednotlive option a nic. Problem je v tom, ze ja mam asi takyto select:
    Code:
    <select multiple="multiple" name="Box[]" id="Box">
                    <option value="1">fas</option>
    </select>
    A ak dam vypisat $_POST['Box'] tak sa nic nevypise. Skusal som aj var_dump($_POST) a podbne srandy a skratka premenna neexistuje. Kto na to pride, klubuk dolu.

  7. #7
    Aby ste nepovedali ze v kode moze byt nieco co by mi mohlo uniknut prikladam cely sorce. DEFINITIVNE JE CHYBA V JAVASCRIPTE!!!!!!!!!!!!!
    Code:
    <style type="text/css">
    .reg
    {
    	background-image:url("sk/images/a__registrovat.gif");
    	background-repeat:no-repeat;
    	width:135px;
    	height:21px;
    }
    .reg:hover
    {
    	background-image:url("sk/images/registrovat.gif");
    	background-repeat:no-repeat;
    	width:135px;
    	height:21px;
    }
    .reg_table
    {
    	margin-left:11px;
    }
    
    	.multipleSelectBoxControl span{	/* Labels above select boxes*/
    		font-family:arial;
    		font-size:11px;
    		font-weight:bold;
    	}
    	.multipleSelectBoxControl div select{	/* Select box layout */
    		font-family:arial;
    		height:100%;
                    width: 370px;
    	}
    	.multipleSelectBoxControl input{	/* Small butons */
    		width:25px;
    		color:#cccccc;	
    	}
    	
    	.multipleSelectBoxControl div{
    		float:left;
    	}
    		
    	.multipleSelectBoxDiv
    </style>
    <script type="text/javascript">
    	
    	/************************************************************************************************************
    	(C) www.dhtmlgoodies.com, October 2005
    	
    	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	
    	
    	Terms of use:
    	You are free to use this script as long as the copyright message is kept intact. However, you may not
    	redistribute, sell or repost it without our permission.
    	
    	Thank you!
    	
    	www.dhtmlgoodies.com
    	Alf Magne Kalleland
    	
    	************************************************************************************************************/
    	
    		
    	var fromBoxArray = new Array();
    	var toBoxArray = new Array();
    	var selectBoxIndex = 0;
    	var arrayOfItemsToSelect = new Array();
    	
    	
    	function moveSingleElement()
    	{
    		var selectBoxIndex = this.parentNode.parentNode.id.replace(/[^\d]/g,'');
    		var tmpFromBox;
    		var tmpToBox;
    		if(this.tagName.toLowerCase()=='select'){			
    			tmpFromBox = this;
    			if(tmpFromBox==fromBoxArray[selectBoxIndex])tmpToBox = toBoxArray[selectBoxIndex]; else tmpToBox = fromBoxArray[selectBoxIndex];
    		}else{
    		
    			if(this.value.indexOf('.')>=0){
    				tmpFromBox = fromBoxArray[selectBoxIndex];
    				tmpToBox = toBoxArray[selectBoxIndex];			
    			}else{
    				tmpFromBox = toBoxArray[selectBoxIndex];
    				tmpToBox = fromBoxArray[selectBoxIndex];	
    			}
    		}
    		
    		for(var no=0;no<tmpFromBox.options.length;no++){
    			if(tmpFromBox.options[no].selected){
    				tmpFromBox.options[no].selected = false;
    				tmpToBox.options[tmpToBox.options.length] = new Option(tmpFromBox.options[no].text,tmpFromBox.options[no].value);
    				
    				for(var no2=no;no2<(tmpFromBox.options.length-1);no2++){
    					tmpFromBox.options[no2].value = tmpFromBox.options[no2+1].value;
    					tmpFromBox.options[no2].text = tmpFromBox.options[no2+1].text;
    					tmpFromBox.options[no2].selected = tmpFromBox.options[no2+1].selected;
    				}
    				no = no -1;
    				tmpFromBox.options.length = tmpFromBox.options.length-1;
    											
    			}			
    		}
    		
    		
    		var tmpTextArray = new Array();
    		for(var no=0;no<tmpFromBox.options.length;no++){
    			tmpTextArray.push(tmpFromBox.options[no].text + '___' + tmpFromBox.options[no].value);			
    		}
    		tmpTextArray.sort();
    		var tmpTextArray2 = new Array();
    		for(var no=0;no<tmpToBox.options.length;no++){
    			tmpTextArray2.push(tmpToBox.options[no].text + '___' + tmpToBox.options[no].value);			
    		}		
    		tmpTextArray2.sort();
    		
    		for(var no=0;no<tmpTextArray.length;no++){
    			var items = tmpTextArray[no].split('___');
    			tmpFromBox.options[no] = new Option(items[0],items[1]);
    			
    		}		
    		
    		for(var no=0;no<tmpTextArray2.length;no++){
    			var items = tmpTextArray2[no].split('___');
    			tmpToBox.options[no] = new Option(items[0],items[1]);			
    		}
    	}
    	
    	function sortAllElement(boxRef)
    	{
    		var tmpTextArray2 = new Array();
    		for(var no=0;no<boxRef.options.length;no++){
    			tmpTextArray2.push(boxRef.options[no].text + '___' + boxRef.options[no].value);			
    		}		
    		tmpTextArray2.sort();		
    		for(var no=0;no<tmpTextArray2.length;no++){
    			var items = tmpTextArray2[no].split('___');
    			boxRef.options[no] = new Option(items[0],items[1]);			
    		}		
    		
    	}
    	function moveAllElements()
    	{
    		var selectBoxIndex = this.parentNode.parentNode.id.replace(/[^\d]/g,'');
    		var tmpFromBox;
    		var tmpToBox;		
    		if(this.value.indexOf('.')>=0){
    			tmpFromBox = fromBoxArray[selectBoxIndex];
    			tmpToBox = toBoxArray[selectBoxIndex];			
    		}else{
    			tmpFromBox = toBoxArray[selectBoxIndex];
    			tmpToBox = fromBoxArray[selectBoxIndex];	
    		}
    		
    		for(var no=0;no<tmpFromBox.options.length;no++){
    			tmpToBox.options[tmpToBox.options.length] = new Option(tmpFromBox.options[no].text,tmpFromBox.options[no].value);			
    		}	
    		
    		tmpFromBox.options.length=0;
    		sortAllElement(tmpToBox);
    		
    	}
    	
    	
    	/* This function highlights options in the "to-boxes". It is needed if the values should be remembered after submit. Call this function onsubmit for your form */
    	function multipleSelectOnSubmit()
    	{
    		for(var no=0;no<arrayOfItemsToSelect.length;no++){
    			var obj = arrayOfItemsToSelect[no];
    			for(var no2=0;no2<obj.options.length;no2++){
    				obj.options[no2].selected = true;
    			}
    		}
    		
    	}
    	
    	function createMovableOptions(fromBox,toBox,totalWidth,totalHeight,labelLeft,labelRight)
    	{		
    		fromObj = document.getElementById(fromBox);
    		toObj = document.getElementById(toBox);
    		
    		arrayOfItemsToSelect[arrayOfItemsToSelect.length] = toObj;
    
    		
    		fromObj.ondblclick = moveSingleElement;
    		toObj.ondblclick = moveSingleElement;
    
    		
    		fromBoxArray.push(fromObj);
    		toBoxArray.push(toObj);
    		
    		var parentEl = fromObj.parentNode;
    		
    		var parentDiv = document.createElement('DIV');
    		parentDiv.className='multipleSelectBoxControl';
    		parentDiv.id = 'selectBoxGroup' + selectBoxIndex;
    		parentDiv.style.width = totalWidth + 'px';
    		parentDiv.style.height = totalHeight + 'px';
    		parentEl.insertBefore(parentDiv,fromObj);
    		
    		
    		var subDiv = document.createElement('DIV');
    		subDiv.style.width = (Math.floor(totalWidth/2) + 170) + 'px';
    		fromObj.style.width = (Math.floor(totalWidth/2) + 170) + 'px';
    
    		var label = document.createElement('SPAN');
    		label.innerHTML = labelLeft;
    		subDiv.appendChild(label);
    		
    		subDiv.appendChild(fromObj);
    		subDiv.className = 'multipleSelectBoxDiv';
    		parentDiv.appendChild(subDiv);
    		
    		
    		var buttonDiv = document.createElement('DIV');
    		
    		buttonDiv.style.paddingTop = (totalHeight/2) - 80 + 'px';
                    buttonDiv.style.clear = 'both';
    		buttonDiv.style.width = '370px';
    		buttonDiv.style.textAlign = 'center';
    		parentDiv.appendChild(buttonDiv);
    		
    		var buttonRight = document.createElement('INPUT');
    		buttonRight.type='button';
    		buttonRight.value = '.';
                    buttonRight.style.background = 'url(http://www.dynamik.sk/sk/images/sipka_down1.png)';
                    buttonRight.style.height = '25px';                
     		buttonRight.style.width = '25px';
    		buttonDiv.appendChild(buttonRight);	
    		buttonRight.onclick = moveSingleElement;	
    		
    		var buttonAllRight = document.createElement('INPUT');
    		buttonAllRight.type='button';
    		buttonAllRight.value = '.';
                    buttonAllRight.style.background = 'url(http://www.dynamik.sk/sk/images/sipka_down2.png)';
                    buttonAllRight.style.height = '25px';
     		buttonAllRight.style.width = '25px';
    		buttonAllRight.onclick = moveAllElements;
    		buttonDiv.appendChild(buttonAllRight);		
    		
    		var buttonLeft = document.createElement('INPUT');
    		buttonLeft.style.marginLeft='10px';
    		buttonLeft.type='button';
    		buttonLeft.value = ',';
                    buttonLeft.style.background = 'url(http://www.dynamik.sk/sk/images/sipka_up1.png)';
                    buttonLeft.style.height = '25px';
     		buttonLeft.style.width = '25px';
    		buttonLeft.onclick = moveSingleElement;
    		buttonDiv.appendChild(buttonLeft);		
    		
    		var buttonAllLeft = document.createElement('INPUT');
    		buttonAllLeft.type='button';
    		buttonAllLeft.value = ',';
                    buttonAllLeft.style.background = 'url(http://www.dynamik.sk/sk/images/sipka_up2.png)';
                    buttonAllLeft.style.height = '25px';
     		buttonAllLeft.style.width = '25px';
    		buttonAllLeft.onclick = moveAllElements;
    		buttonDiv.appendChild(buttonAllLeft);
    		
    		var subDiv = document.createElement('DIV');
    		subDiv.style.width = (Math.floor(totalWidth/2) + 170) + 'px';
    		toObj.style.width = (Math.floor(totalWidth/2) + 170) + 'px';
    
    		var label = document.createElement('SPAN');
    		label.innerHTML = labelRight;
    		subDiv.appendChild(label);
    				
    		subDiv.appendChild(toObj);
    		parentDiv.appendChild(subDiv);		
    		
    		toObj.style.height = (totalHeight - label.offsetHeight) + 'px';
    		fromObj.style.height = (totalHeight - label.offsetHeight) + 'px';
    
    			
    		selectBoxIndex++;
    		
    	}
    	
    	
    	
    </script>
    Zvisok je uz v hornych castiach.
    Last edited by Werewolf; 28.03.2011 at 12:08.

  8. #8
    Nechceš sem postnúť aj tú stránku? A ako vieš že chyba je v JS? Pozeral si či sa tá premenná vôbec dostane z prehliadača von?

    Ten JS som moc nepozeral, ale príde mi, že je nejaký moc objemný na to, že má riešiť len presun položiek z jedného selectu do druhého. A hlavne je v ňom na môj vkus nejak veľa kaskádových štýlov.

  9. #9
    Dik za ochotu ale po urputnej sna som to nakoniec vyriesil, este raz dik

  10. #10
    A nechceš napísať ako si to vyriešil? Kde bola chyba? Celkom by ma to zaujímalo a možno nie len mňa

+ Reply to Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts