Извличане на информация от точно определен select list

metal_head

Registered
И така, това нещо го търсих доста в интернет, но явно и аз не знам какво да търся, защото просто не мога да го обобщя с няколко думи.

Да кажем, че имам един while loop, с който на страницата се показват постове. На една страница може да има много постове. Това и баба го знае, ама преди и след while loop-а съм сложил таг form, тоест всичките постове са една форма. Защо? Защото с тях могат да се правят разни неща. Например имам система за оценка на отделните постове. Идеята на системата с оценка е потребителите да определят различните постове като полезни, артистични, забавни, безполезни (тоест със select list меню).

Сега, ето какво имам:

PHP:
<input type='submit' name='set_mark[".$post_id."]' class='rate_button' value='     '>
<select name='ratemark[".$post_id."]'>(опции)</select>

Това, разбира се, ще направи на всеки пост бутон submit и рейтинг меню с име set_mark[id] и ratemark[id]. Въпросът ми е как да разбера кой точно събмит бутон е натиснат и как да се обърна към select менюто, което отговаря на същото ID? Мислех за вариант с while loop, но не съм сигурен, че е добра идея. Може ли някой да ми даде пример. И изобщо правилен ли е този подход с многото submit бутони?
 
PHP:
<input type='submit' name='set_mark[".$post_id."]' class='rate_button' value='     '>
<select name='ratemark[".$post_id."]'>(опции)</select>
<input type='hidden' value='".$post_id."'  name="post_id"/>

и сега $_POST['post_id'] ти е id-то.
 
Да, аз така бях тръгнал да го правя, но се сетих нещо:

и сега $_POST['post_id'] ти е id-то.

Ще имам hidden input за всеки пост, той ще има име post_id, когато поискам да ми върне post_id, как ще знае от кой input да върне ?
 
Тоест трябва всеки пост да е отделна форма, защото аз бях направил всички постове да са в една форма.

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

Отделно за администратор, всеки пост може да се селектира с checkbox и така да се изтрие пост или множество постове. Точно заради това преди да почне while loop-а, който ще покаже всички постове на страницата, съм сложил една форма и след while loop-а затварям формата, така от формата мога да взема всички селектирани обекти.

Ето как е кода до момента:

PHP:
if($posts){
echo "<form name='alter_posts' method='post'>";
$count = 1;
while($post = mysql_fetch_assoc($posts)){
$post_author = dbarray("SELECT users.* FROM users LEFT JOIN user_info ON user_info.user_id = users.user_id WHERE users.user_id='".$post['author_id']."'");

//Тъй като всеки потребител може да даде по две оценки на пост
// Правим тази проверка и взимаме остатъка оценки.

$ratecount = dbnum("SELECT * FROM post_rates WHERE type='forum' AND post_id = '".$post['post_id']."' AND user_id='$user_id'");
$ratesleft = 2 - $ratecount;


// Таблицата, съдържаща поста
echo "
<table width='100%' border='0' cellpadding='5' cellspacing='2'>
  <tr>
    <td height='20' colspan='2' bgcolor='$col'><a class='alt-reviews' href='../profile.php?name=".$post_author['username']."'><strong>".strtoupper($post_author['username'])."</strong></a></td>
    <td width='536' bgcolor='$col'>".date("d.n.Y", $post['timestamp'])."</td>

// проверка дали потребителят е MASTER администратор
// ако е, тогава да показва checkboxes 

    <td bgcolor='$col'>".$count; if(strpos($user_rights, "MASTER") !== false) echo"<input type='checkbox' name='post_id[".$post['post_id']."]'> ";  echo"</td>
  </tr>
  <tr>
    <td height='277' bgcolor='#383838' colspan='2'><center><a href='../profile.php?name=".$post_author['username']."'><img src='".get_avatar($post_author['username'], "../")."' width='100' height='100' border='0'></a></center></td>
    <td colspan='2' valign='top' bgcolor='#282828'>".$post['post']."</td>
  </tr>
  <tr>
    <td bgcolor='#383838'>rprt</td>

// ЕТО Я И ФОРМАТА ЗА ОЦЕНКА НА ПОСТА

    <td bgcolor='#383838'><form name='rate[".$post['post_id']."]' method='post'>
	<input type='hidden' value='".$post['post_id']."'  name='post_id'/>
	<input type='hidden' value='$ratesleft'  name='rates_left'/>
	<input type='submit' name='set_mark' class='rate_button' value='     '>
	<select name='ratemark[".$post['post_id']."]'><option value='1'>Полезно</otion><option value='2'>Ненужно</otion>
	<option value='3'>Артистично</otion><option value='4'>Забавно</otion><option value='5'>Скучно</otion>
	<option value='6'>Закъсняло</otion><option value='7'>Учтиво</otion><option value='8'>Оптимистично</otion></select> X ".$ratesleft."</form>
	</td>
    <td bgcolor='#383838'>rates</td>
    <td width='106' bgcolor='#383838'> Quote</td>
  </tr>
</table>
";
$count ++;
$last_user_posted = $post_author['user_id'];
}
}

