Använda sessioner så vissa bara kan ta bort sina egna inlägg

Permalänk
Medlem

Använda sessioner så vissa bara kan ta bort sina egna inlägg

Hejsan!

Har ett adminsystem där tabellen består av ID, Username, Password, Email och behörighet. Man har olika behörigheter; 1 = Admin och 2 = Huvudadministratör.

I nyhetsscriptet vill jag göra så att dom som har behörigheten 1 bara ska kunna ta bort sina egna nyheter dom lagt upp, samt redigera dom, medans dom som har 2 ska kunna redigera, ta bort alla nyheter som finns.

Hur ska jag göra detta på smidigaste sätt?

MVH
Jesper

Permalänk
Medlem

"Nyhetsskriptet" måste spara skibenten. Då kan du matcha skribenten mot den inloggade administratören.
Om man är huvudadministratör så behöver du inte ens kontrollera eftersom denne har alla rättigheter.

Sessionen bör minst spara identifikationsnumret för den inloggade.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Skulle du kunna visa ett exempel?

Permalänk
Medlem

Ett alternativ det är att du har en tabel som länkar ihop varje användare med deras respektive Poster och gör en kontroll när dom försöker administrera en post dom inte ska ha tillgång till.

En sådan ihopkopplings tabell kan i sin enkelhet se ut så här:

ID (unika ID för kopplingen)
post_ID (det unika ID för posten som skall kopplas)
user_ID (det ID som användaren för posten har som skall tillåtas att hantera den)

Sedan när en användare loggar in så kör en query på ihop kopplings tabellen som returnerar alla post_ID som är kopplade till den inloggade användarens ID.

Eller om du ej vill krångla till det på med en ihop kopplings tabell så kan du helt enkelt lägga till så varje post också lagrar ID för den som skapade den. Och på så sätt får endast skapar ID hantera posten.

Lycka till.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem

Varje post lagrar ju ett ID för nyheten, och så har ju användaren ett ID.

Så det blir ju enklast om jag kollar ifall personen som är inloggad har IDt som posten skapades av?

Permalänk
Medlem

Ja alltså.

Förutom att själva posten har sitt eget unika ID så skulle jag även lägga till användarens ID till posten när en post skapas.

Så när användaren är inloggad så sparar du användar ID i en sessions variabel och använder den för att se om användaren har tillåtelse att mecka med en post.

Jämför alltså användar ID i sessions variabeln med det användar ID som du lagt till på posten i fråga. Stämmer dessa överens då kan du tillåta att användaren får greja med posten.

Annars inte.

Visa signatur

Fractal Design Arc Svart | MSI Z68A-GD55 G3 REV B3 | Intel® Core i7 2600K, 3.4GHz, 8MB | Corsair 16GB (4x4096MB) CL9 1600Mhz VENGEANCE LP | MSI GeForce GTX 670 | Phanteks PH-TC14PE CPU Cooler (vit) | Corsair Power Supply 650W TX M, Modular, ATX, PS/2 | SSD (okänd tillverkare) + 2 äldre SATA2 diskar på 750 Gb, 350 gb. | OS: Microsoft Windows 10 home.

Permalänk
Medlem

Okejokej, tack för hjälpen!

Ska pröva lite och se vad jag får fram!

Återkommer.

EDIT:

Tack för hjälpen allihopa, har ordnat det nu!

Permalänk
Medlem

Varför fungerar inte denna kod?

Får fel koden

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ',' or ';' in C:\wamp\www\twisted\nyheter_admin.php on line 173

har letat och försökt med grejer men förstår inte varför den inte fungerar?

en hjälpande hand vore på sin plats!

if($_SESSION['sess_userlvl'] == 1) { $qnyheter = mysql_query("SELECT * FROM nyheter WHERE userid=".$_SESSION['sess_id']." ORDER BY datum DESC"); while($snyheter = mysql_fetch_array($qnyheter)) { $i++; if(($i%2)) { $bg = "#F9F9F9"; } else { $bg = "#FFFFFF"; } echo "Du har behörigheten 2 och kan se detta"; } ?> <?php echo "<tr bgcolor=<?php echo "'".$bg."'"; ?>>"; echo "<td><a href=\"nyheter_admin.php?editnews=\"<?php echo $snyheter['id']; ?>><?php echo $snyheter['rubrik']; ?></a></td>"; echo "<td>".$snyheter['skribent']."</td>"; echo "<td>".$snyheter['datum']." </td>"; echo "<td><a class="button" href='nyheter_admin.php?deletenews=<?php echo $snyheter['id']; ?>'>Ta bort</a></td>"; echo "</tr>"; }else if($_SESSION['sess_userlvl'] == 2){ $qnyheter = mysql_query("SELECT * FROM nyheter ORDER BY datum DESC"); while($snyheter = mysql_fetch_array($qnyheter)) { $i++; if(($i%2)) { $bg = "#F9F9F9"; } else { $bg = "#FFFFFF"; } } echo '<tr bgcolor="<?php echo "'".$bg."'"; ?>">'; echo "<td><a href='nyheter_admin.php?editnews=<?php echo $snyheter['id']; ?>'><?php echo $snyheter['rubrik']; ?></a></td>"; echo "<td><?php echo $snyheter['skribent']; ?></td>"; echo "<td><?php echo $snyheter['datum']; ?></td>"; echo "<td><a class="button" href='nyheter_admin.php?deletenews=<?php echo $snyheter['id']; ?>'>Ta bort</a></td>"; echo "</tr>"; } ?>

