Toon posts:

[php]result laten zien

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een poll script. Als je nu stemt dan zie je weer de zelfde pagina als voor dat je gestemd hebt. Ik wil graag dat de stem opties niet getoond worden als je stemd en dat er dan een text komt te staan. Dan laatste krijg ik dus niet voormekaar.

Dit is me script:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?
 
 include "dbconfig.php";
 mysql_connect($dbhost, $dbuser, $dbpassword); 
 $query = "SELECT * FROM pollinfo WHERE id='$art_id'";
 $result = mysql_db_query($dbname, $query);

 if ($result)
{
    while ($r = mysql_fetch_array($result))
    {
$id = $r["id"];
        $Titel = $r["titel"];
         $Titel = stripslashes($Titel);
        $date = date ("H:i", $r['date']);


$plaatje = "img/balkje.gif";
$vraag1 = $r["vraag1"];
$vraag2 = $r["vraag2"];
$vraag3 = $r["vraag3"];
$vraag4 = $r["vraag4"];
$vraag5 = $r["vraag5"];
$antwoord1_old = $r["antwoord1"];
$antwoord2_old = $r["antwoord2"];
$antwoord3_old = $r["antwoord3"];
$antwoord4_old = $r["antwoord4"];
$antwoord5_old = $r["antwoord5"];

$totaal = $antwoord1_old + $antwoord2_old + $antwoord3_old + $antwoord4_old + $antwoord5_old;


  /** PROCENTEN BEREKENEN **/ 

  $waarde1 = $antwoord1_old / $totaal * 100; 
  $waarde2 = $antwoord2_old / $totaal * 100; 
  $waarde3 = $antwoord3_old / $totaal * 100; 
  $waarde4 = $antwoord4_old / $totaal * 100; 
  $waarde5 = $antwoord5_old / $totaal * 100; 

  /** PROCENTEN AFRONDEN OP GEHELEN **/ 

  $afg_waarde1 = round($waarde1); 
  $afg_waarde2 = round($waarde2); 
  $afg_waarde3 = round($waarde3); 
  $afg_waarde4 = round($waarde4); 
  $afg_waarde5 = round($waarde5);

  /** LENGTE VAN HET PLAATJE BEREKENEN **/ 

  $image_w1 = $afg_waarde1 / 100 * 150; 
  $image_w2 = $afg_waarde2 / 100 * 150; 
  $image_w3 = $afg_waarde3 / 100 * 150; 
  $image_w4 = $afg_waarde4 / 100 * 150; 
  $image_w5 = $afg_waarde5 / 100 * 150; 

echo "$Titel<br>";
echo "<FORM ACTION='' METHOD='POST' name='formpje' Style='display:inline'>";

if($vraag1 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord1' VALUE='1' onclick='formpje.submit()'>$vraag1<br>";
}
if($vraag2 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord2' VALUE='1' onclick='formpje.submit()'>$vraag2<br>";
}
if($vraag3 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord3' VALUE='1' onclick='formpje.submit()'>$vraag3<br>";
}
if($vraag4 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord4' VALUE='1' onclick='formpje.submit()'>$vraag4<br>";
}
if($vraag5 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord5' VALUE='1' onclick='formpje.submit()'>$vraag5<br>";
}
echo "<INPUT TYPE=HIDDEN NAME='hidden' VALUE='1'></FORM>";
echo "Totaal aantal stemmen is: $totaal<br>";
$antwoord1= $antwoord1 + $r["antwoord1"];
$antwoord2= $antwoord2 + $r["antwoord2"];
$antwoord3= $antwoord3 + $r["antwoord3"];
$antwoord4= $antwoord4 + $r["antwoord4"];
$antwoord5= $antwoord5 + $r["antwoord5"];
    $query="UPDATE pollinfo SET antwoord1='$antwoord1', antwoord2='$antwoord2', antwoord3='$antwoord3', antwoord4='$antwoord4', antwoord5='$antwoord5'";

    $insert = mysql_db_query ($dbname,$query); 

}
}
else
{
    echo "Oooops, geen resultaat"; 
}
?>

Verwijderd

Je zult de gebruiker een cookie moeten sturen, zodat je bij het herladen van de pagina kunt zien of hij al gestemd heeft, en op basis daarvan een andere output laten zien.

