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.
  6 647
Hei!
Jeg har tatt på meg ansvaret som seater for årets TG for vennegjengen, så jeg tenkte jeg skulle lage et seatmap der folk skriver inn navnet sitt istedenfor at jeg skal ta imot alle navnene og sette det inn i en fil selv.
Systemet serveren kjører på har PHP5, Apache, MySQL og er en Ubuntu server 11.10.

Jeg har to mapper.
topseats/
botseats/
I hver av de mappene blir det laget filer etter hvert som brukerne skriver inn navnene sine i en html form. Hver html-form skriver til enten topseats/ eller botseats/ og avhengig av hvilken plass man velger skriver man til 1, 2, 3, 4 .... 25.txt
(Dersom man kan få php til å lese fra en LINJE i en fil hadde det vært supert, har ikke funnet den funksjonaliteten enda...)

Uansett, jeg har laget dette scriptet som skal lese fra en fil:

Kode

<?php
$filename = 'topseats/1.txt' ;
$handle = fopen($filename, "r") ;
$contents = fread($handle, 50) ;

if (file_exists($filename)){ 
	echo "$contents" ; // Tell who owns the seat
	fclose($handle) ; // Close file
	exit ;
	}
else { 
	echo "Ledig plass!" ; 
	} /* text file does not exist => seat free */  
?>
(dersom noen vil bytte plass må jeg manuelt slette fila, men det er null stress)


Med 25 filer (i hver mappe) blir det enormt med editing og scripts å kjøre, så jeg lurte på om det var mulig å lage et script som loopet gjennom alle filene (evt. lines hvis jeg får det til å funke)

Noe ala

Kode

<?php
$seats = count(glob("topseats/" . "*.txt")) ; //teller antall filer i mappa
while $seats > 1, until $seats = $seats {
$seat = "topseats/$seats" . ".txt" // Lager en variabel der den leser filen loopen har kommet til. Starter på 1.txt og slutter på 25.txt (siden da er $seats = $seats )

/* Her kommer scriptet jeg linket ovenfor */
}
?>
Jeg har ingen anelse om noe av det jeg skrev er riktig, men poenget er at servern først finner ut hvor mange filer det er i mappa, og så looper den gjennom alle og leser ut det som står der.

Noe jeg kom på nå er jo at dersom man registrer seg på sete 15, og ingen har tatt sete 10-14, så vil den jo lese ut 10 filer, og derfor ikke lese ut endringen i fil 15... Er det mulig å lese ut KUN filer som er større enn 0 B? (dvs at de ikke har noe innhold)
Takk takk, prøves nå

Jeg kom fram til dette:

Kode

<?php
$lines = file('topseats.txt') ;
foreach ($lines as $line_num => $line) {
	echo htmlspecialchars($line) . '<br><form action="topseater.php" method="post"><input name="nick{$line_num}" /></form></td><td>';
}
?>
I hver rute i tabellen skriver den opp nicket til personen (hvis det sitter noen der) og en form der man kan skrive opp nicket sitt hvis man vil sitte der. JA, jeg vet at folk kan ta plassene til hverandre, men vi er kompiser så de gjør nok ikke det.

Anyways, topseater.php (scriptet som skal kjøres) må ha med $nick som kommer fra <input name="nick{$line_num}" />.
1.Kan jeg loope gjennom nicks med tall bak seg i php scriptet?
--- $nick = $_REQUEST['$nick{$line_num}'] ;

2. Hvordan skriver jeg til en spesiell linje i en *.txt fil?
--- Er det mulig å sjekke nummeret i nick{$line_num} og skrive til den linja? (nummeret er alltid den siste bokstaven, så det skal vel funke med substr($nick, -1) ?
z0p
uʍop ǝpısdn
z0p's Avatar
hva med en litt anen tilnærming?

seating.txt

Kode

seatnumber TAB nickname LINEFEED

Kode

1    Gudrunn
2    Gunnar
3    Gunder
osv.
Du kan da lese lese det inn i et array indeksert av setenummer. Det er da enkelt å manipulere tabellen, og skrive tilbake til fil.
OT: Et annet seatingscript som kunne vært nyttig for mange, hadde vært et som tok for seg ønsker med seating mht. fordelingen. At hver person skriver tre personer de kunne ønske å sitte siden av, av to mulige muligheter.
Scriptet tar seg av fakultetfordelingen, og lager den gunstigste løsningen for alle.
Noe sånt må vel finnes fra før?
Sitat av z0p Vis innlegg
hva med en litt anen tilnærming?

seating.txt

Kode

seatnumber TAB nickname LINEFEED

Kode

1    Gudrunn
2    Gunnar
3    Gunder
osv.
Du kan da lese lese det inn i et array indeksert av setenummer. Det er da enkelt å manipulere tabellen, og skrive tilbake til fil.
Vis hele sitatet...
Høres ikke dumt ut, jeg kan allerede få lagt inn setenummer i fila med space, men det finnes vel en "kode" for tab (indent) i tillegg. Ikke dumt
Linefeed = linebreak?

Sitat av Adrian Vis innlegg
OT: Et annet seatingscript som kunne vært nyttig for mange, hadde vært et som tok for seg ønsker med seating mht. fordelingen. At hver person skriver tre personer de kunne ønske å sitte siden av, av to mulige muligheter.
Scriptet tar seg av fakultetfordelingen, og lager den gunstigste løsningen for alle.
Noe sånt må vel finnes fra før?
Vis hele sitatet...
Nå kjører jeg en førstemann-til-mølla praksis, men ja, ikke dumt!


---

Anyways, her er det jeg har hittil. Her er "layouten" og her er scriptet som skal skrive til radene.

Foreløpig gjør de ingenting, fordi jeg ikke har satt meg helt inn i alt som skal skje.
Ut i fra selve nettsiden dannes det en variabel, nick+line number. Men jeg vet ikke hvordan jeg kan få øverført DEN variabelen til seating-scriptet, og heller ikke hvordan jeg kan skrive til den linja jeg ønsker. (Noen vil sette seg på seat 10, hvordan skriver jeg til line 10?)
Hvorfor lagre informasjonen i .txt filer når du kan bruke MySQL databasen til dette?

Da er jo det bare å lage ett table kalt "Seating" med rows kalt "id, nick, plass, dato(?)"
Og når noen sender inn en form med nick og plass så bruker du;

Kode

mysql_query("INSERT INTO seating (id,nick,plass,dato) VALUES ('','$_POST[nick]','$_POST[plass]','$dato')");
og for å sjekke om noen allerede har tatt plassen bruker du;

Kode

$query = "mysql_query(SELECT * FROM seating WHERE plass='$_POST[plass]'";
$count = mysql_num_rows($query);

if ($count >= 1){
echo "Plass er allerede opptatt";
}

Vet ikke om dette kan brukes for deg
Sist endret av d3m0t3x; 8. desember 2011 kl. 13:37. Grunn: Skriveleif