Permalänk
Inaktiv

Du har nog glömt ett tecken på linje 173. Ett semikolon eller " kanske.

Permalänk
Medlem

Jo, så långt är jag med, men varT? hittar det verkligen inte D:

Permalänk
Inaktiv

Du kan inte göra såhär:

echo "<tr bgcolor=<?php echo "'".$bg."'"; ?>>"; echo "<td><a href=\"nyheter_admin.php?editnews=\"<?php echo $snyheter['id']; ?>><?php echo $snyheter['rubrik']; ?></a></td>"; echo "<td>".$snyheter['skribent']."</td>"; echo "<td>".$snyheter['datum']." </td>"; echo "<td><a class="button" href='nyheter_admin.php?deletenews=<?php echo $snyheter['id']; ?>'>Ta bort</a></td>"; echo "</tr>";

Där har du <?php echo ?> i ett echo.

Permalänk
Medlem

Ska jag bara echa ut det direkt där i?

Permalänk
Inaktiv

Exempel:

<?php echo "<tr bgcolor='" .$bg. "'>";

Permalänk
Medlem

Okej, förstår på sättovis hur du menar..

echo "<td><a href='nyheter_admin.php?editnews='" $snyheter['id']; "' , '"$snyheter['rubrik'];"'</a></td>";

Har prövat ändra på den med, så ser den ut nu. Men det vägrar fungera?

Permalänk
Inaktiv

Du måste ha punkter för att sätta ihop strängar med variabler, och du ska inte heller ha några semikolon på variablerna. Precis som du gjort på andra delar av koden:

echo "<td><a href='nyheter_admin.php?editnews='" . $snyheter['id'] . "' , '" . $snyheter['rubrik'] . "'</a></td>";

Permalänk
Medlem

if($_SESSION['sess_userlvl'] == 1) { $qnyheter = mysql_query("SELECT * FROM nyheter WHERE userid=".$_SESSION['sess_id']." ORDER BY datum DESC"); while($snyheter = mysql_fetch_array($qnyheter)) { $i++; if(($i%2)) { $bg = "#F9F9F9"; } else { $bg = "#FFFFFF"; } echo "Du har behörigheten 2 och kan se detta"; } ?> <?php echo "<tr bgcolor='".$bg."'>"; echo "<td><a href='nyheter_admin.php?editnews='" . $snyheter['id'] . "' , '" .$snyheter['rubrik'] . "'</a></td>"; echo "<td>".$snyheter['skribent']."</td>"; echo "<td>".$snyheter['datum']." </td>"; echo "<td><a class='button' href='nyheter_admin.php?deletenews='" .$snyheter['id']. "'>Ta bort</a></td>"; echo "</tr>"; }else if($_SESSION['sess_userlvl'] == 2){ $news = mysql_query("SELECT * FROM nyheter ORDER BY datum DESC"); while($newest = mysql_fetch_array($news)) { $i++; if(($i%2)) { $bg = "#F9F9F9"; } else { $bg = "#FFFFFF"; } } echo "<tr bgcolor='".$bg."'>"; echo "<td><a href='nyheter_admin.php?editnews='" . $newest['id'] . "' , '" .$newest['rubrik'] . "'</a></td>"; echo "<td> ".$newest['skribent']."</td>"; echo "<td> ".$newest['datum']."</td>"; echo "<td><a class='button' href='nyheter_admin.php?deletenews='" .$newest['id']. "'>Ta bort</a></td>"; echo "</tr>"; } ?>

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

när jag försöker ta bort en post så får jag det meddelandet, varför?

högst upp har ni koden.

Permalänk
Legendarisk

Antagligen den första queryn som inte kör, kontrollera att $_SESSION['sess_id'] innehåller vad den ska, missbruka var_dump() för sådant. Sedan bör du inte skapa sqlkommandon på det sättet. Istället för den gamla mysql_*-modulen bör du använda mysqli eller PDO för att ansluta till databasen, båda dessa stödjer prepared statements som är både renare och säkrare att arbeta med. Om du behöver stanna på mysql_ så bör du se till att escapa alla parametrar, och helst formatera strängarna med sprintf för att hålla din SQL läsbar.

http://www.php.net/manual/en/mysqlinfo.api.choosing.php

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.

Permalänk
Medlem

Har aldrig använt mig utav mysqli eller PDO och vet knappt hur det ser ut.

Skulle du kunna ge några exempel på hur det ser ut när man connectar till en databas och när jag ska hämta, uppdatera, lägga in osv i databasen?

samt så ska jag escapa alla parametrar, har inte kommit dit än bara

Permalänk
Legendarisk

Det finns exempel på det mesta på php.net. Använder du mysqli procedurellt så kommer det vara rätt likt vad du antagligen har läst hittills:
http://www.php.net/manual/en/mysqli-stmt.bind-param.php

Skickades från m.sweclockers.com

Visa signatur

Abstractions all the way down.