Gå til innhold

Filmønsker via IMDB med stemming


Anbefalte innlegg

Jeg arangerer filmkvelder på skolen, og da folk aldri klarer å bli enige om hvilken film som skal velges, så tenkte jeg å få ordnet en side hvor en liste over tilgjengelige filmer ligger og hvor folk kan stemmer over de filmene de har lyst til å se.

 

Derfor er jeg ute etter å finne et eller flere script som kan kombineres for å oppnå følgende:

 

Liste over filmer som er tilgjengelig, hvor info fra IMDB kommer opp. Man skal så kunne stemme på alle de filmene man vil se, men kun en gang (ip logging eller noe?)

 

Listen skal dermed kunne vise hvilke filmer som har flest stemmer, slik at man før hver filmkveld kan se hvilken film som skal bli vist.

 

Siden trenger en adminside med passord, slik at filmer kan bli slettet.

 

Jeg har funnet noen script som henter info fra IMDB, men disse mangler stemmefunkjson.

Jeg har også funnet ut at et slikt requestscript som er på mange torrentsider vil kunne være veldig bra. Da kan brukerene komme med forslag til filmer som de vil se, men som ikke er i listen.

 

Er det noen som har noe tips, eller har tid og lyst til å hjelpe meg med dette?

Lenke til kommentar
  • 2 uker senere...
Videoannonse
Annonse

Kanskje litt sent, men jeg svarer alikevell.

Dette er et ganske stort prosjekt som jeg ikke har tid til å hjelpe noe voldsomt med, men jeg kan gi deg en "guide" til hvordan du kan gjøre det, om du virkelig er desperat.

 

Du trenger en database over brukere/ip og filmer.

 

Brukertabellen bør inneholde id, ip, og id eller navn på filmen som har blitt stemt på.

 

Film tabellen bør inneholde, id, navn, stemmer, dato? og lignende, du kan også ha et felt med beskrivelse, dette krever dog at du lager et script som henter data fra imdb og legger det inn i databasen når du submitter en film, noe som er å anbefale slik at du ikke får lang loading på siden din om du henter info om filmen i "realtime".

 

Deretter trenger du en side å ha alt dette på, hvor du har en loop(jeg foretrekker while, du kan bruke hva du vil) som henter filmene fra databasen:

(dette er bare stikkord som du kan søke videre på om du trenger det.)

$query = mysql_query("SELECT `id`,`navn`,`beskrivelse`,`dato` FROM `filmtabell` ORDER BY `stemmer`");

while(mysql_fetch_assoc($query)) {};

 

Du må også sjekke om brukeren har stemt, dette gjør du ved å f.eks sjekke i brukertabellen(WHERE `ip` = 'ipen til brukeren' AND `id`='id på filmen'). Om den ikke finnes, mysql_num_rows=="0", så legger du ved en link "stem" som er en url med en GET variabel; url.com/index.php?stemme=id på filmen.

 

