[PHP&MySQL] Poll mbv update stem optellen

Pagina: 1
Acties:

  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
Ok, titel beetje vaag misschien maar ik zal het proberen uit te leggen:
Ik wou een pollsysteempje maken, die meerdere polls ondersteunt. Zo gezegd zo gedaan, alles ging goed.. Toen kwam ik erachter dat op de manier waarop het scriptje toen was, dat het de database wel heel erg veel zou vragen naarmate er meer polls zouden komen, want iedere entry (dus vote voor dit of dat) zou een nieuwe row aanmaken. Onzin dus. B)

Na even nadenken kwam ik op het idee om het met een 'UPDATE' te doen...
Script waar ik uiteindelijk op uitkwam:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
include "config.php";
mysql_connect("$dbhost","$dbuser","$dbpassword"); 
mysql_select_db("$dbname"); 

$select= "SELECT * FROM poll ORDER BY id DESC LIMIT 1";
$result = mysql_query($select);
$row = mysql_fetch_array($result);

$id = $row['id']; 
$question = $row['question'];
$choice1 = $row['choice1'];
$choice2 = $row['choice2'];
$choice3 = $row['choice3'];
$choice4 = $row['choice4'];
$choice5 = $row['choice5'];
?>

<FORM METHOD="POST" ACTION="<?php echo"$PHP_SELF"; ?>">
<?php echo "$question"; ?>
<INPUT TYPE="radio" NAME="poll" VALUE="choice1"><?php echo "$choice1"; ?><br>
<INPUT TYPE="radio" NAME="poll" VALUE="choice2"><?php echo "$choice2"; ?><br>
<INPUT TYPE="radio" NAME="poll" VALUE="choice3"><?php echo "$choice3"; ?><br>
<INPUT TYPE="radio" NAME="poll" VALUE="choice4"><?php echo "$choice4"; ?><br>
<INPUT TYPE="radio" NAME="poll" VALUE="choice5"><?php echo "$choice5"; ?><br>
<INPUT TYPE="HIDDEN" NAME="id" VALUE="<?php echo "$id"; ?>">
<input type="HIDDEN" name="hidden" VALUE="1">
<INPUT TYPE="Submit" NAME="vote" VALUE="Vote">
<INPUT TYPE="Submit" NAME="result" VALUE="See Result">
</FORM>

<?php

if($vote) {
    
    $select= "SELECT * FROM pollanswers WHERE id='$id' ORDER BY id DESC LIMIT 1";
    $result = mysql_query($select);
    $row = mysql_fetch_array($result);
    $answers = $row['$poll'];
    $answer = $answers+1;
    
    $update = "UPDATE pollanswers SET $poll='$answer' WHERE id='$id'"; 
    mysql_query($update) or die("MySQL is taking a short nap, please try again in a minute."); 
}               

$row1 = mysql_query("SELECT choice1 FROM pollanswers"); 
$row2 = mysql_query("SELECT choice2 FROM pollanswers"); 
$row3 = mysql_query("SELECT choice3 FROM pollanswers"); 
$row4 = mysql_query("SELECT choice4 FROM pollanswers"); 
$row5 = mysql_query("SELECT choice5 FROM pollanswers"); 

$totaal1 = mysql_fetch_array($row1); 
$totaal2 = mysql_fetch_array($row2);
$totaal3 = mysql_fetch_array($row3);
$totaal4 = mysql_fetch_array($row4);
$totaal5 = mysql_fetch_array($row5);
$totaal = $totaal1+$totaal2+$totaal3+$totaal4+$totaal5; 

$procent1 = $totaal1 / $totaal * 100; 
$procent2 = $totaal2 / $totaal * 100; 
$procent3 = $totaal3 / $totaal * 100; 
$procent4 = $totaal4 / $totaal * 100; 
$procent5 = $totaal5 / $totaal * 100; 

$procent1 = round($procent1); 
$procent2 = round($procent2); 
$procent3 = round($procent3); 
$procent4 = round($procent4); 
$procent5 = round($procent5); 

echo" 
$totaal Votes<br>
$choice1 $procent1 %<br>
$choice2 $procent2 %<br>
$choice3 $procent3 %<br>
$choice4 $procent4 %<br>
$choice5 $procent5 %<br>
"; 

} 
?>


Als ik nu een poll heb toegevoegd, en probeer te voten gaat er iets mis... Hij doet namelijk niks :\ Ook geeft hij geen errors ofzo...
Ik neem aan dat het probleem zich hier bevind:
PHP:
1
2
$update = "UPDATE pollanswers SET $poll='$answer' WHERE id='$id'"; 
mysql_query($update) or die("MySQL is taking a short nap, please try again in a minute.");


Het vervelende is dat ik na 2 uur ploeteren nog niks ben opgeschoten, en ik kan het probleem echt niet vinden... Het zal wel een hele stomme fout zijn, in dat geval, vergeef me, ik ben maar een n00b... :)

Btw, ik heb de code wat gestript van lay-out etc. maar niks belangrijks weggelaten.

Nogmaals het probleem: hij wil niet updaten. De standaardwaarde van $choice1 ... $choice5 is 0, in de tabel pollanswers... Dus dan zou hij toch 0+1 moeten doen? In ieder geval, dat doet hij dus niet :) En waarom, weet ik niet... Ik heb voor de zekerheid maar ff de mySQL 'tutorial' van www.w3school.org gebruikt om te checken of het wel klopte wat ik heb gedaan, en volgens mij klopt dat stuk dus wel.
Het kan ook zijn dat daar de fout in zit, maar dan zie ik hem iig over het hoofd.

