Отново проблем с масивите..

C++ JAVA
Post Reply
User avatar
kulov
Потребител
Потребител
Posts: 1156
Joined: Sat Apr 03, 2010 1:08 pm
Answers: 133

Отново проблем с масивите..

Post by kulov » Fri Nov 05, 2010 9:41 pm

Значи проблема този път е следният, правя си анкета, която да има колкото искаш възможни отговора, това се дефинира отначало(колко да са възможните отговори) след като ги дефинираш примерно 2, излизат полетата за заглавието на анкетата и съответно възможните отговори, сайта е многоезичен(В случая е на 4 езика) и съответно вместо 1 поле да речем за заглавието излизат 4 съответно за всеки език по едно, така и за отговорите

Ето картинка какво представлява в случая

Image

Та така нека си дойдем на проблема, когато се добавят отговорите кода е така структориран, че когато добавя в базата отговорите се добавя само първият отговор от езиците, тоест имам таблица която садържа отговорите примерно poll_answers и полетата са

id | title_bg | title_en | title_fr | title_de

и така когато добавям отговорите, от първата заявка се запълва само първите две полета, тей като целия код е в един голям цикъл и целта е просто да се добави в базата и после просто да се ъпдейтне с една заявка и да се запълнят останалите полета с останалите резултати.. и тук идва проблема нали възможните отговри са 2, когато се изпълни първата заявка, която добавя ид-то и title_bg всичко е ок, но когато се ъзпълни втората, която ъпдейтва за да запълни и другите полета стойностите от двете полета са еднакви, и тези стойности които се запълват винаги са на последният отговор, тоест ако на последният съм написал за полето title_en English 2 то той ще е стойност и на другите полета.. Обяснявам всичко това за да ви е по лесно да разберете кода, защото иначе ще ви е трудно..

Code: Select all


