Permalänk

PHP: Skapa artiklar

En schysst kille på phpportalen.net dela med sig av detta script:
Länk

Dock är det inte speciellt säkert då vem som helst kan ändra varandras artiklar. Man skriver endast in "index.php?change=10" och så kan man ändra vald artikel. Vore tacksam och ni kan hjälpa mig så att obehöriga ej kan ändra andras artiklar.

Dock kan det finnas en lösning, när man loggar in skapas en session.
$_SESSION['sess_id'] = mysql_result($result, 0);

Möjligtvis kan man sätta in någon kod som kollar sessionens id och sedan registerar denna i databasen. Gör vi på det sättet så måste vi även ha någon kod som kollar om nuvarande ID passar med författarens ID. Machar dom inte varande så ska man skickas tillbaks. Är ganska noob inom php så jag tänkte att ni får hjälpa mig att koda.

Gå in på länken så hittar ni scriptet och dess kod.

Permalänk
Medlem

Om du använder inloggning kan du hantera detta genom att t.ex. kontrollera så att användarens ID (eller något annat som är unikt per användare) är samma som den som skapade artikeln.

Permalänk

Varje användare har ju ett unikt id så det blir inga problem, som sagt är jag nybörjare på php och behöver kompletta koder.

Permalänk
Medlem

Om du gör så att varje gång användaren loggar in så får den ett unik id.
Sen så kollar du bara om sessionen har ett värde. Om den inte har ett värde, då skickas användaren tillbaks till inloggningssidan:

<?php if(!isset($_SESSION['sess_id'])) { header("Location: index.php"); exit; } ?>

Visa signatur
Permalänk

Det har jag redan fattat, men när man skriver en artikel så måste ju hans id loggas och sparas i en databas, det är det jag inte fattar.

Permalänk
Medlem

Det är ju bara att spara det som ägare till varje artikel.

När artikeln läggs till så läggs ett hans id in i ett fält som heter OWNER eller något. Och om sedan det stämmer med idt så är det ok att editera.

Edit:
När du lägger in artikeln från början (du behöver ju ha fungerande session)

$owner = $_SESSION['UserID'];

När du hämtar artiklar som någon kan editera så kan du ju göra en lista såhär.
$getit = "SELECT * FROM artikel WHERE owner='{$_SESSION['UserID']}'";
$resultat = mysql_query($getit) or die("gick inte!");

Eller visa alla och köra med någon IF-sats bara..

Reservation för att jag tänkte lite snabbt, men detta borde fungera..

Visa signatur

Detta är min tjusiga signatur. <<<<<<<

Permalänk

Ok, nu ser koden ut så här.

$date = date('Y/m/d H:i:s');
$owner = $_SESSION['sess_id'];

if (isset($_GET['send'])){
$send = mysql_query("INSERT INTO articles (headline, author, article, date, owner)

Dock vet jag inte om tabben i databasen fungerar korrekt.

Fält: owner
Typ: INT
Längd: 11
Kollationering: latin1_swedish_ci
Null: Not null

Permalänk

Du kan använda TEXT på "Owner".

Jag har för mig att man använder INT är för att skapa ett id, men efter som du har ett id iform av sess_id så kan du lagra det i en TEXT kolum.

// T

Permalänk

Dagens datum loggas i databasen istället för sessionens id nummer.
Det är den delen som strular:

//Skicka artikel
$date = date('Y/m/d H:i:s'); //Kommer att skriva ut typ 2007/05/19 17:30:58
$owner = $_SESSION['sess_id'];

if (isset($_GET['send'])){
$send = mysql_query("INSERT INTO articles (headline, author, article, date, owner)
VALUES ('".$_POST["headline"]."',
'".$_POST["author"]."',
'".$_POST["article"]."',
'".$owner."',
' $date ')") or die(mysql_error());

Permalänk

Ok, det funkar nu. Bytte plats på $owner och $date.
Men vilken kod ska jag använda för att jämföra nuvarande id med författarens id?

Permalänk
Medlem

"SELECT * FROM articles WHERE id = " . $id . " owner = '" . $_SESSION['sess_id'] . "'"

Jag antar att du har en id per artikel som genereras automatiskt och sedan anger du det för att hämta endast den artikeln från sidan.
Sedan måste du bara kolla så att du får ut något värde från frågan ovan.