chiusura Popup + unlock table

Mi sto perdendo in un bicchier d'acqua,sempre alle prese con il blocco tabelle e prenotazione  :P

<?php session_start();
require_once('Connections/db.php');
?>
<script>
function autoClose()
{
window.close();
} 
</script>
<?php
mysql_select_db($database_db, $db);
mysql_query("LOCK TABLES prenota WRITE");
$query_Recordset1 = "SHOW TABLE STATUS LIKE 'prenota'";
$Recordset1 = mysql_query($query_Recordset1, $db) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$id_prenota=$row_Recordset1['Auto_increment'];

if($scelta=='C') {
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQLX = sprintf("INSERT INTO prenota (idprenota, idclienti) VALUES (%s, %s)",
                       GetSQLValueString($_POST['id_prenota'], "text"),
                       GetSQLValueString($_POST['id_cli'], "text");

  mysql_select_db($database_db, $db);
  $Result2 = mysql_query($insertSQLX, $db) or die(mysql_error());


  echo "<script>autoClose();</script>";
if($Result2) {mysql_query("UNLOCK TABLES");}}}

La pagina in questione non è madre ma è un pagina di Popup.

Nel form ho un pulsante dove alla pressione di quest'ultimo

mi fa l'inserimento e mi dovrebbe rilasciare il blocco tabella e chiudere la pagina.

In realtà mi rilascia prima il blocco.

Come faccio a fargli rilasciare il blocco e automaticamente a chiudere la pagina?

Perchè se c'è un utente in attesa che si sblocchi la  pagina,in questo modo

rilasciando il blocco l'altro utente entra e mi riblocca la tabelle però l'utente precedente

che aveva confermato rimane appeso.

Lo so che ho spiegato come un cane.....mi si è cotto il cervello per questa cosa

 :bye:

inviato 9 anni fa
leoneweb
X 0 X

Giriamo la frittata: sei consapevole che quando un utente vede la pagina generata da quel codice il LOCK è già stato rilasciato?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Come faccio a fare l'inserimento,rilasciare il lock e chiudere la pagina?

<?php session_start();
require_once('Connections/db.php');
?>
<script>
function autoClose()
{
window.close();
} 
</script>
<?php
mysql_select_db($database_db, $db);
mysql_query("LOCK TABLES prenota WRITE");
$query_Recordset1 = "SHOW TABLE STATUS LIKE 'prenota'";
$Recordset1 = mysql_query($query_Recordset1, $db) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
$id_prenota=$row_Recordset1['Auto_increment'];

if($scelta=='C') {
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  $insertSQLX = sprintf("INSERT INTO prenota (idprenota, idclienti) VALUES (%s, %s)",
                       GetSQLValueString($_POST['id_prenota'], "text"),
                       GetSQLValueString($_POST['id_cli'], "text");

  mysql_select_db($database_db, $db);
  $Result2 = mysql_query($insertSQLX, $db) or die(mysql_error());


  echo "<script>autoClose();</script>";}}
if(mysql_query($insertSQLX,$db)) 
{ mysql_query("UNLOCK TABLES");}

Ho provato anche così ma nisba

risposto 9 anni fa
leoneweb
X 0 X

Blocchi la tabella, inserisci un record e la sblocchi. Perché?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

ma come ho fatto io mi sblocca prima la tabella,quindi sbaglio a metter quel

if(mysql_query($insertSQLX,$db)) 
{ mysql_query("UNLOCK TABLES");}
risposto 9 anni fa
leoneweb
X 0 X

si, ma tralasciando il risultato attuale, perché stai loccando la tabella? A cosa ti serve? Cosa temi che accada? Perché pensi di risolvere il problema loccando la tabella? (Ho bisogno di capire!)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

A questa pagina hanno accesso + persone da remoto e ho bisogno di bloccare la tabella xchè quando devo andare a fare delle modifiche nessuno ci deve andare a scrivere o leggere,tranne me che faccio le modifiche.

risposto 9 anni fa
leoneweb
X 0 X

ma una query di tipo INSERT esegue in automatico il lock delle risorse coninvolte!

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

potresti spiegarti meglio?

La query insert c'e' nello script

risposto 9 anni fa
leoneweb
X 0 X

se devi fare 2 insert (o una select ed un insert) e non vuoi che qualcuno faccia operazioni tra la prima e la seconda allora puoi mettere un lock (oopure effettuare una transazione, che è meglio)

ma su una singola insert non ha senso loccare la tabella, perché durante la sua esecuzione è MySQL che si preoccupa di non far accavallare altre operazioni contemporanee sulla stessa tabella.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Il mio insert avviene alla pressione del pulsante,quini io

posso metterci anche2 min. per farlo(per complilare alcuni campi ).

e una volta completati i campi premo il pulsante invio e mi va a fare l'insert.

E in questi 2 min. non voglio che nessuno ci entri

risposto 9 anni fa
leoneweb
X 0 X

Ecco l'errore. Non c'è nessun modo per proteggere quei 2 minuti, poiché lo script che ha prodotto il form da compilare è ormai morto e sepolto mentre quello che effettuerà la insert si avvierà solo fra 2 minuti. Non c'è nessuno che ti possa tenere il lock in questi 2 minuti.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

scusa in questo modo come ho fatto

appena entro nella pagina si blocca la tabella

mysql_select_db($database_db, $db);
mysql_query("LOCK TABLES prenota WRITE");
$query_Recordset1 = "SHOW TABLE STATUS LIKE 'prenota'";
$Recordset1 = mysql_query($query_Recordset1, $db) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);

e se provo ad entrare da un'altro computer nella stessa pagina,

mi rimane appeso quindi il lock l'ha preso

e finchè non premo il pulsante il lock non me lo rilascia.

Infatti appena premo il pulsante viene rilasciato il lock

e sull'altro computer entro tranquillamente.

Il problema è che il lock viene rilasciato subito alla pressione del pulsante e

non mi fa l'inserimento,rimane bloccato,questo perchè l'altro

computer ha avuto lo sblocco,quindi è entrato nella pagina ed mi ha bloccato tutto.

risposto 9 anni fa
leoneweb
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda