Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
algeron
HV vaatleja

liitunud: 30.12.2011
|
30.12.2011 11:09:27
mySQL + PHP |
|
|
Tere,
Süsteemi ülesehitus:
Kui registreeritakse kasutaja, siis genereeritakse (kopeeritakse baasandmebaasi järgi) kasutajale vastav andmebaas *nimi*_songs;
(võib-olla natuke kilplaslik lahendus, aga see selleks)
Nüüd oleks vaja teha väike php script, kus arvutatakse välja kõikide kasutajate tabelite vastavate ridade mingi välja tulemus.
(e.g.
Kasutajale1 on esimese laulu tulemus 10 ja teise laulu tulemus 8.
Kasutajale2 on esimese laulu tulemus 6 ja teise laulu tulemus 4.
Süsteem peaks kuvama:
Esimene laul: 18.
Teine laul: 10.
)
Mõtlesin, et see peaks olema midagi, sellist, et kõigepealt käiakse tsükliga läbi kogu kasutajate tabel ja selle tsükli sees on teine tsükkel, mis iga ring võtab kasutaja_songs andmebaasist oma korda read ja siis liidab need kokku.
Paraku, siin kohal jooksis mul juhe kokku ja ma üritasin genereerida midagi sellist, aga see ei tööta:
<?php
$sql = "select * from users order by user_id ASC";
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
$user = $row['user_name'];
echo "<li>$user</li>";
$sql = "select * from " . $user . "_songs order by Category_Display_Order ASC";
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
$tulemus = $row['Category_Display_Order'];
$tulemus++;
echo $tulemus;
}
}
?> |
Kas keegi aitab pisut?
Aitäh!
|
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.12.2011 11:43:54
|
|
|
Mis tähendab - "ei tööta" ? Annab mingi veateate, annab valesid tulemusi.. ? Räägi täpsemalt hetkeprobleemist ja siis saab ehk edasi vaadata. Pealegi see teema vist passib paremini Programmeerimise alafoorumisse kui WWW alla - äkki keegi jumal tõstab?
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
30.12.2011 12:22:32
|
|
|
tsitaat: |
Kasutajale1 on esimese laulu tulemus 10 ja teise laulu tulemus 8.
Kasutajale2 on esimese laulu tulemus 6 ja teise laulu tulemus 4.
Süsteem peaks kuvama:
Esimene laul: 18.
Teine laul: 10. |
Minul jookseks ma mõte kokku, kui kahekümne piires arvutada ei oska
10+6=16 mitte 18
8+4=12 mitte 10
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
30.12.2011 12:43:44
|
|
|
Sul tsüklis nagu ju ei liideta neid tulemusi, sa võtsid tabelist tulemuse ja seejärel liitsid talle ühe nig kuvasid, kohe seejärel võtsid uue tulemuse liitsid ühe jne...
siis sul oleks kuvanud
tsitaat: |
asutajale1 on esimese laulu tulemus 10 ja teise laulu tulemus 8. |
11
9
peaks midagi sellist olema kui see Category_Display_Order on see laulu tulemuste rida
$tulemus=0;
while ($row = mysql_fetch_array($query)) {
$tulemus = $tulemus+$row['Category_Display_Order'];
}
echo $tulemus; |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
30.12.2011 13:35:55
|
|
|
19Mart94, Sorry! Aga see ei mänginud mingit rolli! Sa said väga hästi aru, mida ma mõtlesin. Püüa olla, onju!
andrusny, Aitäh! Hetke viga on see, et ta kuvab viimase kasutaja laulu järjekorda. Teiste kasutajate tulemused ei muuda midagi.
Output - Ei saa isegi aru, kuidas sellised numbrid tulevad:
Laul1 0 p.
Laul2 1 p.
Laul3 3 p.
Laul4 6 p.
Laul5 10 p.
Laul6 15 p.
Laul7 21 p.
Laul8 28 p.
Laul9 36 p.
Laul10 45 p
|
Andmebaasi tabelis on viimasel kasutajal sellised tulemused:
Laul1 0p
Laul2 1p
Laul3 2p
Laul4 3p
Laul5 4p
Laul6 5p
Laul7 6p
Laul8 7p
Laul9 8p
Laul10 9p
|
Hetke kood siis:
$sql = "select * from users order by user_id ASC";
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
$user = $row['user_name'];
echo "<li>$user</li>";
//$sql = "select * from " . $user . "_songs";
$sql = "select * from " . $user . "_songs order by Category_Display_Order ASC";
}
$query = mysql_query($sql);
echo "<table class='tabelid'>";
while ($row = mysql_fetch_array($query)) {
$nimi = $row['Category_Name'];
$tulemus = $tulemus + $row['Category_Display_Order'];
//$tulemus++;
echo "<tr><td>" . $nimi . "</td><strong><td>" . $tulemus . " p.</td></tr></strong></li>";
}
echo "</table>";
|
|
|
tagasi üles |
|
 |
