---
title: "Utskiven text försvinner när det tas bort ur DB"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/173835-utskiven-text-försvinner-när-det-tas-bort-ur-db"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "orvar"
published: "2008-09-03T21:03:18.000Z"
updated: "2008-09-19T13:13:15.000Z"
replies: 6
views: 769
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/173835-utskiven-text-försvinner-när-det-tas-bort-ur-db"
---

# Utskiven text försvinner när det tas bort ur DB

## #1 — orvar, 2008-09-03T21:03Z

Osäker på om detta skall in här eller i SQL, men gör ett försök så får vi se vart det leder.

Jag har en text i en mySQL-databas. När jag hämtar texten och skriver ut den på webbsidan vill jag direkt efter att det är utskrivet ta bort raden som texten stod i ur databasen. När jag gör detta försvinner dock texten direkt också från webbsidan.

Det är ett skumt beteende tycker jag eftersom jag hämtat texten, sparat det i en php-variabel och skrivit ut det. Då borde det vara "bortkopplat" från databasen?

Jag vill kunna skriva ut texten på webbsidan, ta bort den ur databasen, och har texten kvar utskriven. Någon som vet hur jag gör?

Tack.

Permalänk: https://www.webforum.nu/p/173835

## #2 — @nders, 2008-09-04T03:31Z

Visa den kod du använder så får vi se vad som går snett.

Permalänk: https://www.webforum.nu/p/2136632

## #3 — orvar, 2008-09-04T05:58Z

```
<?php

	function writePost() {
		$open = mysql_connect('localhost', 'db_user', 'db_pass');
		mysql_select_db('db_name');

		$query = "INSERT INTO tabell (entext) VALUES ('" . $_POST["texten"] . "')";
		if (mysql_query($query)) {
			echo "ok";
			mysql_close($open);
		} else {
			echo("Något blev fel<BR>");
			echo ($query);
			mysql_close($open);
		}
	}

	function readPost() { // id skickas med i $_GET['i']
		$open = mysql_connect('localhost', 'db_user', 'db_pass');
		mysql_select_db('db_name');

		$query = "SELECT entext FROM tabell WHERE id = '" . $_GET['i'] . "'";
		$data = mysql_query($query);

		while ($rad = mysql_fetch_array($data)) {
			echo $rad["entext"];
		}
		mysql_close($open);
	}

	function deletePost() { // id skickas med i $_GET['i']
		$open = mysql_connect('localhost', 'db_user', 'db_pass');
		mysql_select_db('db_name');

		$query ="DELETE FROM tabell WHERE id = '" . $_GET['i'] . "'";
		mysql_query($query);
		mysql_close($open);
	}

	function writeHeader() {
		echo "
			<HTML><HEAD></HEAD><BODY>
			<CENTER>
		";
	}

	function writeFooter() {
		echo "
			</CENTER></BODY></HTML>
		";
	}

	if ($_GET['m'] == "write"){
		writeHeader();
		writePost();
		writeFooter();
	} elseif (strlen($_GET['i']) >= 1){
		writeHeader();
		readPost();
		deletePost();
		writeFooter();
	} else {
		writeHeader();
		echo "
			<TABLE WIDTH=\"520\" ALIGN=\"top\" BORDER=\"0\" CELLPADDING=\"1\" CELLSPACING=\"0\" BGCOLOR=\"#000000\"><TR><TD>
			<TABLE WIDTH=\"100%\" ALIGN=\"top\" BORDER=\"0\" CELLPADDING=\"3\" CELLSPACING=\"0\" BGCOLOR=\"#FFFFFF\">
				<TR VALIGN=\"top\">
					<TD WIDTH=\"210\">
						<FORM METHOD=\"post\" ACTION=\"?m=write\">
						<TEXTAREA NAME=\"texten\" ROWS=\"5\" COLS=\"30\">texten som skall skrivas ut</TEXTAREA><BR>
						<INPUT TYPE=\"submit\" NAME=\"add\" VALUE=\"OK!\">
						</FORM>
					</TD>
				</TR>
			</TABLE></TD></TR></TABLE>
		";
		writeFooter();
	}
?>
```

Permalänk: https://www.webforum.nu/p/2136637

## #4 — überfuzz, 2008-09-05T20:41Z

Hur ser $\_GET ut?

```php
print_r($_GET);
```

Permalänk: https://www.webforum.nu/p/2136947

## #5 — aasah, 2008-09-07T08:58Z

Inte för att det bidrar till felet, men det är inte riktigt bra att ha anslutningen och stägningen till databasen i alla funktioner. Nu öppnar du och stänger anslutningen en gång per funktionsanrop. Det vore bättre att ansluta högst upp på sidan och stänga längst ner. Då ansluter du en gång per sidanrop.

Permalänk: https://www.webforum.nu/p/2137102

## #6 — orvar, 2008-09-08T21:42Z

aasah: Tack. Har ändrat i min kod här hemma efter din rekommendation. (det ändrade tyvärr inte något resultat.)

überfuzz: Den skriver bara ut:

```
1
```

 

Jag har testat att ändra i koden så att raden inte tas bort direkt. Nu har jag en ny bool-kolumn i tabellen som sätts till true när texten läses. Sen kör jag en vanlig if-sats som först kollar om bool-värdet är true, isåfall skrivs texten "texten är borta" ut (trots att texten fortfarande finns i DBn). else-satsen skriver således ut texten som den står i DBn. Även nu skrivs texten ut först, för att sedan automatiskt direkt försvinna. Texten visas \< 0,5 sekund innan "texten är borta" kommer fram. Det verkar alltså som att if-satsen körs flera gånger av någon anledning.

Om man går tillbaka till originalkoden:

```
...
	if ($_GET['m'] == "write"){
		writeHeader();
		writePost();
		writeFooter();
	} elseif (strlen($_GET['i']) >= 1){
		writeHeader();
		readPost();
		deletePost();
		writeFooter();
	} else {
...
```

 
Kan det vara så att denna passage körs flera gånger på något klurigt sätt? Alltså först skrivs texten ut, sedan tas den bort, sedan försöker den skriva ut sig igen?

Efter konsultation med en vän testade jag även att lägga in

```
paus(5);
```

 
mellan readPost() och deletePost();
Det hjälpte dock inte.

Tacksam för all hjälp!

UPDATE: Problemet löst här: <http://forums.mozillazine.org/viewtopic.php?f=25&t=853715&p=4486215#p4486215>

Permalänk: https://www.webforum.nu/p/2140676

## #7 — aasah, 2008-09-19T13:13Z

Det var bra att det löstes, men det hade varit justare att helt enkelt förklara lösningen här (gärna med dina egna ord) än att länka till ett annat forum. Speciellt som den tråd du länkar till inte heller innehåller förklaringen utan mest länkar vidare...

Permalänk: https://www.webforum.nu/p/2142553

---

Tråden på webben: https://www.webforum.nu/amne/php/173835-utskiven-text-försvinner-när-det-tas-bort-ur-db
