Gå til innhold

Har et spørsmål angående forum!


Anbefalte innlegg

Videoannonse
Annonse

Ja, det er mogleg.

 

Men eg trur ikkje det ville vere så lurt. Eg har ikkje dokumentasjon på det, men det er sikkert treigare, og det er lettare at det blir surr, om du forstår.

 

...sidan alle_forum_bruker mysql, så går eg ut frå at det er betre, om det besvarer spørsmålet ditt.

 

Dessutan er det jo så mykje enklare med databaser! Og meir ryddigt!

Lenke til kommentar

alt som kan lages med databaser kan lages med flatfiler. men det kan aldri bli like effektivt. du kan skrive din egen databasemotor i php, men php er ikke veldig egnet til det etter hva jeg vet.

 

dersom det ikke er veldig mange brukere og veldig mye data greier det seg med flatfil. men det hadde for eksempel vært en dårlig ide om dette forumet brukte flatfiler som database.

Lenke til kommentar

Jeg tror det er et brukbart projekt. php_user vil lære en god del underveis.

 

database tabellene kan se slik ut:

 

CREATE TABLE forum_topic (id INT(11) NOT NULL DEFAULT NULL PRIMARY KEY AUTO_INCREMENT, topic_id INT(11), topic VARCHAR(255) NOT NULL, created DATETIME NOT NULL, changed DATETIME NOT NULL);

 

feltet topic_id er for å underkategorisere topics. du kan ha for eksempel:

 

id	topic_id	topic				created				changed
1	null		'Programmering'		19:46:00,23.12.07	19:46:00,23.12.07
2	1			'PHP'				19:47:00,23.12.07	19:47:00,23.12.07

som vil si at topic 2 er underkategori av topic en. altså i dette tilfellet

Programmering -> PHP

 

CREATE TABLE forum_post (id INT(11) NOT NULL DEFAULT NULL PRIMARY KEY AUTO_INCREMENT, post_id INT(11), user_id INT(11) NOT NULL, topic_id INT(11) NOT NULL, subject VARCHAR(255) NOT NULL, post TEXT NOT NULL, created DATETIME NOT NULL, changed DATETIME NOT NULL);

 

feltet post_id gjør det samme som ovenfor når det gjelder poster.

id	post_id		user_id		topic_id	subject			post			created				changed
1	null		1			2			'Jeg lurer...'	'Hvordan ...'	19:48:00,23.12.07	19:48:00,23.12.07
1	1			2			null		'Re: Jeg lurer'	'Da gjør du.'	19:49:00,23.12.07	19:49:00,23.12.07

post_id = null indikerer at første post er en hovedpost

post_id = 1 indikerer at andre post er en svar post til post 1

topic_id i post 1 indikerer at posten hører til topic 2

 

i tillegg trenger man brukerhåndtering.

 

edit: Jeg har fått intrykk av at php_user er ganske nybegynner når det gjelder programmering. Men jeg har også fått inntrykk av at han er en av de som har mest lyst og vilje til å lære. Dette kommer man fort ganske langt med etter min erfaring. Vertfall dersom man får støtte og hjelp fra folk med mer erfaring.

Endret av grimjoey
Lenke til kommentar

det du stort sett trenger fra php er:

 

mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_row(), if(), foreach(), while(), for(), $_GET, $_POST og echo().

 

mysql:

 

du må kunne CREATE, SELECT, INSERT og UPDATE syntaks i SQL. en god ide å lage egen bruker og lære seg GRANT syntaks.

 

sikkerhet:

 

et par småtips om relevant sikkerhet. all informasjon brukeren har kontroll over må valideres. det finnes et par enkle måter å gjøre dette når det gjelder mysql queries.

 

forventer du et tall kan du bruke (int)$variabelnavn for å hindre SQL-injection.

 

forventer du tekst må du bruke mysql_real_escape_string(). denne kan være litt vrien dersom serveren automatisk escaper all input (magic quotes). en løsning på dette er å lage en funksjon som sjekker om magic quotes er skrudd på og gjør nødvendige endringer.

 

function my_escape($msg) {
 if (get_magic_quotes_gpc()) { // returnerer TRUE hvis serveren autoescaper input
$msg = stripslashes($msg); // fjerner i så tilfelle alle slashes
 }
 $msg = mysql_real_escape_string($msg); // escaper string i henhold til mysql
 $msg = "'".$msg."'"; // legger til annførselstegn
 return $msg;
}

 