if(strpos($user_rights, "MASTER") !== false) echo"
<input type='hidden' name='thread_id' value='".$_GET['id']."'>
<BUTTON class='png button validate' name='del_posts' type='submit'>Изтрий</BUTTON>";
echo"
</form>


И сега започнах с INSERT-а, но не съм продължил


PHP:
if($username && $password){
if(isset($_POST['set_mark']) && $_POST['rates_left'] > 0){
mysql_query("INSERT INTO post_rates (post_id, user_id, type, rate) ...
}
}
 
Това е доста неудобно - да трябва да цъкат на един от 8-те линка, отговарящи на отделните оценки. Като цяло ще се опитам после да го направя s AJAX и да е динамично оценяването, да няма никакво презареждане,зареждане и каквото и да било. Няма ли начин да го направя с формите ?
 
Според мен ги направи с линк.
Ти ми казваш да направя оценките с линкове. Ако го направя с линкове, ще е доста неудобно, ще заема доста място и ще трябва да зареди страницата наново, за да гласува. Тоест да ползвам GET метод.
 
metal_head каза:
И така, това нещо го търсих доста в интернет, но явно и аз не знам какво да търся, защото просто не мога да го обобщя с няколко думи.

Да кажем, че имам един while loop, с който на страницата се показват постове. На една страница може да има много постове. Това и баба го знае, ама преди и след while loop-а съм сложил таг form, тоест всичките постове са една форма. Защо? Защото с тях могат да се правят разни неща. Например имам система за оценка на отделните постове. Идеята на системата с оценка е потребителите да определят различните постове като полезни, артистични, забавни, безполезни (тоест със select list меню).

Сега, ето какво имам:

PHP:
<input type='submit' name='set_mark[".$post_id."]' class='rate_button' value='     '>
<select name='ratemark[".$post_id."]'>(опции)</select>

Това, разбира се, ще направи на всеки пост бутон submit и рейтинг меню с име set_mark[id] и ratemark[id]. Въпросът ми е как да разбера кой точно събмит бутон е натиснат и как да се обърна към select менюто, което отговаря на същото ID? Мислех за вариант с while loop, но не съм сигурен, че е добра идея. Може ли някой да ми даде пример. И изобщо правилен ли е този подход с многото submit бутони?

в $_POST се съдържа само натиснатият submit

провери какво има в $_POST и направи необходимото

примерно (не е тествано само на теория)

Код:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	if (isset($_POST['set_mark'])) {
		echo 'natisnat: ' . current($_POST['set_mark']) . '<br />';
		echo 'ocenka: ' . $_POST['ratemark'][key($_POST['set_mark'])];
	}
}
?>
<form method="post" action="">
<table border="1">
<?php 
for ($i = 0; $i < 10; ++$i) {
	echo '<tr>';
	echo '<td>Name ' . $i . '</td>';
	echo '<td><input type="submit" name="set_mark[' . $i . ']" value="vote ' . $i . '" />';
	echo '<select name="ratemark[' . $i . ']"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select></td>';
	echo '</tr>';
}
?>
</table>
</form>

но сега тенденцията е с ajax :idea:
 
Да, аз просто направих това с форма във формата и се получи. И да, наистина планирам да го направя с AJAX, но все още ми е леко неясно с концепцията му (просто може би не съм му обърнал достатъчно внимание) Надявам се с AJAX ще мога да си го ползвам този select list, който сега ползвам с PHP-то....нали ще мога ?
 

Back
Горе