Ik doe nu ondertussen ook al een half uur over deze post omdat ik een aantal bugs heb gevonden en dus ook verwijdert, maar het probleem is nogsteeds hetzelfde...
Ik moet nu naar m'n vrienden toe, al een half uur te laat... :+

Verwijderd

eXtReMeBiE schreef op 22 November 2002 @ 21:06:
[...]
PHP:
1
2
$update = "UPDATE pollanswers SET $poll='$answer' WHERE id='$id'"; 
mysql_query($update) or die("MySQL is taking a short nap, please try again in a minute.");
PHP:
1
2
3
4
5
6
7
8
9
$update = "
  UPDATE
    pollanswers
  SET
    ". $poll . "='" . $answer ."'
  WHERE
    id = '". $id ."'"; 

mysql_query($update) or die(mysql_error());

en kijk nu eens wat eruit komt, als je terugkomt van je vriendin ;)

[ Voor 20% gewijzigd door Verwijderd op 22-11-2002 21:41 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:46
Verwijderd schreef op 22 november 2002 @ 21:40:
[...]


PHP:
1
2
3
4
5
6
7
8
9
$update = "
  UPDATE
    pollanswers
  SET
    ". $poll . "='" . $answer ."'
  WHERE
    id = '". $id ."'"; 

mysql_query($update) or die(mysql_error());

en kijk nu eens wat eruit komt, als je terugkomt van je vriendin ;)

Een id zal wel numeriek zijn, en rond een numeriek veld mag je geen quotes zetten.

https://fgheysels.github.io/


  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
vrienden 8)7

overigens werkt ie nog steeds niet... ik begin er nu aan te twijfelen of ik überhaupt wel een goede tabel-keuze heb genomen. Voor de zekerheid even de tabellen die ik heb gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CREATE TABLE poll (
id int(11) NOT NULL auto_increment,
question VARCHAR(15) NOT NULL,
choice1 VARCHAR(15) NOT NULL,
choice2 VARCHAR(15) NOT NULL,
choice3 VARCHAR(15) NOT NULL,
choice4 VARCHAR(15) NOT NULL,
choice5 VARCHAR(15) NOT NULL,
PRIMARY KEY (id),
KEY id (id),
UNIQUE id_2 (id));

CREATE TABLE pollanswers ( 
id int(11) NOT NULL, 
choice1 INT(15) NOT NULL,
choice2 INT(15) NOT NULL,
choice3 INT(15) NOT NULL,
choice4 INT(15) NOT NULL,
choice5 INT(15) NOT NULL
);


Hij geeft geen error trouwens, behalve dan:
Warning: Division by zero in c:\phpdev\www\poll\poll.php on line 119
Maar dat komt weer omdat er nog geen entries zijn in de tabel pollanswers, en moet het script dus 0 gedeeld door aantal entries doen, en iets gedeeld door 0 kan niet :)

[ Voor 100% gewijzigd door eXtReMeBiE op 22-11-2002 22:52 ]


  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 06-07 14:29
volgens dit model geef je maximaal 5 antwoorden per poll?

affijn, ik zou een update kiezen in de trend van
PHP:
1
2
3
4
5
6
7
8
$sql='
UPDATE 
   pollanswers 
SET 
   choice'.$choise.'=choise'.$choise.'+1 
WHERE 
   id='.$id;
$result=mysql_query($sql);

waarbij $choise dus het nummer is van de keuze, zelf zou ik wel kiezen voor een apparte tabel met de gemaakte keuzes en met count gaan werken omdat je dan ook makkelijker kan controleren of een user al gekozen heeft in die poll

[ Voor 14% gewijzigd door _-= Erikje =-_ op 22-11-2002 23:49 ]


  • eXtReMeBiE
  • Registratie: Februari 2002
  • Laatst online: 26-08 10:42
Ok, hij doet het nog niet, maar misschien heeft het hier mee te maken:
als ik in mySQL gewoon een waarde (bijv. 30) aan bijvoorbeeld choice1 geef, en vervolgens vote, veranderd de waarde 30 in de SQL tabel ineens in 1? (ik heb dit online getest) Heel vreemd...
Ik gebruik trouwens op dit moment de code van whoami, die van Erikje wou al helemaal niet werken... Het kan ook zijn dat ik die fout gebruik, natuurlijk...
Nu heb ik dus:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if($vote) {
    
    $select= "SELECT * FROM pollanswers WHERE id='$id' ORDER BY id DESC LIMIT 1";
    $result = mysql_query($select);
    $row = mysql_fetch_array($result);
    $answers = $row['$poll'];
    $answer = $answers+1;
    
    $update = " 
  UPDATE 
    pollanswers 
  SET 
    ". $poll . "='" . $answer ."' 
  WHERE 
    id = '". $id ."'";  
    mysql_query($update) or die(mysql_error());
}


Ook geeft hij (als ik 'm op mijn lokale server run, met PHPDEV = programmatje voor php en sql ondersteuning, als je t niet wist ;)) bij line 116 tot en met line 120 een error, namelijk gebruik van een 'unsupported operator'...
Dit is line 116:
$procent1 = $totaal1 / $totaal * 100;
Ik dacht toch echt dat '/' een geschikte operator was? Ik heb op mijn localhost wel PHP versie 4.0, daar kan t ook aan liggen... of niet?

edit:
Ik denk dat ik een stapje dichter bij het probleem ben... Als hij de entry in de tabel van * naar 1 veranderd terwijl *>0, moet het probleem hem dus zitten in het 'uit de tabel lezen'...

[ Voor 20% gewijzigd door eXtReMeBiE op 23-11-2002 10:09 ]

Pagina: 1