praktisk eksempel:

 

$result = mysql_query('SELECT * FROM users WHERE username = '.$_GET['username'].';');

 

bør være:

 

$result = mysql_query('SELECT * FROM users WHERE username = '.my_escape($_GET['username']).';');

 

---

 

$result = mysql_query('SELECT * FROM users WHERE id = '.$_GET['id'].';');

 

bør være:

 

$result = mysql_query('SELECT * FROM users WHERE id = '.(int)$_GET['id'].';');

 

---

 

dette vil hindre SQL-injection.

 

sql-injection er når noen skriver inn SQL kommandoer i inputs for å lure skriptet ditt til å godkjenne falsk bruker eller vise informasjon fra databasen.

 

XSS eller cross site scripting har jeg ikke peiling på dessverre.

 

edit: leste litt om xss nå. det som gjelder er å hindre brukerene å skrive html/javascript kode i poster. dette kan gjøres ved å implementere et eget kode system som de fleste forum, i tillegg til å bytte ut alle < med < og alle > med >

Endret av grimjoey
Lenke til kommentar

lag en funksjon:

 

function my_query($msg) {

$result = mysql_query($msg) or die(mysql_error());

return $result

}

 

så skriver du:

 

$result = my_query('blablaquery');

$array = mysql_fetch_array($result);

 

edit: feilmeldingen tyder på at det er noe galt med sql queriet ditt. dette kan man se nermere på ved å ha:

 

$result = mysql_query(...) or die(mysql_error());

 

det er det samme som:

 

if (!$result = mysql_query(...)) die(mysql_error());

Endret av grimjoey
Lenke til kommentar

Evt denne :)

//----------------
// Debug constant
// Set to 1 to enable debugging
//--------------

define( 'DEBUG', 0 );

function query( $query, $force_debug='0' )
{
 if( DEBUG == 1 or $force_debug == 1 )
 {
mysql_query( $query ) or die( "<textarea>" . mysql_error() . "</textarea>" );
 }
 else
 {
@mysql_query( $query ); // @ kan selvfølgelig sløyfes
 }
}
query( "SELECT bar FROM foo" ); // Ingen filmeldinger vises
query( "SELECT bar FROM foo", 1 ); //Feilmelding vises om det er noe feil i spørringen

define( 'DEBUG', 0 ); bør ligge i en sentral fil som inkluderes overalt. config.php feks.

 

 

For å hente ut et felt spesifiserer du feltene etter "SELECT".

Feks;

SELECT topic_id FROM topics WHERE something;
SELECT topic_id, starter_id, title FROM topics WHERE something;

Endret av M4rTiN
Lenke til kommentar

Nå får jeg feil, altså ser ingen feil jeg..

 

Ser du den?:

 

 

<?php

if (isset($_POST['ok'])) {

 

# | MYSQL INNSTILLINGER | #

$server = "**";

$dbnavn = "**";

$dbpass = "**";

$dbtable = "**";

 

# | KOBLER TIL | #

mysql_connect($server, $dbnavn, $dbpass) or die (mysql_error());

mysql_select_db($dbtable) or die (mysql_error());

 

$topic_id=$_POST['topic_id'];

$topic=$_POST['topic'];

$tut=$_POST['tut'];

 

$datetime=date("d/m/y h:i:s");

 

$sql = "INSERT INTO forum_topic2(topic_id, topic, tut, datetime) VALUES('$topic_id','$topic','$tut','$datetime')";

$resultat = mysql_query($sql);

 

if($resultat) {

echo "Velykket!<br>";

echo "<a href=k.php>Trykk her for å se det nye forumet!</a>";

}

else {

echo "Noe feil skjedde";

}

mysql_close();

}

 

?>

<form action="<?php echo $_SERVER['php_self']; ?>" method="post">

Tittel:<br />

<input type="text" name="topic_id" /><br />

Forklaring til posten: (tekst under tittelen)<br />

<input type="text" name="topic" /><br />

Post:

<textarea cols="30" rows="10" name="tut"></textarea><br />

<input type="submit" value="Send" name="ok" />

</form>

 

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...