[PHP/MySQL] Usunięcie rekordu z bazy po zapisaniu pliku


(felixik) #1

Witam, jako, że zakładanie blokady na plik średnio mi wyszło to przepisałem kod na bazę danych. Prawie działa, ale jedyny problem to taki, że teraz skrypt nie chce mi usuwać rekordu z bazy. Pomoże ktoś?

$plik_otwarty = $_GET['strona'];

$wynik = mysql_query("SELECT * FROM edycja WHERE plik='$plik_otwarty'");


if(mysql_num_rows($wynik) > 0) {

while($r = mysql_fetch_array($wynik)) {

if($r[0] == $plik_otwarty && $r[1] == "tak") {

echo '';

      }

   }

}


if(empty($plik_otwarty))

{

echo'

tekst inf.';

}

else

{


$result = mysql_query("INSERT INTO edycja(plik, otwarty) VALUES('$plik_otwarty', 'tak')") or die(mysql_error());

echo'';

$a = file_get_contents("".$dir.$_GET['strona'].".".$typ_pliku."");


  echo $a;

  echo '
';

  echo '';

  $editor_data = stripslashes($_POST['content']);

  $editor_data = str_replace($tab1, $tab2, $editor_data);

  $editor_data = html_entity_decode($editor_data);

  $b = file_put_contents("".$dir.$_GET['strona'].".".$typ_pliku."", $editor_data);


echo'';

}


if ($b === true) {

$c = mysql_query ("TRUNCATE edycja");

}

za pomoc i wszelkie rady z góry dziękuję


(Rst00) #2

Może jestem ślepy ale jak rekord z bazy ma być usuwany skoro nie ma nigdzie Delete’a?


(felixik) #3

na dole masz TRUNCATE, czyli czyszczenie całej bazy


(Grzelix) #4

Sprawdź tak:

TRUNCATE TABLE edycja

(hoobert) #5

Ten kod jest strasznie zamieszany.

document.location.href = "edytor.php";';

dlaczego używasz javascriptu do przekierowania. Co jeśli ktoś wyłączy javascript u siebie w przeglądarce? Jak chcesz zrobić przekierowanie to użyj lepiej:

header('Location: edytor.php');
$a = file_get_contents("".$dir.$_GET['strona'].".".$typ_pliku."");

gdzie masz wcześniej zdefiniowaną zmienną $dir, tak samo $typ_pliku? Może ten kod to wycinek z całości, ale dla przykładu jest to niejasne. 3.

echo'

brak parametru ‘action’. 4.

$editor_data = str_replace($tab1, $tab2, $editor_data);

$tab1, $tab2?? 5.

if ($b === true) {

$c = mysql_query ("TRUNCATE edycja");

}

zobacz co zwraca zmienna $b, np. przez var_dump($b);

no i dlaczego czyścisz całą tabele a nie usuwasz poszczególnych rekordów? Co w przypadku, gdy będzie aktualnie edytowanych kilka plików, wszystkie one będą zablokowane do edycji, wprowadzisz zmiany w jednym pliku, zapiszesz i wszysko się wykasuje, w związku z czym pozostałe pliki, które są aktualnie edytowane nie będą już zablokowane.

Poza tym ten sposób jest o tyle dziwny, że co w przypadku, gdy ktoś wejdzie na edycję pliku, do bazy zostanie dodana informacja, że plik jest aktualnie edytowany i wyjdzie ze strony? Plik będzie dalej zablokowany do edycji bo wpis z tabeli nie zostanie usunięty, mimo, że nikt go nie będzie edytował… Na Twoim miejscu wykorzystałbym ajax do wysyłania co jakiś czas zapytania z identyfikatorem pliku, który jest właśnie edytowany i potem w php zrobił obsługę, w taki sposób, że jeżeli ostatni wpis w tabeli jest starszy niż ten timeout, który założysz to plik będzie możliwy do edycji, w przeciwnym razie blokada i stosowny komunikat.