På stemme siden så sjekker du get variabelen(og sikkrer mot SQL-injections med f.eks htmlspecialchars()) , og ipen til brukeren, hvorpå du inputter dette i databasen. (INSERT INTO `brukere` (`ip,`filmid`) VALUES ( 'ip' , 'id til filmen fra url').

 

For å slette filmer, er det bare til å lage en side med input box, og en if($input == "passordet ditt"), så kan du hente alle filmene fra databasen, og når du velger en film, så bruker du iden til filmen og sjekker i "bruker" tabellen for alle rader med `id` = 'iden til filmen du valgte', og sletter disse. Deretter kan du slette filmen fra film tabellen. Da vil alle stemmene forsvinne, og filmen i seg selv.

 

For å legge til film bruker du samme metode som du brukte for å legge til stemmer.

 

Dette er veldig vag informasjon, men det virker som du er ny innen PHP, og som du ser er dette et ganske stort prosjekt om du skal lære alt fra grunnen av, så du får tenke litt på det.

Om du fortsetter så si ifra, jeg er litt opptatt denne uken, men det er mange andre som kan hjelpe deg med dette.

Lenke til kommentar

Tusen takk for svar.

 

Du har helt rett i at jeg er helt ny når det kommer til php.. Jeg klarer ikke skrive egne koder, men jeg klarer til en viss grad å redigere og skjønne litt av ferdige koder.

 

Så jeg skjønner litt av det du skriver, men å skulle sette det sammen til en fungerende kode tror jeg blir vanskelig. Men et sted må jeg jo starte, så skal jo prøve.

 

Men jeg kommer til å skrive litt her om jeg enten lurer på noe, eller står helt fast.

 

Nok en gang, takk for svar.. :)

Lenke til kommentar

Nå har jeg sittet i hele dag, og kommet ganske langt synes jeg selv.

 

Men så kom jeg på et stor problem.

Mange vil jo bruke skolens nett til å stemme. Dermed vil jo kun førstemann som stemmer på en film få lov til å stemme da alle jo bruker samme ip.

 

Noen ide om hvordan jeg skal løse dette?

Vil helst unngå å måtte ha brukere, men om dette er eneste løsningen, så må jeg jo det..

Lenke til kommentar

I dag har jeg da fått laget disse kodene:

(tips til endringer og forbedringer mottas gjerne)

 

IP.php som sjekker om IP adressen har stemt på en film tidligere.

<?php

// database informasjon
$user="root";
$host="localhost";
$password="";
$database="php4dvd";

$connection = mysql_connect($host,$user,$password) or die ("Couldn't connect to server.");
$db = mysql_select_db($database,$connection) or die ("Couldn't select database.");


// Henter ipadressen
$ip = $_SERVER['REMOTE_ADDR'];

// har jeg tenkt å legge til kode for å automatisk vise ID for hver enkelt film i listen,
// men jeg veit ikke hvordan jeg skal gjøre det enda
$filmid = 46;

// Sjekker om ip og film er i databasen brukere
$check = mysql_query("SELECT * FROM php4dvd.ipsjekk WHERE IP='$ip' AND filmid LIKE '$filmid'");

$unique = mysql_num_rows($check);


// Hvis ip og filmid finnes
if ($unique == 0)
 echo "<a href='insert.php?filmid=$filmid'>STEM</a>";
else
 echo "Du har allerede stemt";


?>

 

 

og

 

insert.php som legger inn ip og filmid i bruker databasen

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db("php4dvd", $con);

// Henter ipadressen
$ip = $_SERVER['REMOTE_ADDR'];

// Legger til i databasen

$sql="INSERT INTO ipsjekk (ip, filmid)
VALUES
('$ip','$_GET[filmid]')";

if (!mysql_query($sql,$con))
 {
 die('Error: ' . mysql_error());
 }

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();

mysql_close($con)

?>

Lenke til kommentar

Her er koden som viser hovedsiden og listen over filmer:

 

{if $movies|@count > 0}
{$movies|@count} movies found.<br><br>
{/if}
<table width="95%">
{section name=m loop=$movies}
<tr>
	<td width="95%">
		<a href="./?go=movie&id={$movies[m]->id}">
		<div style="float: right">{$movies[m]->year}</div>
		{$movies[m]->name}
		</a>
	</td>
	<td width="50" nowrap align="right">

Her vil jeg ha "Stem" linken
	</td>
</tr>
{sectionelse}
<tr>
	<td width="95%">
		No movies where found.
	</td>
</tr>
{/section}
</table>

 

Hvordan skal jeg få frem "Stem" linken her?

Lenke til kommentar

Først koden din:

Den ser helt greit ut, men du glemmer at man ikke kan stole på brukerene av siden. I insert.php bør du legge inn en dobbel-sjekk, altså samme sjekk du kjørte for å vise linken, slik at brukere ikke bare kan hente filmid-en, og skrive insert.php?filmid=46 og da stemme flere ganger. Du bør også sikkre $_GET['filmid'] ettersom folk kan missbruke dette og legge til farlig kode i urlen. ex. insert.php?filmid=DROP TABLE(den funker ikke, men du forstår poenget). Jeg er ikke i noen posisjon til å si hvilken sikkring som er best, men for deg vil det funke fint å bare sjekke om det er max 5 tegn(alt etter hvor mange filmer du ska ha), og at alle tegnene er tall.

 

For å svare på det andre spørsmålet ditt, du kan bruke cookies. Forsåvidt, kan du skaffe skolen sin IP og først sjekke om IP-en tilhører skolen, og isåfall bruke cookies til å definere om det har blitt avgitt stemme, hvis ikke kan du bruke vanlig IP deteksjon.

 

 

EDIT: dette ble skrevet før din siste post.

 

EDIT: siste post;

 

Vel, det virker som du har alle filmidene i en array? $movies? isåfall må du ta en sjekk mot databasen der hvor du vil ha stem feltet, og sjekke IP mot $movies[m]->id, ettersom jeg forstår det. Det skal dog nevnes at dette er et oppsett jeg aldri har sett maken til, men min logiske oppfattning tilsier at hvis den koden du bruker der funker, bør det funke med en sjekk mot $movis[m]->id. Jeg kan dessverre ikke svare på hvordan duskal sette opp koden til dette, ettersom ditt oppsett er nytt for meg.

Endret av Ozwald
Lenke til kommentar
Først koden din:

Den ser helt greit ut, men du glemmer at man ikke kan stole på brukerene av siden. I insert.php bør du legge inn en dobbel-sjekk, altså samme sjekk du kjørte for å vise linken, slik at brukere ikke bare kan hente filmid-en, og skrive insert.php?filmid=46 og da stemme flere ganger. Du bør også sikkre $_GET['filmid'] ettersom folk kan missbruke dette og legge til farlig kode i urlen. ex. insert.php?filmid=DROP TABLE(den funker ikke, men du forstår poenget). Jeg er ikke i noen posisjon til å si hvilken sikkring som er best, men for deg vil det funke fint å bare sjekke om det er max 5 tegn(alt etter hvor mange filmer du ska ha), og at alle tegnene er tall.

 

For å svare på det andre spørsmålet ditt, du kan bruke cookies. Forsåvidt, kan du skaffe skolen sin IP og først sjekke om IP-en tilhører skolen, og isåfall bruke cookies til å definere om det har blitt avgitt stemme, hvis ikke kan du bruke vanlig IP deteksjon.

 

 

EDIT: dette ble skrevet før din siste post.

 

EDIT: siste post;

 

Vel, det virker som du har alle filmidene i en array? $movies? isåfall må du ta en sjekk mot databasen der hvor du vil ha stem feltet, og sjekke IP mot $movies[m]->id, ettersom jeg forstår det. Det skal dog nevnes at dette er et oppsett jeg aldri har sett maken til, men min logiske oppfattning tilsier at hvis den koden du bruker der funker, bør det funke med en sjekk mot $movis[m]->id. Jeg kan dessverre ikke svare på hvordan duskal sette opp koden til dette, ettersom ditt oppsett er nytt for meg.

 

Takk for svar nok en gang.

 

For å ta det siste først. Dette er er ferdig script som heter php4dvd. Så hva slags kode eller hva det nå enn er aner jeg ikke. Det er veldig lett å sette opp, og fungerer ypperlig, bortsett fra at det mangler den stemminga og bruker/admin.

Så jeg aner virkelig ikke hvordan jeg skal få det til, selv etter at jeg faktisk har fått til stemminga i eget script.

 

Når det kommer til det første du skreiv, så ser jeg problemet.

Det å låse til 5 tall skal jeg nok få til, men det med dobbelt sjekken skjønte jeg ikke helt. Hvordan skal jeg gjøre det?

 

EDIT: Jeg tror jeg skjønte det siste nå.. :p

Endret av TommyFM
Lenke til kommentar

om jeg forstod deg riktig, så var det noe slikt du mente (selv om det ikke er rett)

 

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db("php4dvd", $con);

// Henter ipadressen
$ip = $_SERVER['REMOTE_ADDR'];


// har jeg tenkt å legge til kode for å automatisk vise ID for hver enkelt film i listen,
// men jeg veit ikke hvordan jeg skal gjøre det enda
$filmid = 46;

// Sjekker om ip og film er i databasen brukere
$check = mysql_query("SELECT * FROM php4dvd.ipsjekk WHERE IP='$ip' AND filmid LIKE '$filmid'");

$unique = mysql_num_rows($check);


// Hvis ip og filmid finnes
if ($unique == 0)

$sql="INSERT INTO ipsjekk (ip, filmid)
VALUES
('$ip','$_GET[filmid]')";

if (!mysql_query($sql,$con))
 {
 die('Error: ' . mysql_error());
 }

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();

mysql_close($con)

?>

 

men her får jeg: Error, query is empty.

 

Hva er feil?

Lenke til kommentar

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
 {
 die('Could not connect: ' . mysql_error());
 }

mysql_select_db("php4dvd", $con);

// Henter ipadressen
$ip = $_SERVER['REMOTE_ADDR'];


// har jeg tenkt å legge til kode for å automatisk vise ID for hver enkelt film i listen,
// men jeg veit ikke hvordan jeg skal gjøre det enda
$filmid = 46;

// Sjekker om ip og film er i databasen brukere
$check = mysql_query("SELECT * FROM php4dvd.ipsjekk WHERE IP='$ip' AND filmid LIKE '$filmid'");


//////Her har jeg skiftet ut bare for å korte ned koden litt
//$unique = mysql_num_rows($check);
// Hvis ip og filmid finnes
//if ($unique == 0)
//////////

if(mysql_num_rows($check) == "0") {

$sql="INSERT INTO ipsjekk (ip, filmid)
VALUES
('$ip','$_GET[filmid]')";

if (!mysql_query($sql,$con))
 {
 die('Error: ' . mysql_error());
 }

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();

mysql_close($con);

////////her har jeg lagt til hva som skjer om scriptet finner en eksisterende stemme i databasen.
}else{

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();
}


?>

 

Det var noe slikt jeg mente ja, nå har jeg endret litt på koden din, ser ut til at du mangler en "else" og litt snacks. Kanikke garantere for at dette fungerer ettersom det ikke er testet.

Endret av Ozwald
Lenke til kommentar

Men sjekken fungerer ikke..

Kan fortsatt stemme flere ganger ved å skrive det i url..

 

Finner heller ikke ut hvordan jeg sikrer $_GET variablen med 5 siffer.

 

Men nå er jeg så trøtt at jeg ikke klarer å tenke klart.. :p

 

Om du har noen forslag eller kan si meg hvordan jeg skal gjøre det, så hadde jeg blitt glad. Bare å skrive her, så leser jeg det i morgen..

 

Takk for all hjelp så langt.

Lenke til kommentar

Virker sjekken i listen?

 

Du bruker strlen() for å sjekke lengden:

if(strlen($filmid) <= 5)) {
echo "Under eller lik 5! ";
}else{
echo "Over 5!";
}

 

men ikke glem å sjekke for tall; is_numeric().

Endret av Ozwald
Lenke til kommentar
Virker sjekken i listen?

 

Du bruker strlen() for å sjekke lengden:

if(strlen($filmid) <= 5)) {
echo "Under eller lik 5! ";
}else{
echo "Over 5!";
}

 

men ikke glem å sjekke for tall; is_numeric().

 

Jeg får ikke til å "integrere" den koden jeg har i listen..

Og sjekken fungerer ikke i insert.php.

 

Er også litt usikker på hvor jeg skal skrive den siste koden du kom med..

Lenke til kommentar

Kan ta i et tak her,

 

///Denne sjekker om $filmid er større en fem, eller inneolder bokstaver. Hvis den gjør det stoppes scriptet med en feilmelding.
if (strlen($filmid)  > "5" || !is_numeric($filmid))  {
 die('Feil med filmid');
 }

Denne legger du da etter at du har definert at $filmid = $_GET['filmid'].

 

Sjekken din er jeg litt usikker på, ettersom jeg ikke ser noen feil med den. Har du sjekket at feltene er riktige?

Lenke til kommentar

Sånn, nå ser det ut som at begge tingene funker.

Ikke helt sikker på hvorfor sjekken ikke fungerte tidligere, men den ser ut til å fungere nå.

 

Her er den nye koden:

 

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("php4dvd", $con);

// Henter ipadressen
$ip = $_SERVER['REMOTE_ADDR'];


// har jeg tenkt å legge til kode for å automatisk vise ID for hver enkelt film i listen,
// men jeg veit ikke hvordan jeg skal gjøre det enda
$filmid = $_GET['filmid'];

// Sjekker om ip og film er i databasen brukere
$check = mysql_query("SELECT * FROM php4dvd.ipsjekk WHERE IP='$ip' AND filmid LIKE '$filmid'");

/// Denne sjekker om $filmid er større en fem, eller inneolder bokstaver. Hvis den gjør det stoppes scriptet med en feilmelding.
if (strlen($filmid)  > "5" || !is_numeric($filmid))
{
 die('Feil med filmid');
 }

//////Her har jeg skiftet ut bare for å korte ned koden litt
//$unique = mysql_num_rows($check);
// Hvis ip og filmid finnes
//if ($unique == 0)
//////////

if(mysql_num_rows($check) == "0") {

$sql="INSERT INTO ipsjekk (ip, filmid)
VALUES
('$ip','$_GET[filmid]')";

if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();

mysql_close($con);

////////her har jeg lagt til hva som skjer om scriptet finner en eksisterende stemme i databasen.
}else{

// Redirecter bruker til siden den kom fra
ob_start();
header("Location: ip.php");
ob_flush();
}


?>

 

Tips til endringer?

 

Men tror det å skulle sy sammen det scriptet jeg har laget nå med det IMDB scriptet jeg har fra før av kommer til å bli vanskelig for meg..

Driver derfor å ser etter andre IMDB script jeg kan bruke.

Sammtidig driver jeg å ser etter login script som er enkle å "installere" samt å bruke for meg som ikke har peiling.

 

Har du noen tips til noen ferdige script? Er jo så mange der ute, men finner liksom ikke noen som er enkle. Husk, jeg er helt fersk med php.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...