[php+mysql] submit czyli glosowanie

0

Witam,
Nie moge dac sobie rady z nastepujacym problemem:
mam w formularzu 15 przyciskow:
<input type="submit" value="Głosuj!" name="B$ii"> (przy kolejnym przelocie przez pentle wartosc $ii wzrasta od 1 do 15) i teraz chcialbym, aby konkretny przycisk dodawal wartosc '1' do wartosci znajdujacej sie w odpowiednim wierszu kolumny 'votes' - czyli mowiac inaczej oddawal glos na ta pozycje :) probowalem juz kilku sposobow, ale glosy sie nie sumuja mimo, iz dane sie 'gdzies' wysylaja :P Tylko teraz tak mysle, ze w name tego buttona powiniennem chyba dac zamiast $ii (czyli inaczej numeru kolejnego przelotu przez pentl) wartosc id z wiersza slq'a <- to bedzie chyba latwiej zrobic przesyl do bazy?
Yh... troche chyba poplatalem, mam nadzieje, ze ktos mnie zrozumie :)

0

Nigdy nie probowałem robic w jednym formularzu wiecej niz jeden przycisk submit, no ale powiem Ci jak ja bym to widział:

  1. Dla kazdego wiersza z kolumny votes tworzysz osobny formularz
  2. W kazdym takim formularzu tworzysz pole typu hidden (nazwa tego pola w kazdym formularzu powina byc taka sama - nazwijmy je 'glosuje_na') i do niego pisujesz id pobrane z bazy sql
  3. W kazdym formularzu action ustawiasz na ten sam plik - np. skrypt.php
  4. W pliku skrypt.php
    a) odczytujesz pobrana wartosc glosuje_na
    b) z bazy odczytujesz wiersz o takim id jak wartosc glosuje_na
    c) dla tego wiersza zwiekszasz votes o 1
    d) tak zwiekszona wartosc z powrotem wrzucasz do bazy

Wybrales bardzo dziwna metode na zliczanie tych glosow. Nie prosciej byloby dynamicznie generowac linki, np. pobrac z bazy te id i na ich podstawie utworzyc linki:
Glosuje na 1
Glosuje na 2
Glosuje na 3
itd...
A skrypt w zaleznosci o dpodanego id zwiekszalby podany wiersz w kolumnie votes. No a zamist linkow moglbys uzyc obrazkow wygladajacych jak przycisk ;) Wtedy efekt wizualny bylby podobny jak te Twoje przyciski 'sumit'

0

Mimo ze pomysl niezbyt dobry to mozna go wykorzystac calkiem prosto choc z niewielkimi modyfikacjami.

Wyobrazmy sobie ze masz cos takiego:

<? for ($i=0;$i<15; $i++){ echo "<input type="\&quot;submit\&quot;" value="\&quot;Glosuj" na="na" $i="$i" kandydata\"="kandydata\&quot;" name="\&quot;B[$i]\&quot;">
"; } ?>

Co wyswietli 15 guziczkow submit (zauwaz ze jest to tablica!), po czym wysylasz dane z formularza do swojego skryptu:

<? for($i=0; $i<15; $i++){ if ($B[$i]){ echo "Zaglosowales na kandydata nr $i."; # mozna tu dolozyc kod wpisujacy glos do bazy danych } } ?>
0

zrobilem z generowaniem linkow... niby wszystko smiga, ale dane nie dochodza do bazy, a nie wiem w czym jest blad... mozecie rzucic okiem? to cale zrodlo (przy okazji bylbym wdzieczny za slowa krytyki co do kodu poniewaz jest to moj pierwszy "rozbudowany" skrypt :) ):


<?php /* ***************************************************
************************************************************
***                                                      ***
***                                                      ***
***          'Top-Hits' by Camillo (c)2005               ***
***							 ***
***							 ***
************************************************************
********************************************************* */



// ----------------------- CONFIG ----------------------- \\

// sql

$sql_user = '';					// your sql user name
$sql_pass = '';					// your sql password
$sql_db   = 'camillo';					// name of your sql database
$sql_host = 'localhost';					// host of your sql database


// admin

$admin_name = 'admin';  			// your name
$admin_pass = 'pass';   			// your password


// behavior

$theme = 'default';				// name of theme
$id       = '15';					// how many songs are there on the list
$pr       = '5';					// number of propositions to the list
$xy       = 'center';				// align tabel of list eg. 'left', 'right', 'center'
$bg       = 'white';				// background color
$fo       = 'black';				// font color
$new_time = '15';					// days of 'song is new on the list'
$list_title    = 'TopHits';				// title
$banner   = "<img src=\"themes/$theme/images/logo.png\">"; 	// image or text of your banner or smth
$date   = date("d-m-Y");			// date format
$time   = date("H:i");				// time


//flags

$up    = "<img src=\"themes/$theme/images/up.gif\">";			// "up" image
$down  = "<img src=\"themes/$theme/images/down.gif\">";			// "down" image
$new   = "<img src=\"themes/$theme/images/new.gif\">";			// "new" image
$still = "<img src=\"themes/$theme/image/still,gif\">";			// "still" image


// what is what?

$votes   = '0';						// number of votes
$band    = 'jakis wykonawca';						// name of singer or band
$title   = 'jakis tytul';						// title song
$days    = '7';						// how long song being on the list
$new     = '0';						// song is new on the list or not
$comment = '0';						// comments of song
$flag	 = '0';						// image - up, down, still or new

// ------------------- END of CONFIG ------------------- \\



// ------------------------- DB ------------------------- \\


if ($db = mysql_pconnect($sql_host, $sql_user, $sql_pass)) 
{
echo "<font color=\"green\">Połączono</font>";
} else { echo "<font color=\"red\">Nie połączono!</font>";
}
echo " z bazą danych!";

mysql_select_db('camillo');




// ---------------------- end of DB ---------------------- \\

// ------------------------ PRINT ------------------------ \\


//print head

 echo " <html>\n ";
 echo "  <head>\n ";
 echo "    <title>..:: $list_title ::..</title>\n ";
 echo "   <META NAME=\"Author\" Content=\"$admin_name\"> ";
 echo "   <META NAME=\"Generator\" Content=\"Camillo\'s Top-Hits\"> ";
 echo "  <link rel=\"stylesheet\" type=\"text/css\" href=\"theme/$theme/style.css\">";
 echo "  </head>";


//print behavior

 echo " <body bgcolor=\"$bg\">\n ";
 echo "  <font color=\"$fo\">\n ";
 echo " <center> \n";


//print banner
 echo " <font size=\"2\">Dzis jest: $date <br>\n";
 echo " <table border=\"1\" width=\"600\" height=\"97\">\n ";
 echo "         <tr>\n ";
 echo "          <td width=\"600\" height=\"97\"><center>$banner</center></td>\n ";
 echo "         </tr>\n ";
 echo "        </table>\n ";
 echo "	 <p>  \n ";
 echo "	 <br> \n ";
 echo "	 </p> \n ";


 
 
//print table of content

 echo " <table border=\"1\" width=\"600\" height=\"53\">\n "; 
 echo "         <tr>\n ";
 echo "          <td width=\"45\" height=\"53\" align=\"center\">Miejsce</td>\n ";
 echo "          <td width=\"45\" height=\"53\" align=\"center\">Głosów</td>\n ";
 echo "          <td width=\"45\" height=\"53\" align=\"center\">\n ";
 echo "           <p align=\"center\">Flaga</p>\n ";
 echo "          </td>\n ";
 echo "          <td width=\"343\" height=\"53\" align=\"center\"><b>Wykonawca</b> - &quot;<i>Tytuł</i>&quot;</td>\n ";
 echo "		  <td width=\"62\" height=\"53\" align=\"center\">&nbsp;</td> ";
 echo "          </tr>\n ";
 echo "         </table>\n  ";
 echo "	  <br>\n";


//print list

$i=0;
$ii=1;
$iid=stripslashes($line['id']);
echo " <form name=\"voting\" action=\"index.php\" method=\"post\">";

while($i<$id)

{
if($i%2==1) 
{
$flag = $up;
} else {
$flag = $down;
}
$sql = "SELECT * FROM `c_toplista` GROUP BY votes DESC HAVING MIN(votes)>0 LIMIT $i, $id";
$result = mysql_query($sql);
$line = mysql_fetch_array($result);
$db_id = stripslashes($line['id']);

    echo "     <table border=\"1\" width=\"600\" height=\"53\"> \n";
    echo "  <tr> ";
    echo "   <td width=\"45\" height=\"53\" align=\"center\">$ii</td> \n ";
    echo "   <td width=\"45\" height=\"53\" align=\"center\">";
    echo stripslashes($line['votes']);
    echo "   </td> \n ";
    echo "   <td width=\"45\" height=\"53\" align=\"center\">";
    echo stripslashes($line['date']);
    echo "   </td> \n ";
    echo "   <td width=\"343\" height=\"53\" align=\"center\"> ";
    echo stripslashes($line['song']);
    echo "   </td> \n ";
    echo "   <td width=\"62\" height=\"53\" align=\"center\"><input type=\"submit\" value=\"Głosuj!\" name=\"B$ii\"><a href=\"index.php?voting=$db_id\">Vote!<a/> </td>";
    echo "    </tr> \n ";
    echo " </table> \n ";
	$i++; $ii++;  $total_votes=$total_votes+$line['votes']; $ar=$total_votes/$id;
}
echo "</form>";
$_POST[$voting];



//print statistic

echo "<br><p><b>Statystyki listy \"$list_title\"</b></p>\n";
echo "<li>Całkowita liczba oddanych głosów: $total_votes</li>\n";
echo "<li>Średnia liczba oddanych głosów: $ar</li>\n";



//print your vote
$votinga=$voting-1;
if($voting>0 and $voting<$id)
	{
	echo "<br><br><br>Zaglosowales na $voting";
	echo "<br>aktualnych glosow na pozycje $voting: ";
	$sql = "SELECT * FROM `c_toplista` LIMIT $votinga, $votinga";
	$result = mysql_query($sql);
	$line = mysql_fetch_array($result);
	echo stripslashes($line['votes']);
	$db_votes=stripslashes($line['votes']);
	$i_db_votes=$db_votes+1;
	$sql = "UPDATE 'c_toplista' SET 'votes'=\"$i_db_votes\" WHERE 'id'=$voting";
	} 

//print footer

 echo "   <br><br><hr>\n";
 echo " Powered by Camillo 2005\n";
 echo "  </center> \n ";
 echo " </body> \n ";
 echo "</html> \n ";
 
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1