limp
HV Guru

liitunud: 11.08.2003
|
30.12.2011 13:48:06
|
|
|
$sql = "select * from users order by user_id ASC";
$query = mysql_query($sql);
while ($row = mysql_fetch_array($query)) {
$user = $row['user_name'];
$sql = "select * from " . $user . "_songs order by Category_Display_Order ASC";
$query_user = mysql_query($sql);
while ($row_user = mysql_fetch_array($query_user)) {
$nimi = $row_user['Category_Name'];
$arrLaulud[$nimi]+=$row_user['Category_Display_Order'];
}
}
print_r($arrLaulud);
|
kuna on pohmakas, siis väga ei suutnud süübida, aga peaks töötama
_________________ Ärgake lapsed, maailm on hädaohus
Windows keskkond on nagu li*s - kõik teda ke*ivad aga keegi teda ei armasta! |
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
52 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
30.12.2011 14:18:03
|
|
|
limp, Aitäh! Põhimõtteliselt töötab jah! Kuigi ma ei saa sellest array loogikast aru.
Mis moodi mul oleks võimalik see uuesti normaalse tabeli kujule saada.
Mitte:
Kas neid array'sid on võimalik järjestada tulemuse järgi? SQL-s on lihtne - ORDER BY
Aitäh, abi eest!
|
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.12.2011 14:21:06
|
|
|
Tegelikult oleks võimalik see ülesanne ju ühe natuke suurema päringuga otse SQL-is ära lahendada.. kaks tabelit kokku joinida, SUM funktsiooni kasutada ja tulemused välja trükkida.. kas pole? PHP-s summeerimine tundub küll natuke liiga jalgratta leiutamise moodi.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
30.12.2011 14:22:34
|
|
|
algeron kirjutas: |
limp, Aitäh! Põhimõtteliselt töötab jah! Kuigi ma ei saa sellest array loogikast aru.
Mis moodi mul oleks võimalik see uuesti normaalse tabeli kujule saada.
Mitte:
Kas neid array'sid on võimalik järjestada tulemuse järgi? SQL-s on lihtne - ORDER BY
Aitäh, abi eest!
 |
sort($array, SORT_NUMERIC); |
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
limp
HV Guru

liitunud: 11.08.2003
|
30.12.2011 14:26:43
|
|
|
foreach-iga käid massiivi läbi, saad nad sellisele kujule nagu tahad.järjestamiseks uuri array sortimist.
Fukiku - eks see maitse asi, maeitea, palju performance hakkab kannatama kui 1000+ tabelit joinid....
_________________ Ärgake lapsed, maailm on hädaohus
Windows keskkond on nagu li*s - kõik teda ke*ivad aga keegi teda ei armasta! |
|
Kommentaarid: 56 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
52 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.12.2011 14:40:18
|
|
|
limp kirjutas: |
foreach-iga käid massiivi läbi, saad nad sellisele kujule nagu tahad.järjestamiseks uuri array sortimist.
Fukiku - eks see maitse asi, maeitea, palju performance hakkab kannatama kui 1000+ tabelit joinid.... |
Okei, see 1000+ tabeli joinimine ilmselt ei ole hea mõte ja seda ei saa vist ka enam ühe päringuga lihtviisiliselt teha. Siin pigem tuleks juba andmemudel ümber vaadata - selle asemel, et igale kasutajale eraldi tabel teha, võiks olla laulude tabelis igal real viide kasutajale vms.
Täienduseks veel.. 1000+ tabeli joinimine on kahtlemata aeglane, aga samamoodi on aeglane ka 1000+ eraldi päringu tegemine tabelite kaupa.. Seega igat pidi on see andmemudel juba algusest peale paraku väga halvasti kokku pandud.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
30.12.2011 14:51:13
|
|
|
Suured tänud! Hetkel olen asja tööle saanud.
Mis puutub andmemudelisse, siis ma üritasin mingit paremat lahendust leida - aga kuna midagi head ei tulnud, siis läksin nö lihtsama vastupanu teed.
Ilmselt tekib nüüd järgmistes punktides veel probleeme, aga "We'll cross that bridge when we come to it"
Aitäh veelkord!
|
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
30.12.2011 15:04:35
|
|
|
algeron kirjutas: |
Suured tänud! Hetkel olen asja tööle saanud.
Mis puutub andmemudelisse, siis ma üritasin mingit paremat lahendust leida - aga kuna midagi head ei tulnud, siis läksin nö lihtsama vastupanu teed.
Ilmselt tekib nüüd järgmistes punktides veel probleeme, aga "We'll cross that bridge when we come to it"
Aitäh veelkord! |
Siiski, ma soovitan mõelda andmemudeli muutmisele enne, kui sa selle süsteemi endal liiga suureks ehitad.
Iseenesest on sul hetkel, nagu ma aru saan, tabel kasutajate kohta ja iga kasutaja kohta tabel lauludega, kus lauludega mingid hinded vms. seostatakse. Uute tabelite tekitamine iga kasutaja kohta on üsna mitmes mõttes halb asi, alustades kasvõi sellest, et see tähendab, et sa pead andma oma veebilehe andmebaasikasutajale baasis CREATE privileegi, mis on kindlasti halb mõte juhuks kui keegi peaks su süsteemi maha murdma mingi SQL injection või muu ründega.
Soovitan kasutada sellist struktuuri, kus sul on kasutajate tabel nagu praegu ja üks tabel laulude jaoks, kus on samad väljad nagu praegu su laulude tabelis pluss täiendavalt lisaväli, millega viitad users tabelisse kas kasutajanime või muu unikaalse tunnuse järgi. Siis saaksid põhimõtteliselt oma ülesande ka ühe päringuga baasis ära lahendada. Pikemas perspektiivis, kui su süsteemi kasutajate arv kasvab, on see variant ka oluliselt parema jõudlusega.
_________________ Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist. |
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
Redikate
HV veteran