if(isset($_POST['submit']))
{
	$lang=mysql_query("SELECT `short` FROM `languages` ORDER BY `id` ASC") or die(mysql_error());
	while($lang_row=mysql_fetch_assoc($lang))
	{
		$short=$lang_row['short'];
					
		for &#40;$i=1; $i<=$num; $i++&#41;
		&#123;
			$arraya2=array&#40;"title_$lang_row&#91;short&#93;_$i"&#41;;
			foreach &#40;$arraya2 as $array2&#41;
			&#123;
				$post2=$_POST&#91;$array2&#93;;
				$table=$array;
				$table=explode&#40;"_", $table&#41;;
			        $table=$table&#91;0&#93;."_".$table&#91;1&#93;;
							
				$ask=mysql_query&#40;"SELECT `id` FROM `poll_panel_ask` ORDER BY `id` DESC LIMIT 1"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
				$ask_r=mysql_fetch_assoc&#40;$ask&#41;;
				$ask_id=$ask_r&#91;'id'&#93;;
							
				$ans=mysql_query&#40;"SELECT `id` FROM `poll_panel_answer` WHERE `ask_id` = '$ask_id'"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
							
				$ans_n=mysql_num_rows&#40;$ans&#41;;
						
				if &#40;$ans_n < $num&#41;
				&#123;
					$up3=mysql_query&#40;"INSERT INTO `poll_panel_answer` &#40;`id`, `ask_id`, `$table`, `result`&#41; VALUES &#40;'', '$ask_id', '$post2', ''&#41;"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
				&#125;
				else
				&#123;
					$sel=mysql_query&#40;"SELECT `id` FROM `poll_panel_answer` ORDER BY `id` DESC LIMIT $num"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
					while&#40;$r=mysql_fetch_assoc&#40;$sel&#41;&#41;
					&#123;
						$up7=mysql_query&#40;"UPDATE `poll_panel_answer` SET `$table` = '$post2' WHERE `id` = '$r&#91;id&#93;'"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
					&#125;	
				&#125;
			&#125;
		&#125;
	&#125;	
&#125;


User avatar
mute
Шаман
Шаман
Posts: 3127
Joined: Sun Sep 25, 2005 10:14 pm
Answers: 167
Location: between mind & heart
Contact:

Post by mute » Fri Nov 05, 2010 10:48 pm

извинявай прочетох го няколк пъти но не разбрах какъв точно ти е проблема, можеби е късно и ми се спи...

това което разбрах е че имаш таблица
с въпроси:
id | title_bg | title_en | title_fr | title_de

и предполагам подобна таблица с отговори
id, въпрос_ид, отговор_бг, отговор_ен, отговор_фр, отговор_де, брой гласували

имаш форма
<input type="text" name="title_bg" />
<input type="text" name="title_en" />

и отговори
огтовор 1;
<input type="text" name="answer_bg[1]" />
<input type="text" name="answer_en[1]" />

отговор 2:
<input type="text" name="answer_bg[2]" />
<input type="text" name="answer_en[2]" />

записваш в базата въпроса, взимаш последното ИД (т.е. ИД на върпоса )
после въртиш с цикъл отгооврите
foreach ( $_POST['answer_bg'] as $key => $val ) {
$otgororBG = $val;
$otgovorEN = $_POST['answer_en'][$key];

//и вкарваш отговорите в базата...
}


пробвай така, и дано съм разбрал какво имаш в предвид

User avatar
kulov
Потребител
Потребител
Posts: 1156
Joined: Sat Apr 03, 2010 1:08 pm
Answers: 133

Post by kulov » Fri Nov 05, 2010 11:36 pm

Warning: Invalid argument supplied for foreach() in E:\xampp\htdocs\schoolcms\admin\pages\poll_panel_add.php on line 129

Само това ми връща.. колко го въртях.. а това е точно на реда с цикъла, който ти даде ..

User avatar
mute
Шаман
Шаман
Posts: 3127
Joined: Sun Sep 25, 2005 10:14 pm
Answers: 167
Location: between mind & heart
Contact:

Post by mute » Sat Nov 06, 2010 9:32 am

а направили си полетата отговори да са масив ?
<input type="text" name="answer_en[2]" />
дай един print_r($_POST) и ми кажи какво ти връща

User avatar
kulov
Потребител
Потребител
Posts: 1156
Joined: Sat Apr 03, 2010 1:08 pm
Answers: 133

Post by kulov » Sat Nov 06, 2010 2:11 pm

Code: Select all

<?php
$query=mysql_query&#40;"SELECT `language`, `short` FROM `languages`"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
										while&#40;$row=mysql_fetch_assoc&#40;$query&#41;&#41;
&#123;
	echo "Отговор <b>$row&#91;short&#93;</b>&#58; <input name='answer_$row&#91;short&#93;&#91;$i&#93;' type='text' size='25' class='input' value=''/><br /><br />";	
&#125;
?>
Това е кода за полетата с отговор (answer_bg[1] - примерно)

Ето какво пръща print_r($_POST);

Code: Select all


Array &#40; &#91;title_bg&#93; => Bulgarian title &#91;title_en&#93; => English title &#91;title_fr&#93; => French title &#91;title_de&#93; => German title &#91;title_bg_1&#93; => BG 1 &#91;title_en_1&#93; => EN 1 &#91;title_fr_1&#93; => FR 1 &#91;title_de_1&#93; => DE 1 &#91;title_bg_2&#93; => BG 2 &#91;title_en_2&#93; => EN 2 &#91;title_fr_2&#93; => FR 2 &#91;title_de_2&#93; => DE 2 &#91;submit&#93; => Добави &#41; 1
Array &#40; &#91;title_bg&#93; => Bulgarian title &#91;title_en&#93; => English title &#91;title_fr&#93; => French title &#91;title_de&#93; => German title &#91;title_bg_1&#93; => BG 1 &#91;title_en_1&#93; => EN 1 &#91;title_fr_1&#93; => FR 1 &#91;title_de_1&#93; => DE 1 &#91;title_bg_2&#93; => BG 2 &#91;title_en_2&#93; => EN 2 &#91;title_fr_2&#93; => FR 2 &#91;title_de_2&#93; => DE 2 &#91;submit&#93; => Добави &#41; 1
Array &#40; &#91;title_bg&#93; => Bulgarian title &#91;title_en&#93; => English title &#91;title_fr&#93; => French title &#91;title_de&#93; => German title &#91;title_bg_1&#93; => BG 1 &#91;title_en_1&#93; => EN 1 &#91;title_fr_1&#93; => FR 1 &#91;title_de_1&#93; => DE 1 &#91;title_bg_2&#93; => BG 2 &#91;title_en_2&#93; => EN 2 &#91;title_fr_2&#93; => FR 2 &#91;title_de_2&#93; => DE 2 &#91;submit&#93; => Добави &#41; 1
Array &#40; &#91;title_bg&#93; => Bulgarian title &#91;title_en&#93; => English title &#91;title_fr&#93; => French title &#91;title_de&#93; => German title &#91;title_bg_1&#93; => BG 1 &#91;title_en_1&#93; => EN 1 &#91;title_fr_1&#93; => FR 1 &#91;title_de_1&#93; => DE 1 &#91;title_bg_2&#93; => BG 2 &#91;title_en_2&#93; => EN 2 &#91;title_fr_2&#93; => FR 2 &#91;title_de_2&#93; => DE 2 &#91;submit&#93; => Добави &#41; 1

User avatar
mute
Шаман
Шаман
Posts: 3127
Joined: Sun Sep 25, 2005 10:14 pm
Answers: 167
Location: between mind & heart
Contact:

Post by mute » Sat Nov 06, 2010 10:36 pm

така като гледам изобщо нямаш пост $_POST['answer'] на какъвто и да е език ?
сигурен ли си че html който генерира php е така както ти казах ?
и бтв не прави такива неща:
name='answer_$row[short][$i]'

нека променливата да не е в стринга написана директно.
'name="answer_' . $row['short'] . '[' . $i . ']"'

User avatar
kulov
Потребител
Потребител
Posts: 1156
Joined: Sat Apr 03, 2010 1:08 pm
Answers: 133

Post by kulov » Sun Nov 07, 2010 8:44 am

Добре де, така се оправи, тоест answer_bg, answer_en..... вече излизат при print_r, но файда няма, пак вкарва погрешно информацията

Image

Така, стойностите на първият ред за title_bg, title_en, title_fr, title_de трябва да са

Bulgarian 1, English 1, French 1, German 1 а на вторият

Bulgarian 2, English 2, French 2, German 2..

Дефакто то добавя стойностите на последният отговор на всички.. ето как е кода в момента

Code: Select all

$arraya2=array&#40;"title_$lang_row&#91;short&#93;"&#41;;
foreach &#40;$arraya2 as $array2&#41;
&#123;					
	$table=$array2;
	$answer=$_POST&#91;"answer_$lang_row&#91;short&#93;"&#93;;
	foreach &#40;$answer as $key => $val&#41; 
	&#123; 	
		$otgovor = $answer&#91;$key&#93;; 
		
		$ask=mysql_query&#40;"SELECT `id` FROM `poll_panel_ask` ORDER BY `id` DESC LIMIT 1"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
		$ask_r=mysql_fetch_assoc&#40;$ask&#41;;
		$ask_id=$ask_r&#91;'id'&#93;;
									
		$ans=mysql_query&#40;"SELECT `id` FROM `poll_panel_answer` WHERE `ask_id` = '$ask_id'"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
									
		$ans_n=mysql_num_rows&#40;$ans&#41;;
							
							
		if &#40;$ans_n < $num&#41;
		&#123;
			$up3=mysql_query&#40;"INSERT INTO `poll_panel_answer` &#40;`id`, `ask_id`, `$table`, `result`&#41; VALUES &#40;'', '$ask_id', '$otgovor', ''&#41;"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
		&#125;
		else
		&#123;
			$sel=mysql_query&#40;"SELECT `id` FROM `poll_panel_answer` ORDER BY `id` DESC LIMIT $num"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
			while&#40;$r=mysql_fetch_assoc&#40;$sel&#41;&#41;
			&#123;
				$up7=mysql_query&#40;"UPDATE `poll_panel_answer` SET `$table` = '$otgovor' WHERE `id` = '$r&#91;id&#93;'"&#41; or die&#40;mysql_error&#40;&#41;&#41;;
			&#125;	
		&#125;
	&#125;
&#125;

User avatar
kulov
Потребител
Потребител
Posts: 1156
Joined: Sat Apr 03, 2010 1:08 pm
Answers: 133

Post by kulov » Sat Nov 13, 2010 12:07 am

Все още не съм намерил решение, видях, че нещата се объркав когато цикъла се завърти за 4-ти път, има ли някакав начин да укажа на дадена заявка да се върти точно определено брой пъти, независимо в колко цикъла има и колко пъти ще се завъртят те ?

Ако не сте ме разбрали ще се помъча да го обясня, примерно имаме един цъл for където сме задали да се върти 10 пъти, тоест

for ($i=1; $i<=10; $i++)
{
}

така, в този цикъл има заявка, която трябва да се изпълни и всеки път да се добавя за стойност $i тоест

for ($i=1; $i<=10; $i++)
{
$query=mysql_query("INSERT INTO `table` (`table`) VALUES ('$i')") or die(mysql_error());
}

така, това значи, че ще имам 10 записа със стойности от 1 до 10, въпроса ми е как да направя така, да речем заявката да спира да се променя на 3-тия път, тоест да добави примерно 2 различни записа тоест 1 и 2 и като стигне до 3 от там на татъка тези 7 пъти които остава да не се добавят.. тоест нещо като exit; на самата променлива.. Искам заявката да се изпълни 3 пъти докато се намира в цикъл, който ще се въри 10 пъти..

Post Reply