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 :)
Nigdy nie probowałem robic w jednym formularzu wiecej niz jeden przycisk submit, no ale powiem Ci jak ja bym to widział:
- Dla kazdego wiersza z kolumny votes tworzysz osobny formularz
- 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
- W kazdym formularzu action ustawiasz na ten sam plik - np. skrypt.php
- 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'
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="\"submit\"" value="\"Glosuj" na="na" $i="$i" kandydata\"="kandydata\"" name="\"B[$i]\"">"; } ?>
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 } } ?>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> - "<i>Tytuł</i>"</td>\n ";
echo " <td width=\"62\" height=\"53\" align=\"center\"> </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 ";