Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

mysqli - se om data findes

7 views
Skip to first unread message

scootergrisen

unread,
Jan 14, 2013, 7:35:52 AM1/14/13
to
Jeg er ved at lave et rating system s� folk kan stemme p� de enkelte
sider p� min hjemmeside.

I den forbindelse skal jeg teste om siden er blevet rated f�r eller om
det er f�rste gang. Hvordan g�r jeg det ?

Hvis det er f�rste gang skal siden nemlig oprettes i databasen med sin
f�rste stemmer. Hvor hvis den findes i forvejen s� skal den opdateres.

Jeg har noget kode i denne stil som den ikke virker som jeg �nsker :

$result = mysqli_query($resource, "SELECT * FROM '$tablenavn' WHERE url
= '$url'");

if($result){

$indhold .= "side findes" . "<br>\r\n";


}else{

$indhold .= "side findes ikke" . "<br>\r\n";

}

scootergrisen

unread,
Jan 14, 2013, 8:36:57 AM1/14/13
to
Koden er indtil videre s�dan her : http://netkoder.dk/test/test0206.php

I skal v�re velkommen til at komme med forbedringer.

Leif Neland

unread,
Jan 14, 2013, 3:14:44 PM1/14/13
to
scootergrisen forklarede:
> Koden er indtil videre sᅵdan her : http://netkoder.dk/test/test0206.php
>
> I skal vᅵre velkommen til at komme med forbedringer.


Du skal naturligvis have et unikt index pᅵ url

Hvis du er ligeglad med at fᅵ at vide om siden er ratet fᅵr eller ej,
kan du bruge dette:

INSERT INTO $tablenavn (count, totalrating, url) VALUES (1, 5, '$url')
ON DUPLICATE KEY UPDATE count=count+1,totalrating=totalrating+5

Og du skal naturligvis bruge en "prepared statement"

$stmt = $mysqli->prepare("INSERT INTO $tablenavn (count, totalrating,
url) VALUES (?,?,?) ON DUPLICATE KEY UPDATE
count=count+?,totalrating=totalrating+?");

$stmt->bind_param('iisii', $count,$rating,$url,$count,$rating);
$stmt->execute();

(Jeg er faktisk ikke sikker pᅵ at man kan bind'e den samme variabel
flere gange i samme bind_param)

Jeg ville foretrᅵkke at bruge PDO i stedet for mysqli, der kan man
navngive variablene til queryet, og skal ikke skrive dem flere gange,
selvom de bruges flere gange.

$stmt=$dbh->prepare("INSERT INTO $tablenavn (count, totalrating, url)
VALUES (:count,:rating,:url) ON DUPLICATE KEY UPDATE
count=count+:count,totalrating=totalrating+:rating");

$stmt->execute(array('count' => $count,'rating' => $rating, 'url' =>
$url));

Det gᅵr queryet mere lᅵstbart at man kan bruge navne i stedet for at
skulle tᅵlle spᅵrgsmᅵlstegn.

Leif

--
Husk kᅵrelys bagpᅵ, hvis din bilfabrikant har taget den idiotiske
beslutning at undlade det.


Arne Vajhøj

unread,
Jan 14, 2013, 9:04:40 PM1/14/13
to
Og sp�rgsm�let k�rer s� ogs� her:

http://www.eksperten.dk/spm/975137

:-)

Arne

scootergrisen

unread,
Jan 14, 2013, 9:32:22 PM1/14/13
to
> Og sp�rgsm�let k�rer s� ogs� her:
>
> http://www.eksperten.dk/spm/975137
>
> :-)
>
> Arne
>

Og her : http://www.udvikleren.dk/forum/39438/rating-system/

Martin

unread,
Jan 15, 2013, 3:41:13 AM1/15/13
to
Jeg ville nu smide alle ratings op med insert

Table
- rating
- page

INSERT INTO (rating,page) VALUE (1-5, 'url')

S� kan du bruge

SELECT AVG(rating) WHERE url = $url

S� kan du ogs� slette de ratings som m�ske kommer fra en mist�nkelig,
eller fra dine egne test, uden at p�virke andres ratings.

scootergrisen

unread,
Jan 15, 2013, 12:57:21 PM1/15/13
to
> Jeg ville nu smide alle ratings op med insert
>
> Table
> - rating
> - page
>
> INSERT INTO (rating,page) VALUE (1-5, 'url')
>
> S� kan du bruge
>
> SELECT AVG(rating) WHERE url = $url
>
> S� kan du ogs� slette de ratings som m�ske kommer fra en mist�nkelig,
> eller fra dine egne test, uden at p�virke andres ratings.

Jeg forst�r ikke s�rlig meget af det fordi jeg er ny til mysqli og
objekt orienteret s� det er ikke lige s� let for mig.

Jeg har nu sat rating systemet p� hjemmesiden s� i kan pr�ve det. Her
for eksempel ude til h�jre : http://netkoder.dk/netkoder/kode_helloworld.php

Men det er langt fra f�rdigt.
0 new messages