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.
  3 4738
Jeg har en nettside for et skoleprosjekt hvor du registrerer en bruker for å så skrive ned drømmene dine slik at de popper opp i et arkiv. Det er basic text input som sendes til en database, for å så bli hentet ut igjen og satt inn i et PHP generert HTML table. I denne tabellen har jeg også lagt en kollone som kun inneholder kryss ikoner (delete knapp) som jeg ikke helt klarer å få til å gjøre slik jeg vil.

Her er linken til prosjektet mitt. Det tar deg 2 sek å lage bruker og du trenger ikke å bruke ekte info/emails

https://dikult205.k.uib.no/Mnf17/Assignment%203/

Selve PHP koden til indexen finnes her: https://codeshare.io/2pomQ0

Her er SQL koden:
https://codeshare.io/GqnD6k


På linje 112 i indexen har jeg prøvd å sette inn en <a href='?removedream'> funksjon, men jeg er helt blank på nøyaktig hvordan PHP syntaxen blir for selve defineringen av funksjonen. (vet ikke om denne setningen gir mening en gang.. sån rent teknisk)

Er jeg helt på bærtur her eller er det riktig tilnærming? Jeg kan se for meg at dette ser ut som en veldig dumt spørsmål hvis du er flink til programering, men jeg har prøvd en del tutorials nå og de er enten utdaterte ellers så har de en helt annen tilnærming til det å slette inlegg (brukt helt andre løsninger, som sikkert er bedre). Blir meget takknemmlig for alle svar jeg får, enten det løser problemet mitt eller om det kan referrere meg videre til en guide
Sist endret av Modalitsu94; 22. mai 2017 kl. 17:23.
Trigonoceps occipita
vidarlo's Avatar
Donor
For det første bør du aldri bruke GET til å permanent modifisere ting, t.d. slette. Søkemotorer kan finne på å følge lenker - og det vil slette alt innhaldet. Det er ikkje spesielt lurt. Bruk POST til å slette ting.

Viare så må du jo formidle til backend kva som skal slettast. Det bør jo vere innleggs-id, og handlinga slett. Du har handlinga på plass, men mangler innleggsiden. Typisk (om du insisterer på get) må du bruke ?delete&id=id

Så må du serverside sjekke for delete, gyldig id, og slette den IDen med ei høveleg SQL-spørring.
Som Slashdot påpeker, så bør du gå bort i fra GET forespørsler og heller bruke POST. Jeg har laget et lite eksempel til deg:

Kode

<form action="index.php" method="post">
	<input type="hidden" name="removedream" value="true" />
	<input type="hidden" name="dream_id" value="[UNIK ID FRA DATABASEN]" />
	<input type="submit" name="confirm" value="X" />
</form>
I dette tilfelle så vil «[UNIK ID FRA DATABASEN]» være $row["id"]. Her så sender du en POST forespørsel med feltene removedream, dream_id og confirm, dette ville ha tilsvart index.php?removedream=true&dream_id=[UNIK_ID]&confirm=X i get forespørsel. Du trenger også en server kode, denne bør se ca slik ut:

Kode

<?php
	if(isset($_POST["removedream"]) && isset($_POST["dream_id"]) && $_POST["removedream"] == "true")
	{
		$dream_id = mysqli_real_escape_string($_POST["dream_id"]);
		$sql_query = "SELECT * FROM tbl_dreams WHERE id='" . $dream_id . "' AND user_id='" . $_SESSION["user_id"] . "'";
		$sql_result = mysqli_query($con, $sql_query);
		
		if(mysql_num_rows($sql_result) > 0)
		{
			$sql_query = "DELETE FROM tbl_dreams WHERE id='" . $dream_id . "' AND user_id='" . $_SESSION["user_id"] . "'";

			if(mysqli_query($con, $sql_query) == FALSE)
			{
				// Håndtere error ved sletting
			}
		}
		else
		{
			// Fortelle brukeren at drømmen ikke finnes, eller at vedkommende ikke har tilgang til å slette den
		}
	}
?>
Denne koden er sikret mot at søkemotorer kan slette databasen da den krever at eieren av drømmen er innlogget for å få slettet den.
Trådstarter
17 5
Fikk fisket det nå Takk til begge to for informative svar.