Kijk eens naar http://www.php.net/manual/en/function.setcookie.php voor wat meer info over hoe je een cookie kan sturen.

Succes :)

Verwijderd

Topicstarter
nee dat hoeft niet....

het gaat alleen om de eerste keer na het stemmen...

als je dan weer refressed moet je gewoon weer kunnen stemmen..

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dat is, dacht ik, vrij simpel om te doen...

Geef een variabele mee en controleer of die gezet is.
Magoed, volgens mij is dit weer zoiets dat je makkelijk zelf kan bedenken, of niet?

Verwijderd

Topicstarter
Op maandag 24 december 2001 18:25 schreef ACM het volgende:
Dat is, dacht ik, vrij simpel om te doen...

Geef een variabele mee en controleer of die gezet is.
Magoed, volgens mij is dit weer zoiets dat je makkelijk zelf kan bedenken, of niet?
mzz tja, maar dan moet je wel weten HOE je dat moet doen...

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op maandag 24 december 2001 18:27 schreef izoman het volgende:

[..]

mzz tja, maar dan moet je wel weten HOE je dat moet doen...
en DAAR is nou net de search en php.net voor uitgevonden. Dit is het 3e topic van je vandaag geloof ik, en je mag ook zelf wel ff wat uit gaan zoeken. :{

  • Pelle
  • Registratie: Januari 2001
  • Laatst online: 18:23

Pelle

🚴‍♂️

Op maandag 24 december 2001 18:27 schreef izoman het volgende:
mzz tja, maar dan moet je wel weten HOE je dat moet doen...
Je kan wel dat script schrijven maar niet controleren op een variabele?

/edit
Of is het niet je eigen script? In dat geval heeft het helemaal geen zin om het hier te vragen; we zitten hier niet scripts aan te passen naar andermans wensen.

Probeer het zelf, kijk of je eruit komt of niet, zo niet, geef dan hetgeen waar je op vastloopt en dan willen de meesten je wel aardig op weg helpen.

Verwijderd

Is dit niet makkelijk te realisseren mbv sessions??

zo van:


<?php
session_start();
if (!$vote=="1") {
bla
bla
laat het stem venster zien
bla
$vote="1";
session_register("vote");
}

elseif ($vote=="1") {
echo"bla bla bla";
}


ofzoiets??

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

PHP:
1
2
3
4
5
6
7
8
9
<?
if($vraag1 == "")
{
}
else
{
echo"<INPUT TYPE='radio' NAME='antwoord1' VALUE='1' onclick='formpje.submit()'>$vraag1<br>";
}
?>

==>
PHP:
1
2
3
4
5
6
<?
if($vraag1 != "")
{
  echo"<INPUT TYPE='radio' NAME='antwoord1' VALUE='1' onclick='formpje.submit()'>$vraag1<br>";
}
?>

!= betekent niet gelijk aan.

Je kunt je kode veel leesbaarder maken op twee manieren: indenten en even gebruik maken van de ongelijk aan operator.

Ik heb nu je code niet echt gelezen omdat het wat te veel is...
Sorry.


[edit]
laat ik dan gelijk maar iets constructiefs doen
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
82
83
84
85
86
87
88
89
90
91
92
93
94
<?
include "dbconfig.php";
mysql_connect($dbhost, $dbuser, $dbpassword);
$query = "SELECT * FROM pollinfo WHERE id='$art_id'";
$result = mysql_db_query($dbname, $query);

if ($result) {
    while ($r = mysql_fetch_array($result))    {
        $id = $r["id"];
        $Titel = $r["titel"];
        $Titel = stripslashes($Titel);
        $date = date ("H:i", $r['date']);
        
        
        $plaatje = "img/balkje.gif";
        $vraag1 = $r["vraag1"];
        $vraag2 = $r["vraag2"];
        $vraag3 = $r["vraag3"];
        $vraag4 = $r["vraag4"];
        $vraag5 = $r["vraag5"];
        $antwoord1_old = $r["antwoord1"];
        $antwoord2_old = $r["antwoord2"];
        $antwoord3_old = $r["antwoord3"];
        $antwoord4_old = $r["antwoord4"];
        $antwoord5_old = $r["antwoord5"];
        
        $totaal = $antwoord1_old + 
                     $antwoord2_old + 
                     $antwoord3_old + 
                     $antwoord4_old + 
                     $antwoord5_old;
        
        
        /** PROCENTEN BEREKENEN **/
        
        $waarde1 = $antwoord1_old / $totaal * 100;
        $waarde2 = $antwoord2_old / $totaal * 100;
        $waarde3 = $antwoord3_old / $totaal * 100;
        $waarde4 = $antwoord4_old / $totaal * 100;
        $waarde5 = $antwoord5_old / $totaal * 100;
        
        /** PROCENTEN AFRONDEN OP GEHELEN **/
        $afg_waarde1 = round($waarde1);
        $afg_waarde2 = round($waarde2);
        $afg_waarde3 = round($waarde3);
        $afg_waarde4 = round($waarde4);
        $afg_waarde5 = round($waarde5);
        
        /** LENGTE VAN HET PLAATJE BEREKENEN **/
        
        $image_w1 = $afg_waarde1 / 100 * 150;
        $image_w2 = $afg_waarde2 / 100 * 150;
        $image_w3 = $afg_waarde3 / 100 * 150;
        $image_w4 = $afg_waarde4 / 100 * 150;
        $image_w5 = $afg_waarde5 / 100 * 150;
        
        echo "$Titel<br>";
        echo "<FORM ACTION='' METHOD='POST' name='formpje' Style='display:inline'>";
        
        if($vraag1 != "")
            echo"<INPUT TYPE='radio' NAME='antwoord1' VALUE='1' onclick='formpje.submit()'>$vraag1<br>";
        if($vraag2 != "")
            echo"<INPUT TYPE='radio' NAME='antwoord2' VALUE='1' onclick='formpje.submit()'>$vraag2<br>";
        if($vraag3 != "")
            echo"<INPUT TYPE='radio' NAME='antwoord3' VALUE='1' onclick='formpje.submit()'>$vraag3<br>";
        if($vraag4 == "")
            echo"<INPUT TYPE='radio' NAME='antwoord4' VALUE='1' onclick='formpje.submit()'>$vraag4<br>";
        if($vraag5 == "")
            echo"<INPUT TYPE='radio' NAME='antwoord5' VALUE='1' onclick='formpje.submit()'>$vraag5<br>";

        echo "<INPUT TYPE=HIDDEN NAME='hidden' VALUE='1'></FORM>";
        echo "Totaal aantal stemmen is: $totaal<br>";
        $antwoord1= $antwoord1 + $r["antwoord1"];
        $antwoord2= $antwoord2 + $r["antwoord2"];
        $antwoord3= $antwoord3 + $r["antwoord3"];
        $antwoord4= $antwoord4 + $r["antwoord4"];
        $antwoord5= $antwoord5 + $r["antwoord5"];
        
        $query="UPDATE pollinfo SET 
            antwoord1='$antwoord1', 
            antwoord2='$antwoord2', 
            antwoord3='$antwoord3', 
            antwoord4='$antwoord4', 
            antwoord5='$antwoord5'";
    
       $insert = mysql_db_query ($dbname,$query);
    
    }
}
else
{
    echo "Oooops, geen resultaat";
}
?>

Wat je wil kan op twee manieren, met koekjes en met sessies. Ik geeft even een voobeeld van koekjes:
PHP:
1
2
3
4
<?
// in scripje waar je de 'vote' afhandelt
setcookie("VOTED",'true');
?>


PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
//in bovenstaand script
$voted = "";
@$voted = $HTTP_COOKIE_VARS["VOTED"];
if($voted == "true") {
  // toon de resultaten, of tekst, of wat dan ook
}
else {
  // toon de poll.
}
?>

Ik kan het niet helemaal goed zien in je script maar het lijkt er sterk op dat je een fundatmentele fout hebt in database ontwerp. Je hebt meerdere kolommen met antwoorden. Dat is fout. De juiste genormaliseerde vorm is als volgt:

Poll(id,naam,tekst,...)
PollItems(id,pollId,tekst,...)
Antwoord(id,ipadres,gebruiker,antwoord,...)

Jou vorm lijkt als volgt te zijn:

Pollinfo(Antwoord1,Antwoord2,Antwoord3,...)

Zeker de manier waarop je 'm afhandelt is erg foutgevoelig. Bedenk dat Apache multitrhreaded is. Het is dus mogelijk dat je script twee maal tegelijk draait. Dat betekent dat de 1e zijn gegeven wegschrijft, NADAT de 2e zijn gegevens heeft opgehaald. Vervolgens schrijft de 2e zijn gegevens weg, en overschrijf 'ie de wijzigingen die door de 1e zijn gemaakt.

Met de mijn voorgestelde vorm kun je de volgende queries toepassen:
code:
1
2
3
4
5
6
7
8
9
# Poll teksten opvragen.
SELECT * FROM PollItems WHERE pollId=1; # <-- 1 vervangen door je huidige poll. 


# Poll totalen opvragen.
SELECT count(id) FROM Antwoord GROUP BY itemId WHERE pollId=1; # <-- 1 vervangen door je huidige poll. 

# vote toevoegen
INSERT INTO Antwoord (ipAdres,itemId,pollId) VALUES ('10.0.0.1',$gekozenItem,1); # <-- 1 vervangen door je huidige poll.

Het klinkt kinderachtig, maar het is echt belangrijk om een goed datamodel te hebben. Daarmee wordt je script hanteerbaarder, schaalbaarder en minder foutgevoelig.

Zoek eens een goed artikel over normaliseren. (eigenlijk vind ik dat zoiets in de FAQ moet staan. Gaat iemand eens een tutorial schrijven, of moet ik dat doen?)

Localhost, sweet localhost


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Je script zou er met een correct database ontwerp ongeveer zo uitzien:
(niet letterlijk overnemen, maar proberen te begrijpen. Ik heb het hele script niet getest, dus er zullen nog wel wat fouten in zitten)
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
<?
// maak databaseverbinding
include "dbconfig.php";
mysql_connect($dbhost, $dbuser, $dbpassword);

// is er gestemd?
$voted = "";
@$voted = $HTTP_COOKIE_VARS["VOTED"];

// indien zojuist gestemd is
if(isset($HTTP_POST_VARS["antwoord"]) {
    setcookie("VOTED","true");
    $antwoord=$HTTP_POST_VARS["antwoord"];
    $query = "
        INSERT INTO Antwoord (ipAdres,itemId,pollId) 
        VALUES ('10.0.0.1',$antwoord,$art_id);"

    mysql_query($query);
    $voted = 'true';    
}


// vraag het totaal aantal stemmen op
$query = "
    SELECT count(Antwoord.id) as cnt
    WHERE pollId=$art_id";
$result = mysql_query($dbname, $query);
$totaal = mysql_result(1,"cnt");


// vraag de vragen van de huidige poll op
$query = "
    SELECT 
      count(Antwoord.id) as cnt,
      Antwoord.id as id,
      PollItems.tekst as tekst 
    FROM Antwoord,PollItems 
    GROUP BY Antwoord.itemId 
    WHERE pollId=$art_id AND Antwoord.itemId = PollItems.id";
$result = mysql_query($dbname, $query);

// fouten afhandelen
if (!($result)) die("oops geen resultaat!<br>".mysql_error());


// doe hier wat voorbereidende echo's ( de titel o.a.)

//indien er al gestemd is, resultaten tonen
if($voted=='true') {
    while ($r = mysql_fetch_array($result))    {
        $width = $r["cnt"] / $total * 100;
        echo $r["tekst"]; 
        echo "<br><img width=$width><br>";
    } // while
} // if voted
else {
    echo "<FORM ACTION='' METHOD='POST' name='formpje' Style='display:inline'>";
    while ($r = mysql_fetch_array($result))    {
        $id = $r["id"];
        $vraag = $r["tekst"];
        echo "<INPUT TYPE='radio' NAME='antwoord' VALUE='$id' onclick='formpje.submit()'>'$vraag'<br>";
    } // while $r;
    echo "</form>"
} // else if voted
    
// doe hier wat echo's achteraf (het aantal stemmen o.a.)
?>

Localhost, sweet localhost


Verwijderd

Topicstarter
Hartstikke bedankt voor je informatie! ik ga het meteen proberen!!
Pagina: 1