liitunud: 30.12.2005
|
30.12.2011 16:26:17
|
|
|
iga kasutaja jaoks eraldi tabel? kuskohas veel sellist asja õpetatakse?
Soovitan tõsiselt kaaluda Fukiku pakutud lahendust. Jõudluse vahe on ilmselt kordades ning samuti on kordi lihtsam koosatada päringuid ning hallata kogu asja.
_________________ http://nodejs.org/
"I'm also a person. Programming is just one thing I do." |
|
Kommentaarid: 34 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
33 |
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
30.12.2011 17:15:28
|
|
|
Fukiku, mõtlesid vist sellist asja (Lihtsalt selgitamiseks):
Users:
+----------+----------+
| id | username |
+----------+----------+
| 1 | User1 |
| 2 | User2 |
| 3 | User3 |
| 4 | User4 | |
Hinnang:
+------------+---------+----------+---------+
| hinnang_id | user_id | laul_id | punkte |
+------------+---------+----------+---------+
| 1 | 1 | 4 | 5 |
| 2 | 1 | 3 | 1 |
| 3 | 3 | 2 | 10 |
| 4 | 4 | 2 | 5 |
| 5 | 2 | 1 | 4 | |
Laulud:
+---------------+------------+
| laul_name_id | laul_name |
+---------------+------------+
| 1 | Laul1 |
| 2 | Laul2 |
| 3 | Laul3 |
| 4 | Laul4 | |
$laulud = array();
$kogu_ifo = mysql_query("Select laul_name, SUM(punkte) As laul_punkte_kokku From users Left Join hinnang On id = user_id Left Join laulud on laul_id = laul_name_id Group By laul_id") or die(mysql_error());
while ($info = mysql_fetch_assoc($kogu_ifo))
$laulud[''.$info['laul_name'].''] = $info['laul_punkte_kokku'];
arsort($laulud);
foreach($laulud as $key => $value) {
echo $key." ".$value."<br>";
}
|
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
Fukiku
Kreisi kasutaja

