[php/mysql]tabel word wel aangemaakt, maar niet gezien

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Ey,

Voor een poll heb ik een ip check, zodat er maar 1 keer gestemt kon worden. Nu bleek dat je met de vorige knop echter gemakkelijk weer kon stemmen, dus heb ik ipv een header, javascript gebruikt. Toch wilde ik dit verder onderzoeken, en heb ik een extra ip check gemaakt voordat hij de stem wegschrijft. Echter, hoewel de rij met het ip wel in de database staat, word deze niet gezien als je weer stemt! Dus als je stemt, je op vorige klikt, en nog een keer stemt. Zo kan je eindeloos stemmen, en hoewel het probleem met javascript is op te lossen, vroeg ik mij toch af hoe dat kan en hoe het op te lossen is...

[ Voor 3% gewijzigd door Roa op 14-07-2003 23:51 ]

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Dan doe je iets fout je code. Eerst checken, dan uitvoeren. Bij een F5 zal de check (controleren of de waarde IN de database staat) falen en zal hij niet nogmaals een update / insert / whatever doen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Inderdaad, maar als de pagina na stemmen niet veranderd/vernieuwt word, en je klikt op vorige, dan kan je weer opnieuw stemmen, omdat het postscript nog in de cashe zit ofzo...de code klopt wel, maar de pagina moet zeg maar vernieuwd worden bij vorige ofzo, denk ik...

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Dan klopt je code niet. :) Desnoods doe je een redirect na het stemmen, zo voorkom je ook al een hoop F5-problemen.

Als je doet:

code:
1
2
3
4
5
6
7
8
9
10
11
Dim RS as recordset = Query.Execute("Select IP From stemmen Where IP='" & m_lIp & "'")
If RS.Count = 0

    Query.Execute("Insert  into IP(ipadres) Values('" & m_lIp & "'")

Else

    ' U heeft al gestemd.


End if

Moet het probleem niet voorkomen. Na de refresh wordt die immers steeds opnieuw gecontroleerd. Als je een insert doet, zonder direct ervoor een selectquery met de laatste data, dan heb je een probleem.

[ Voor 57% gewijzigd door gorgi_19 op 15-07-2003 00:03 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
uhm..ik weet niet welke taal dat is..maar is dat php??? ;)

En ik doe een redirect na het stemmen, via header, maar dat werkt dus niet goed...

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
if(isset($vote)){

$choise = $_POST['choise'];
$poll_id = $_POST['poll_id'];

$query_votes = "SELECT * FROM poll_votes WHERE poll_id = '$poll->id' AND ip = '$ip'";
$result_votes = mysql_query($query_votes) or die (mysql_error());
$voted = mysql_num_rows($result_votes);

if($voted == 0){

$new = "INSERT INTO `poll_votes` (`ip`, `poll_id`) VALUES ('$ip', '$poll_id')";
$in = mysql_query($new) or die (mysql_error());

$update = "UPDATE poll_options SET votes = votes + 1 WHERE id='$choise'";
$in = mysql_query($update) or die (mysql_error());

$update = "UPDATE poll SET total_votes = total_votes + 1 WHERE id='$poll_id'";
$in = mysql_query($update) or die (mysql_error());

header('Location: index.php');

exit;

}else{
header('Location: index.php');

exit;

}
}


misschien komt het omdat de poll pagina in index.php geinclude is..??

[ Voor 12% gewijzigd door Roa op 15-07-2003 00:09 ]

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
*subtiel schopje*

Ik heb ook al geprobeerd om het form aan te roepen met een random string achter poll.php:
PHP:
1
echo "<form action=\"poll.php?sq=$random\">";


(even om het duidelijk te maken, ik weet dat er nog een method bij moet ;))

Dit werkt alleen natuurlijk niet, omdat je als je op vorige klikt gewoon datzelfde random getal/string hebt....

[ Voor 5% gewijzigd door Roa op 15-07-2003 12:22 ]

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Dus jij beweert dat de select geen resultaten teruggeeft en hij dus elke keer opnieuw de insert en updates uitvoert?
Of wil je gewoon niet dat je de poll-opties te zien krijgt? Maar daarvoor moet je niet bij het voten zijn, maar bij het tonen van de poll...

Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:41
Als je continue maar één poll hebt in die tabel, kun je overwegen om het IP-adresveld UNIQUE te maken, al moet ik wel zeggen dat ik het zelf een ranzige oplossing vind.

