Query voorkomt in databse

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Kumkwat Trender

Kumkwat Trender

30/01/2008 19:34:00
Quote Anchor link
Hoi,
heb een hele kleine vraag (alweer) :P,

nou.. ben ik niet zow goed met mysql gedoe.. :(

ik heb nu een plan die ik uit wil werken maar dat ik zeg maar niet weet hoe ik het aan moet pakken, omdat ik niet echt precies weet hoe mysql werkt.

(het gaat om mijn ster scriptje, stelt een poll voor)


nu heb ik dit wel

sql = "
INSERT INTO fictieve_tabel
(
id,
cijfer,
ip
)
VALUES
(
'".$nummer."',
'".$cijfer."',
'".$_SERVER['REMOTE_ADDR']."'
)
";

mijn probleem zit vormalig niet in hoe ik het in mijn database moet schrijven of lezen maar hoe ik het alles moet controleren

nu kun je bij mijn poll script allemaal id's maken elke id niet meer dan 1 dezelfde ip adres hebben. spreekt voor zich.
alleen weet ik niet hoe ik dit moet doen?

vet vaag, moet ik een for maken en dat ie zeg maar alles controlleert?


Edit: ik zit het trouwens te leren met blanche's site ^^ vet handig :P
http://phphulp.jorendewit.nl/view/41/3/
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
PHP hulp

PHP hulp

28/03/2024 22:29:53
 
Frank -

Frank -

30/01/2008 19:39:00
Quote Anchor link
Tja, inderdaad wel redelijk vet vaag. Veel meer dan een verwijzing naar een tutorial kan ik je niet geven, het is mij te vaag.

Waar moeten $nummer en $cijfer vandaan komen?
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 19:45:00
Quote Anchor link
nummer is de id van de poll ..

en cijfer is de aantal procenten die je geeft.


gaat trouwens om dit ding

http://phphulp123.freehostia.com/ster.html



uit de bron kun je dit opmaken
<div id="sterUser[/b]" class="user">50%</div>

dus in dit geval is id=0
en cijfer = 50

nu wil ik dit dat mensen kunnen stemmen maar niet meerdere malen per id...
 
Joren de Wit

Joren de Wit

30/01/2008 19:47:00
Quote Anchor link
Kwestie van een UNIQUE constraint aanbrengen op de combinatie van kolommen waarin je het ip opslaat en waar je het id van de poll opslaat?

ps. Dan kan elk ip adres dus maar 1x op een bepaalde poll stemmen. Maar besef dat meerdere gebruikers van hetzelfde ip-adres gebruik kunnen maken...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 19:51:00
Quote Anchor link
aha, ik heb er veel van begrepen :P

wil je me miss een handje helpe? ik vat nix van mysql

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
if ($_GET['mooiester'] == "ster"){ $nummer = $_GET['nummer']; $cijfer = $_GET['cijfer'];
    if (ctype_digit($nummer) And ctype_digit($cijfer)) {
            if($cijfer >= "0" And $cijfer <= "100") {
                $sql = "
                    INSERT INTO fictieve_tabel
                    (
                        id,
                        cijfer,
                        ip
                    )
                    VALUES
                    (
                        '".$nummer."',
                        '".$cijfer."',
                        '".$_SERVER['REMOTE_ADDR']."'
                    )
                    ";
                
                if(!$res = mysql_query($sql)) {
                    echo "Error";
                } else {
                    echo "ok";
                }
...
...


ik heb tot nu toe dit, waar moet ik unique constraint of zo toevoegen dan?
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 
Joren de Wit

Joren de Wit

30/01/2008 19:54:00
Quote Anchor link
Staat allemaal in diezelfde handleiding uitgelegd: http://phphulp.jorendewit.nl/view/41/13/
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 20:05:00
Quote Anchor link
Quote:
ps. Dan kan elk ip adres dus maar 1x op een bepaalde poll stemmen. Maar besef dat meerdere gebruikers van hetzelfde ip-adres gebruik kunnen maken...


Dan hebben ze pech :P, hoe moet ik het dan aanpakken?

Quote:
Staat allemaal in diezelfde handleiding uitgelegd: http://phphulp.jorendewit.nl/view/41/13/


Dat is hoofdstuk 13 en ik ging net over naar hoofdstuk 3 :).


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
ALTER TABLE
    werknemers
ADD
    FOREIGN KEY(functie_id)
        REFERENCES functies (id)
ON DELETE RESTRICT
ON UPDATE CASCADE


en van dat code snap ik er ook helemaaal nix van... mysql lijkt wel een eigen wereldje te hebbe :S... en ik d8 dat mysql niet eens zow moeilijk was.
 
Jesper Diovo

Jesper Diovo

30/01/2008 20:28:00
Quote Anchor link
*SQL. MySQL is een soort database. SQL is de taal waarmee je gegevens naar die MySQL database schrijft.

Als je er zo'n moeite mee hebt, kun je inderdaad beter even de gehele handleiding doorlezen. Anders moet je misschien wat minder moeilijk beginnen? :)
 
Joren de Wit

Joren de Wit

30/01/2008 20:32:00
Quote Anchor link
Zoals Djemo al zegt, SQL is een taal op zich. Het staat verder dan ook helemaal los van PHP...
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 20:35:00
Quote Anchor link
weet je wat, ik pak mijn probleem moeilijker aan...

ik check eerst of de ip adres in mijn database voorkomt

als ie voorkomt check ik de id.. als de id gelijk is voegt ie het niet toe

en dat moet wel lukken denk ik..

makkelijker dan cascade of zow.. weet nog steeds niet wat het is :S
 
Frank -

Frank -

30/01/2008 20:37:00
Quote Anchor link
SQL is an art!

En dat heeft niks met PHP te maken.

Toch is het net engels:
ALTER TABLE : aanpassen van de tabel
ADD : toevoegen
FOREIGN KEY: vreemde sleutel
REFERENCES: referenties
ON DELETE: bij verwijderen
ON UPDATE: bij bijwerken
RESTRICT: beperken
CASCADE: waterval effect (kan het niet beter uitleggen)
 
Frank -

Frank -

30/01/2008 20:46:00
Quote Anchor link
Peter schreef op 30.01.2008 20:35:
weet je wat, ik pak mijn probleem moeilijker aan...

ik check eerst of de ip adres in mijn database voorkomt

als ie voorkomt check ik de id.. als de id gelijk is voegt ie het niet toe

en dat moet wel lukken denk ik..

makkelijker dan cascade of zow.. weet nog steeds niet wat het is :S
Waarom al die controles? Een UNIQUE-constraint op de combinatie van ip-adres en id is meer dan genoeg. De query zal keurig mislukken wanneer iemand nogmaals een record met hetzelfde id en hetzelfde ip-adres wil toevoegen. Dat is de enige veilige manier, dit is waterdicht.

Wat CASCADE hier mee te maken heeft, is mij volkomen onduidelijk. Ik kan geen enkel verband leggen, slaat als een tang op een varken.
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 20:51:00
Quote Anchor link
Blanche kwam met cascade, nu vat ik er helemaal nix meer van

want nu wordt het echt onduidelijk, en ik weet ook niet meer naar wie ik moet luisteren :)

kun je misschien een beetje code toetse?
ik probeer daarna wel zelf te begrijpen hoe het in elkaar zit..
 
Frank -

Frank -

30/01/2008 20:52:00
Quote Anchor link
Moet er nu even vandoor, zal straks wel even wat SQL uitwerken. Mocht je nog geen oplossing hebben...
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 20:54:00
Quote Anchor link
Yes, leve pgFrank :)

(sql != mysql... hmm)
 
Joren de Wit

Joren de Wit

30/01/2008 21:04:00
Quote Anchor link
Ho eens even, ik heb het nooit over CASCADE gehad. Ik had het over UNIQUE constraints en gaf een daarbij behorende link uit mijn handleiding. Dat jij vervolgens niet de juiste informatie van die pagina weet te halen, daar kan ik weinig aan doen.

Maar goed, de SQL om een index op meerdere kolommen aan te brengen ziet er zo uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE tabelnaam ADD UNIQUE (id, ip)

En vervolgens zou je het invoegen dan op zo'n manier aan kunnen pakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
$sQuery
= "
    INSERT INTO tabel
    (
        id,
        ip
    )
    VALUES
    (
        "
.$id.",
        '"
.$ip."
    )
"
;

if(!$rResult = mysql_query($sQuery))
{

    if(mysql_errno() == 1062)
    {

        echo 'Je hebt al een keer gestemmd op deze poll';
    }

    else
    {
        trigger_error(mysql_error().'<br />In query: '.$sQuery);
    }
}

else
{
    echo 'Je hebt gestemd';
}

?>
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 21:13:00
Quote Anchor link
ow nu vat ik het sql moet in je phpmyadmin -_-'

owkee ik vat het nu wel een beetje meer

@blanche, alleen hoe weet je dat het 1062 is?

if(mysql_errno() == 1062)
 
Frank -

Frank -

30/01/2008 21:14:00
Quote Anchor link
Zie wederom de handleiding, daar staat foutnummer 1062 ook uitgelegd.
 
Joren de Wit

Joren de Wit

30/01/2008 21:15:00
Quote Anchor link
Dat is het foutnummer dat MySQL terug geeft als er een unique constraint violation opgetreden is. Dus als er geprobeerd is om dubbele waarden in te voeren...
 
Frank -

Frank -

30/01/2008 21:17:00
Quote Anchor link
RTFM ;)

Helaas geeft MySQL niet aan wélke UNIQUE-constraint is overtreden. Mocht je er meerdere in je tabel hebben staan, kun je daar alleen naar raden. In PostgreSQL krijg je ook de naam van de constraint retour, mits je bij het aanmaken van de constraint een naam hebt opgegeven. Da's logisch.
 
Kumkwat Trender

Kumkwat Trender

30/01/2008 21:27:00
Quote Anchor link
owkee nu heb ik een tabel aangemaakt namelijk: "ster"

id = text
cijfer = text
en
ip = text

ik heb text gekozen omdat ik bij de andere een cijfer moest invullen of zow, een goed argument heb ik dus ^^.

nu weet ik echt niet waar ik dit moet toevoegen: ALTER TABLE ster ADD UNIQUE (id, cijfer, ip)

moet ik het in sql doen?

als ik dat doe krijg ik een error

SQL-query:

ALTER TABLE ster ADD UNIQUE (
id,
cijfer,
ip
)

MySQL retourneerde: Documentatie
#1170 - BLOB/TEXT column 'id' used in key specification without a key length

hmm..?

edit: ik hoop trouwens niet dat ik jullie erger...
Gewijzigd op 01/01/1970 01:00:00 door Kumkwat Trender
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.