liitunud: 06.11.2003
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
02.01.2012 14:11:28
|
|
|
Aitäh, ümber tegemine tekitab jälle küsimusi.
Ei oska õigesti SQL lauset teha:
foreach ($_GET['item'] as $key => $value) {
mysql_query("UPDATE hinnang SET hinnang.punkte = '$key' FROM hinnang INNER JOIN users ON hinnang.user_id = users.id WHERE users.username = ".$myusername."");
} |
Point peaks olema, et ta uuendab tabelis "hinnang" ridasid vastavalt kasutajale, kellega ta on sisse loginud .
|
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
02.01.2012 15:23:32
|
|
|
Kasuta $myusername väärtuse asemel kasutaja ID-d, see on palju kindlam, sest kasutajanimi võib sisaldada tähemärke, mis Query-le ei meeldi. Või tee siis mingisugune funktsioon:
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '".mysql_real_escape_string($username)."'"), 0);
}
|
Nüüd näeb sinu muu osa koodist välja nii:
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$value)."' Where user_id = '".get_user_id("$myusername")."' And laul_id = '".mysql_real_escape_string((int)$key)."'");
}
|
Mida minu kood teeb?
See uuendab tabelit "hinnang", muudab punktide numbri X peale, kus kasutaja ID on Y ning laulu ID on Z. $key on laulu ID ning $value on punktide summa
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
02.01.2012 17:30:12
|
|
|
19Mart94, Aitäh!
Midagi oli valesti - kui ma järjekorda ümber tõstsin, siis ta ei toiminud õigesti, aga kui ma $key ja $value omavahel ära vahetasin, siis hakkas asi õigesti toimima.
Kasutan järjestamiseks jquery UI "sortable"-d
Aga kui ma teise kasutajaga seda proovisin, siis miskipärast ei tööta.
session_start();
if (!isset($_SESSION['myusername'])) {
header("Location: index.php");
exit;
}
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '" . mysql_real_escape_string($username) . "'"), 0);
}
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$key)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$value)."'");
} |
|
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
02.01.2012 17:51:11
|
|
|
algeron kirjutas: |
19Mart94, Aitäh!
Midagi oli valesti - kui ma järjekorda ümber tõstsin, siis ta ei toiminud õigesti, aga kui ma $key ja $value omavahel ära vahetasin, siis hakkas asi õigesti toimima.
Kasutan järjestamiseks jquery UI "sortable"-d
Aga kui ma teise kasutajaga seda proovisin, siis miskipärast ei tööta.
session_start();
if (!isset($_SESSION['myusername'])) {
header("Location: index.php");
exit;
}
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '" . mysql_real_escape_string($username) . "'"), 0);
}
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$key)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$value)."'");
} |
|
Geenius oled.
Nüüd on sul kasutajanimi sessiooni väärtuses ju
get_user_id($_SESSION['myusername']); |
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
03.01.2012 11:34:59
|
|
|
Sorry, sellest postitusest polnud kasu!
Ikka sama viga. Kasutajaga id=1; muudab ka andmebaasi, teiste kasutajatega aga ei muuda.
Äkki, keegi teine oskab aidata?
Kuna 19Mart94-l on kopp ees.
-----------------------------------------------------------
Viga on kuskil selles, et $value väärtus on hinnang_id, mitte laul_id.
Kui ma vaatan access.log, siis kasutaja id=1, kellele vastavadki hinnang_id 1-5, suudab ilusti updateda andmebaasi:
db.php?item[]=1&item[]=2&item[]=3&item[]=4&item[]=5 |
Kui aga mõne teise kasutajaga, kellele on genereeritud hinnang tabelisse read, kus hinnang_id on 27-31, siis ei saa updateda andmebaasi ja access.log kuvab:
db.php?item[]=27&item[]=28&item[]=29&item[]=30&item[]=31 |
Seega kogu selle andmebaasi uuendamise kood:
session_start();
//if (!session_is_registered(myusername)) {
if (!isset($_SESSION['myusername'])) {
header("Location: index.php");
exit;
}
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '" . mysql_real_escape_string($username) . "'"), 0);
}
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '" . mysql_real_escape_string((int) $key) . "' Where user_id = '" . get_user_id($myusername) . "' And laul_id = '" . mysql_real_escape_string((int) $value) . "'");
|
jQuery saadab andmed teisest failist siia nii:
$("#sortable").sortable({
placeholder: 'ui-state-highlight',
stop: function(i) {
placeholder: 'ui-state-highlight'
$.ajax({
type: "GET",
url: "db.php",
data: $("#sortable").sortable("serialize")});
}
});
|
19Mart94, võid mind vabalt aidata
Ja teised targad, samuti!
|
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
03.01.2012 11:46:18
|
|
|
Seleta mulle lahti, mida sa täpselt teha tahad, hetkel jäi tiba segaseks
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
03.01.2012 12:36:51
|
|
|
Okei.
Kõik baseerus sellele tutorialile: LINK
Ehk siis hetkel see andmebaasi tabeli uuendamine ei toimi. Toimib ainult ühe kasutajaga. Ilmselt sellepärast, kuna kood tahab muuta tabelis "hinded" ainult neid välju kus kasutajanimi ja laulu_id klapiks, aga kuskil tuleb viga sisse, kuna ta kasutab hinnang_id numbrit. Esimesel kasutajal need numbrid kattuvad.
Kui ma muutsin andmebaasis esimese kasutajale vastavad hinnang_id mingiteks muudeks, näiteks 6-10 ja panin teise kasutaja hinnang_id 1-5, siis töötasid teise kasutaja andmebaasi uuendused ja esimesel ei muutunud midagi.
Seega viga on kuskil mujal, aga ma ei leia seda:
<?php
include('connect.php');
session_start();
if (!isset($_SESSION['myusername'])) {
header("Location: index.php");
exit;
}
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '" . mysql_real_escape_string($username) . "'"), 0);
}
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$key)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$value)."'");
}
?>
|
|
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
03.01.2012 12:49:49
|
|
|
algeron kirjutas: |
Okei.
Kõik baseerus sellele tutorialile: LINK
Ehk siis hetkel see andmebaasi tabeli uuendamine ei toimi. Toimib ainult ühe kasutajaga. Ilmselt sellepärast, kuna kood tahab muuta tabelis "hinded" ainult neid välju kus kasutajanimi ja laulu_id klapiks, aga kuskil tuleb viga sisse, kuna ta kasutab hinnang_id numbrit. Esimesel kasutajal need numbrid kattuvad.
Kui ma muutsin andmebaasis esimese kasutajale vastavad hinnang_id mingiteks muudeks, näiteks 6-10 ja panin teise kasutaja hinnang_id 1-5, siis töötasid teise kasutaja andmebaasi uuendused ja esimesel ei muutunud midagi.
Seega viga on kuskil mujal, aga ma ei leia seda:
<?php
include('connect.php');
session_start();
if (!isset($_SESSION['myusername'])) {
header("Location: index.php");
exit;
}
function get_user_id($username) {
return mysql_result(mysql_query("Select id From users Where username = '" . mysql_real_escape_string($username) . "'"), 0);
}
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$key)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$value)."'");
}
?>
|
|
<?php
foreach ($_GET['item'] as $key => $value) {
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$key)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$value)."'");
}
?> |
Kui sul tuleb GET väärtusest selline rida:
db.php?item[]=1&item[]=2&item[]=3&item[]=4&item[]=5 |
Siis sinu array näeb välja selline:
$arr = array(1, 2, 3, 4, 5); |
Array peaks välja nägema nii:
$arr = array("1" => 1, "2" => 2, "3" => 3, "4" => 4, "5" => 5); |
Ehk, siit tuleks nüüd selline foreach, nagu sinul vaja:
foreach ($_GET['item'] as $key => $value) { // $key väärtus on "" vahel olev number, ning $value väärtus on ilma jutumärkideta
mysql_query("Update hinnang Set punkte = '".mysql_real_escape_string((int)$value)."' Where user_id = '".get_user_id($myusername)."' And laul_id = '".mysql_real_escape_string((int)$key)."'");
} |
Ehk, sinu GET väärtused peaksid välja nägema nii:
db.php?item[1]=1&item[2]=2&item[3]=3&item[4]=4&item[5]=5 |
Kus [] vahel olev on laulu ID ning peale = olev number on hinnang
Kui arusaamatuks jäi, siis küsi üle
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
algeron
HV vaatleja

liitunud: 30.12.2011
|
03.01.2012 13:14:15
|
|
|
Okei, aga ma ei saa seda GET array'ed muuta ju, see genereerub jQuery UI Sortable -serializeiga:
Serializes the sortable's item id's into a form/ajax submittable string. Calling this method produces a hash that can be appended to any url to easily submit a new item order back to the server.
It works by default by looking at the id of each item in the format 'setname_number', and it spits out a hash like "setname[]=number&setname[]=number".
You can also give in a option hash as second argument to custom define how the function works. The possible options are: 'key' (replaces part1[] with whatever you want), 'attribute' (test another attribute than 'id') and 'expression' (use your own regexp).
If serialize returns an empty string, make sure the id attributes include an underscore. They must be in the form: "set_number" For example, a 3 element list with id attributes foo_1, foo_5, foo_2 will serialize to foo[]=1&foo[]=5&foo[]=2. You can use an underscore, equal sign or hyphen to separate the set and number. For example foo=1 or foo-1 or foo_1 all serialize to foo[]=1.
|
Ühesõnaga - ei saanud aru/abi. Kas on mingi muu võimalus?
|
|
tagasi üles |
|
 |
|