Ik zou gewoon een extra querie uitvoeren voor de insert.

Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Roa schreef op 15 juli 2003 @ 00:09:
PHP:
1
$query_votes = "SELECT * FROM poll_votes WHERE poll_id = '$poll->id' AND ip = '$ip'";
waarom daar $poll->id ipv. $poll_id?
PHP:
1
2
$new = "INSERT INTO `poll_votes` (`ip`, `poll_id`) VALUES ('$ip', '$poll_id')";
$in = mysql_query($new) or die (mysql_error());
Wat moeten die rare quotejes (```) daar?

Who is John Galt?


Acties:
  • 0 Henk 'm!

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 17:40
Die `` staan er zodat mysql ziet dat dit tabel namen of kolomnamen zijn.

LinkedIn - Collega worden?


Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Wat heeft dit eigenlijk met het aanmaken vane en tabel temaken? :?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

ddc schreef op 15 July 2003 @ 13:05:
Als je continue maar één poll hebt in die tabel, kun je overwegen om het IP-adresveld UNIQUE te maken, al moet ik wel zeggen dat ik het zelf een ranzige oplossing vind.

Ik zou gewoon een extra querie uitvoeren voor de insert.
Waarom is dat ranzig?

Als er niet maar 1 poll is, dan kan je de combinatie poll+ip uniek maken, wat helemaal netjes is.

Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024
Een poll bestaat uit 3 tabellen: één index, met het aantal keuze's, totaal aan stemmen, en de poll_id, daarnaast de keuze's, met een id, poll_id, aantal stemmen, en natuurlijk de keuze. Dan de ip's. Ieder ip word opgeslagen met de poll_id erbij, zodat gekeken kan worden op welke poll gestemd is.
waarom daar $poll->id ipv. $poll_id?
Omdat eerst met een qeury word vastgesteld welke poll hij moet hebben (poll_id), het resultaat word opgeslagen als object in $poll. (wrom ik daar geen array heb...sja...) Vandaar dus ;)
Als je continue maar één poll hebt in die tabel, kun je overwegen om het IP-adresveld UNIQUE te maken, al moet ik wel zeggen dat ik het zelf een ranzige oplossing vind.
Omdat alle polls te bekijken moeten zijn dmv een archief, is dit geen optie. Tenzij ik bij iedere nieuwe poll de ip tabel leeg...
Ik zou gewoon een extra querie uitvoeren voor de insert.
Dat doe ik ook, maar het probleem is dus hij hem dan niet ziet.......Ik bedenk me net waarom :S

ARGH, wat ongelooflijk stom :S
waarom daar $poll->id ipv. $poll_id?
Dat is idd fout, want ik check daar niet eerst welke poll :S:S:S

Oplossing gevonden :D
Als er niet maar 1 poll is, dan kan je de combinatie poll+ip uniek maken, wat helemaal netjes is.
Hoewel er een oplossing is zou ik toch graag willen weten hoe dit in zijn werk gaat..??
Bedankt all :D

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 22:41
ACM schreef op 15 juli 2003 @ 13:41:
Als er niet maar 1 poll is, dan kan je de combinatie poll+ip uniek maken, wat helemaal netjes is.
Kan MySQL dat dan :?

Acties:
  • 0 Henk 'm!

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 07-09 06:15

Vae Victis

Dark Lord of the Sith

ddc schreef op 15 July 2003 @ 16:02:
[...]

Kan MySQL dat dan :?
Ja ;)
SQL:
1
2
3
4
5
6
ALTER TABLE `tablenaam` 
ADD UNIQUE 
 (
       `eerste`  , 
       `tweede`
 )

In phpmyadmin is het voor zover ik weet niet direct te doen, alleen met een sql query.
Maar geeft het daarna wel goed weer.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Vae Victis schreef op 15 July 2003 @ 16:17:
SQL:
1
2
3
4
5
6
ALTER TABLE `tablenaam` 
ADD UNIQUE 
 (
       `eerste`  , 
       `tweede`
 )

In phpmyadmin is het voor zover ik weet niet direct te doen, alleen met een sql query.
Maar geeft het daarna wel goed weer.
Ieuw, die enorm ranzige alter-table-voor-een-index syntax :/

Waarom mysql indices niet als aparte entities ziet weet ik niet, maar het is erg onhandig af en toe.
De meer sql-conforme versie is trouwens:
CREATE UNIQUE INDEX indexnaam ON tabelnaam (eerste, tweede);

En, ddc, uiteraard kan MySQL dat als ik de tip ertoe geef hier ;)
Pagina: 1