Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 913
Heisann. Jeg lurte på om det hadde vært mulig å fått til noe av det jeg skriver nedenfor:

Et skrivefelt der man kan skrive hva som helst. Etter at man har trykket "Send" lagres det man har skrevet i en .html fil, som også opplyser IP og dato. Navnene som blir skrevet vil jeg helst ha sortert i alfabetisk rekkefølge.

Jeg søker også etter noe som kun tillater en lagring per IP.

Hadde dette vært mulig?
Trigonoceps occipita
vidarlo's Avatar
Donor
Trivielt å skrive i php. Det enklaste er om du har tilgang til database, siden det å sjekke IP typisk er slikt som er uendelig mykje lettere med database enn flatfil.

Du kan jo t.d ta utgangspunkt i ei tilfeldig gjestebok og deretter modifisere det til ditt behov.
Trådstarter
2 0
Greit, skal prøve det. Takk for svar så langt
Sist endret av Zimp; 7. september 2007 kl. 18:36.
Sikkerhetsklarert
Kan du utdype litt hvorfor det er enklere å lagre dette til f.eks en Mysql base enn en flatfil?
Når du først har de data du vil lagre, så er det vel faktisk motsatt, slik at det er lettere å skrive til ei fil enn til en base?
Sitat av Pjukern
Kan du utdype litt hvorfor det er enklere å lagre dette til f.eks en Mysql base enn en flatfil?
Når du først har de data du vil lagre, så er det vel faktisk motsatt, slik at det er lettere å skrive til ei fil enn til en base?
Vis hele sitatet...
Skal du skrive til en fil, og samtidig sjekke om en ip er lagt inn fra før, må du traversere hele filen og ha lagt inn tokens hvor du kutter mellom oppføringene. I en database kan du bare gjøre en spørring etter ip'en og se om du får tilbake et resultatsett eller ikke, og så f.eks. oppdatere datoen om ip'en ligger der fra før.
Limited edition
Moff's Avatar
Jeg vil på det aller sterkeste anbefale at du gjør dette ved å bruke PHP og en MySQL-database. For å forklare disse begrepene: PHP er et språk som kan utføre en rekke nyttige funksjoner. Lagre variabler, utføre regnestykker, lage filer (slik du vil), slette filer, hente informasjon om brukeren (slik du vil) og mye mer. PHP er et veldig kult språk som du bør sette deg inn i. På www.tizag.com har du mange flotte tutorials som er lette å følge. En MySQL-database er en plass hvor du kan lagre tekst (med tekst mener jeg altså verdier som en bokstavrekke (brukernavn, passord og sånt), tall, linker... alt mulig. Hvis du vil forstå hvordan den virker så kan du se på et regneark i Excel. I Excel har du en fil som inneholder 3 regneark (standard når du åpner programmet). Hvert regneark inneholder massevis av celler (A1, A2, A3, B1, B2 etc...). I en MySQL-database har du på samme måte en database (dette vil være filen i Excel) som inneholder tabeller (regnearkene). Hver tabell inneholder "recordsets". Et recordset vil i Excel være en rekke i regnearket (A1, B1, C1, D1 etc). Recordsetet inneholder da også celler så klart. Når du "sender en spørring til databasen" så sender du en kommando som gjør ulike ting med innholdet i databasen. Hvis du sender denne kommandoen:

Kode

$sql = mysql_query ( "select * from tabell order by tall desc" ) or die ( mysql_error() );
Så ber du databasen overføre alle data i tabellen "tabell" og lagre dem i variabelen "$sql". Recordsetene som blir lagret i "$sql" vil stå i synkende rekkefølge (desc ordner dette) etter som hvilken verdi cellen "tall" har i hvert recordset. Altså om recordset 1 har verdien 12 i cellen som heter "tall" vil den havne sist i verdien "$sql" hvis det de andre recordsetene har lavere verdier i samme felt.

Ganske opplagte saker, men jeg poster det likevel.
Du kan lese mer om kommandoer og syntax (formuleringer når du skriver kode) på www.tizag.com. Velg PHP og MySQL-tutorialene.

En liten NB:
Hvis du gjennomfører dette slik jeg hinter om så bør du merke deg avsnittet på tizag.com som omhandler SQL-injections. Det går ut på at folk skriver inn innhold i tekstfeltet ditt som gjør at databasen for eksempel sletter seg selv. Det er veldig skummelt. Kommandoen du bør legge merke til er "mysql_real_escape_string".
Sist endret av Moff; 7. september 2007 kl. 20:20.
Sikkerhetsklarert
Sitat av Moff
Jeg vil på det aller sterkeste anbefale at du gjør dette ved å bruke PHP og en MySQL-database. For å forklare disse begrepene: PHP er et språk som kan utføre en rekke nyttige funksjoner. Lagre variabler, utføre regnestykker, lage filer (slik du vil), slette filer, hente informasjon om brukeren (slik du vil) og mye mer. PHP er et veldig kult språk som du bør sette deg inn i. På www.tizag.com har du mange flotte tutorials som er lette å følge. En MySQL-database er en plass hvor du kan lagre tekst (med tekst mener jeg altså verdier som en bokstavrekke (brukernavn, passord og sånt), tall, linker... alt mulig. Hvis du vil forstå hvordan den virker så kan du se på et regneark i Excel. I Excel har du en fil som inneholder 3 regneark (standard når du åpner programmet). Hvert regneark inneholder massevis av celler (A1, A2, A3, B1, B2 etc...). I en MySQL-database har du på samme måte en database (dette vil være filen i Excel) som inneholder tabeller (regnearkene). Hver tabell inneholder "recordsets". Et recordset vil i Excel være en rekke i regnearket (A1, B1, C1, D1 etc). Recordsetet inneholder da også celler så klart. Når du "sender en spørring til databasen" så sender du en kommando som gjør ulike ting med innholdet i databasen. Hvis du sender denne kommandoen:

Kode

$sql = mysql_query ( "select * from tabell order by tall desc" ) or die ( mysql_error() );
Så ber du databasen overføre alle data i tabellen "tabell" og lagre dem i variabelen "$sql". Recordsetene som blir lagret i "$sql" vil stå i synkende rekkefølge (desc ordner dette) etter som hvilken verdi cellen "tall" har i hvert recordset. Altså om recordset 1 har verdien 12 i cellen som heter "tall" vil den havne sist i verdien "$sql" hvis det de andre recordsetene har lavere verdier i samme felt.

Ganske opplagte saker, men jeg poster det likevel.
Du kan lese mer om kommandoer og syntax (formuleringer når du skriver kode) på www.tizag.com. Velg PHP og MySQL-tutorialene.

En liten NB:
Hvis du gjennomfører dette slik jeg hinter om så bør du merke deg avsnittet på tizag.com som omhandler SQL-injections. Det går ut på at folk skriver inn innhold i tekstfeltet ditt som gjør at databasen for eksempel sletter seg selv. Det er veldig skummelt. Kommandoen du bør legge merke til er "mysql_real_escape_string".
Vis hele sitatet...
Dagens!! skjønte ikke helt hvorfor du måtte ha med "tall" i select kommandoen din.. Men så er jeg noob i mysql.. Holder det ikke å kun be om alt innhold i "tabell" order by desc?
Sitat av Pjukern
Dagens!! skjønte ikke helt hvorfor du måtte ha med "tall" i select kommandoen din.. Men så er jeg noob i mysql.. Holder det ikke å kun be om alt innhold i "tabell" order by desc?
Vis hele sitatet...
"ORDER BY" må ha minst ett argument (et felt fra tabellen), men trenger ikke nødvendigvis å få spesifisert ASC/DESC.
Sist endret av Dyret; 7. september 2007 kl. 22:31.
Limited edition
Moff's Avatar
Da vil du få trøbbel med at databasen ikke forstår hva du vil sortere ut i fra. Så vidt jeg vet sorterer den kun ut i fra tall (jeg har faktisk aldri hatt behov for å sortere alfabetisk, så jeg aner ikke om det funker). Jeg bruker alltid et felt kalt "id" i starten av et recordset (i excel-eksempelet vil første celle i et recordset tilsvare alle feltene i kolonnen A). Hvis du ser for deg en tabell med flere kolonner (A, B, C, D...) og du vil sortere disse så forstår ikke databasen hvilket felt du vil sortere etter. Derfor trenger du et felt som heter for eksempel "tall". Eller "id".

Et kjempetrisk er å alltid reservere første celle i recordsettet for et tall som står på auto_increment. Dette er en innstilling du kan sette på et integerfelt som gjør at det stiger med 1 for hvert recordset som blir lagt til i databasen. "Integer" vil si at cellen inneholder en ren tallverdi (1, 2, 12, 567 - IKKE "1A", "67G"). Når du skrur på auto_increment så trenger du ikke fylle ut feltet en gang, du setter bare inn verdier i de andre cellene så går resten av seg selv. Grunnen til at jeg gjør dette er at jeg, som sagt, kan hente ut alle data sortert etter tidspunktet de ble lagt til på, også kan jeg ha et referansetall for dataene. Du vet aldri når du får bruk for et tall.

Du trenger ikke sortere dataene hvis du ikke føler for det. Spørringen vil da se sånn ut:

Kode

$sql = mysql ( "select * from tabell" ) or die ( mysql_error() );
Nå henter vi bare alt sammen i den rekkefølgen de står i. Eldste data først. Men sett at jeg har lyst til å hente ut kun ett recordset da?

Kode

$sql = mysql ( "select * from tabell where tall = '5'" ) or die ( mysql_error() );
Legg merke til bruken av ' rundt 5-tallet. Denne spørringen (queryet) vil hente ut recordsetet som inneholder verdien 5 i kolonnen som heter "tall". Hvis den ikke finnes får du trøbbel.

For å utvide dette til å omfatte trådstarters problem:

Kode

$sql = mysql ( "select * from tabell where ip = '$ip'" ) or die ( mysql_error() );
Denne spørringen kan brukes til å sjekke om en IP-adresse allerede finnes i databasen din. Ved å putte en if-løkke dette kan du skrive ut en error hvis IP-adressen allerede eksisterer eller oppdatere innholdet i recordsetet som tilhører IP-en.
Sist endret av Moff; 7. september 2007 kl. 22:39.
Sikkerhetsklarert
Aha... Gikk opp et lys for meg der.

Tilater meg å spore litt av her (sorry admins, slett hvis dere føler for det)

->Hvis jeg nå bruker eksemplet ditt å vil ha ut info om det 5. entryet, la oss si at dette er en database over registrerte brukere, og bruker id`n er 5.
Jeg vil da liste ut infoen som står i de andre kollonene for denne brukeren, f.eks email adresse, bosted, alder osv... Må jeg da lage en slik kommando for hver kollone?

Select * from alder where tall = '5'
select * from email where tall ='5'
etc..
Eller er jeg på bærtur?

Fant ut at jeg har ubegrenset antall mysql baser på webhotellet mitt, på tide å bruke de :P

edit: mente kollone ikke rad.
Sist endret av Pjukern; 7. september 2007 kl. 23:04.
Limited edition
Moff's Avatar
For å gjøre akkurat det du vil så trenger du denne kommandoen:

Kode

<?
$sql = mysql_query ( "select * from brukere where id = '$brukerid'" );
$bruker = mysql_fetch_array ( $sql );
?>
Brukerinformasjon:
ID: <? echo $bruker['id']; ?> <br />
Brukernavn: <? echo $bruker['brukernavn']; ?> <br />
Bosted: <? echo $bruker['bosted']; ?> <br />
Denne koden forutsetter noen småting:

- Du må ha minst tre kolonner i tabellen din (id, som er et tall, brukernavn, som kan være hva som helst, og bosted, som også kan være hva som helst)
- Tabellen som inneholder disse kolonnene må hete "brukere"
- Du må ha en variabel som heter "$brukerid". I mitt eksempel er denne variabelen tallet 5, slik at vi henter ut recordsetet med tallet 5 i kolonnen som heter "id"

Så introduserer jeg funksjonen mysql_fetch_array(). Denne er litt merkelig. Når du lagrer alle data fra tabellen i "$sql" så lagres de på en sånn måte at du ikke kan skrive dem ut uten videre. Dette er kompliserte saker som du kan lese om på wikipedia eller noe sånt. Men om du bruker funksjonen mysql_fetch_array så tar du alle dataene og lagrer dem i array-format i en ny variabel (tror ikke det funker om du lager i den samme variabelen (altså $sql)). Et array er ganske enkelt en variabel som inneholder flere verdier på en gang. Jeg kaller arrayet mitt "$bruker", og dataene som lagres der kan du hente frem ved å skrive "$bruker['kolonnenavn']". Kolonnenavn er da navnet på kolonnen din. Jeg skriver ut kolonnene "id", "brukernavn" og "bosted" i mitt eksempel.
Sikkerhetsklarert
Mye tar du i timen?

Skjønte faktisk alt.. Arrays har jeg grei nok kjennskap til fra tidligere programmering. så "mysql_fetch_array()" funksjonen er i grunn selvforklarende i navnet sitt.

Følger tutorialen til tizag.. Men får denne meldingen i første "oppgave"
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /hsphere/local/home/pyrabel/pyrabel.net/sql/index.php on line 2 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Vis hele sitatet...
Men nå er vi så offtopic som det går ann.. så vi får ta resten på pm så ikke nso klikker i vinkel her..