Ajax: impossibile salvare dati nel db

Quando clicco sul pulsante salva l'unica cosa che lo script fa è andare alla pagina stato_riparazioni.php, non passa dalla pagina php per salvare i dati sul db. Dov'è l'errore??? :dhò:

Ma non esiste una guida su Ajax?

var xmlhttp;

function modif_scheda_riparazione()
{
   xmlhttp = GetXmlHttpObject();
   
   if (xmlhttp==null)
   {
      alert ("Il Browser non supporta HTTP Request");
      return;
   }

var id_riparazione = document.forms['modifica_riparazione'].elements["idriparazione"].value;
var id_apparato = document.forms['modifica_riparazione'].elements["idapparato"].value;
var stato = document.forms['modifica_riparazione'].elements["stato"].value;
var url="php/riparazioni/modifica_riparazione.php";
   
url = url+"?id_riparazione="+id_riparazione+"&id_apparato="+id_apparato+"stato="+stato;   
   xmlhttp.onreadystatechange = stateChanged;
   xmlhttp.open("GET",url,true);
   xmlhttp.send(null);
}

function stateChanged()
{
   if (xmlhttp.readyState == 4)
   {
      window.location = "index.php?section=stato_riparazioni";   
   } else {
      document.getElementById("txtHint").innerHTML = 'Salvataggio in corso... <img src="images/ajax-loader.gif" width="16" height="16">';
   }
}

//controllo il tipo di richiesta HTTP
function GetXmlHttpObject()
{
   if (window.XMLHttpRequest)
   {
      //tutti gli altri browser IE7+, Firefox, Chrome, Opera, Safari
      return new XMLHttpRequest();
   }
   if (window.ActiveXObject)
   {
      //per i browser IE6, IE5
      return new ActiveXObject("Microsoft.XMLHTTP");
   }
   return null;
}
inviato 7 anni fa
Nando
X 0 X

Il codice html dov'è?

Per una guida di ajax basta fai una ricerca sul web, ce ne sono tante.

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Eccolo

<table border="0" align="center" cellspacing="0" cellpadding="2">
        <form name="modifica_riparazione">
        <input type="hidden" name="idriparazione" value="<?=$_GET['idriparazione']?>">
        <input type="hidden" name="idapparato" value="<?=$_GET['idapparato']?>">
        <input type="hidden" name="stato" value="<?=$_GET['stato']?>">
        <tr>
         <td width="100"><b>Stato</b></td>
         <td width="300">
          <select name="stato_riparaz" class="textbox">
           <option value="1">Aperto</option>
           <option value="0">Completato</option>
          </select>
         </td>
        </tr>
        <tr>
         <td><b>Data riparazione</b></td>
         <td valign="middle"><input class="textbox" type="text" name="data_riparazione" value="<?=$record['data_riparazione']?>" /> &nbsp;(gg/mm/aaaa)</td>
        </tr>
        <tr>
         <td><b>Tecnico</b></td>
         <td><input class="textbox" type="text" name="tecnico" value="<?=$record['tecnico']?>" />
         </td>
        </tr>
          <tr>
           <td><b>Guasto</b></td>
           <td><textarea name="guasto" class="bigtext"><?=$record['guasto']?></textarea></td>
          </tr>
          <tr>
           <td><b>Soluzione</b></td>
           <td><textarea name="soluzione" class="bigtext"><?=$record['soluzione']?></textarea></td>
          </tr>
         <tr>
          <td colspan="2" width="400"><img src="images/dotpix.gif" width="1" height="15"></td>
         </tr>
         <tr>
          <td colspan="2" width="400" align="center"><div id="txtHint"><input class="button" type="button" name="modifica" value="Modifica" onClick="modif_scheda_riparazione()" /></div></td>
         </tr>
          </form>
         </table>
risposto 7 anni fa
Nando
X 0 X

Per una guida ajax vorrei consigliarti questa che mi è piaciuta:

http://antirez.com/articoli/spaghettiajax.html

Qui:

var url="php/riparazioni/modifica_riparazione.php";

url = url+"?id_riparazione="+id_riparazione+"&id_apparato="+id_apparato+"stato="+stato;

Sei sicuro che crea l'indirizzo corretto alla pagina modifica_riparazione.php?

Se si puoi far vedere un pezzo di codice di questa pagina php a vedere come preleva i dati?

risposto 7 anni fa
Mario Santagiuliana
X 0 X
  $stato = ($_POST['stato'] == '1') ? 'aperte' : 'chiuse';
$idriparazione = $_POST['idriparazione'];
$idapparato = $_POST['idapparato'];
$stato_riparaz = $_POST['stato_riparaz'];
$data_riparazione = $_POST['data_riparazione'];
$tecnico = trim($_POST['tecnico']);
$guasto = trim($_POST['guasto']);
$soluzione = trim($_POST['soluzione']);

$sql = "UPDATE t_riparazioni SET data_riparazione = '$data_riparazione',tecnico = '$tecnico',guasto = '$guasto',soluzione = '$soluzione',stato = '$stato_riparaz'   WHERE id_riparazione = '$idriparazione';";

mssql_query($sql) or die("Errore nel codice della query.");
mssql_close($connessione);
risposto 7 anni fa
Nando
X 0 X

Per forza non funziona, nel tuo script php prelevi i dati tramite array POST ma nel tuo script ajax li invii tramite array GET.  ;D

Fai le dovute correzioni a seconda delle tue prefereze.

 :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Cavoloooooo è vero  :wallbash:

pensavo di averlo modificato, mi scuso tanto se ho aperto inutilmente questo thread e per averi fatto perdere del tempo.  :-[

Grazie.

 :bye:

risposto 7 anni fa
Nando
X 0 X

Ho modificato tutte le stringhe in GET ma niente da fare, continua a non aggiornare...

risposto 7 anni fa
Nando
X 0 X

Non restituisce errori?

Non puoi fornire qualche elemento in più di riflessione?

Il codice anche?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Nenache un errore, cos'altro ti può servire. Posso mandarti le pagine per intero se vuoi.

Mi sono fatto stampare la querystring per intero e cìè tutto, ma allora perché non mi aggiorna il db ? :'(

Il bello è che su un altro script ajax l'unica differenza è che faccio una richiesta di SELECT, funziona perfettamente.

risposto 7 anni fa
Nando
modificato 7 anni fa
X 0 X

Puoi farci vedere la querystring?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Ti posto tutte le pagine modificate:

file ajax

var xmlhttp;

function modif_scheda_riparazione()

{

   xmlhttp = GetXmlHttpObject();

   

   if (xmlhttp==null)

   {

      alert ("Il Browser non supporta HTTP Request");

      return;

   }

  var id_riparazione = document.forms['modifica_riparazione'].elements["idriparazione"].value;

  var id_apparato = document.forms['modifica_riparazione'].elements["idapparato"].value;

  var data_riparazione = document.forms['modifica_riparazione'].elements["data_riparazione"].value;

  var tecnico = document.forms['modifica_riparazione'].elements["tecnico"].value;

  var guasto = document.forms['modifica_riparazione'].elements["guasto"].value;

  var soluzione = document.forms['modifica_riparazione'].elements["soluzione"].value;    

  var url = "php/riparazioni/modifica_riparazione.php";   

   

  url = url+"?id_riparazione="+id_riparazione+"&id_apparato="+id_apparato+"&data_riparazione="+data_riparazione+"&tecnico="+tecnico+"&guasto="+guasto+"&soluzione="+soluzione;   

   xmlhttp.onreadystatechange = stateChanged;

   xmlhttp.open("GET",url,true);

   xmlhttp.send(null);

}

function stateChanged()

{

   if (xmlhttp.readyState == 4)

   {

      window.location = "index.php?section=stato_riparazioni_aperte";        

   } else {

      document.getElementById("txtHint").innerHTML = 'Salvataggio in corso... <img src="images/ajax-loader.gif" width="16" height="16">';

   }

}

//controllo il tipo di richiesta HTTP

function GetXmlHttpObject()

{

   if (window.XMLHttpRequest)

   {

      //tutti gli altri browser IE7+, Firefox, Chrome, Opera, Safari

      return new XMLHttpRequest();

   }

   if (window.ActiveXObject)

   {

      //per i browser IE6, IE5

      return new ActiveXObject("Microsoft.XMLHTTP");

   }

   return null;

}

pagina html

<table border="0" align="center" cellspacing="0" cellpadding="2">
         <form name="modifica_riparazione">
         <input type="hidden" name="idriparazione" value="<?=$_GET['idriparazione']?>">
        <input type="hidden" name="idapparato" value="<?=$_GET['idapparato']?>">
        <tr>
         <td><b>Data riparazione</b></td>
         <td valign="middle"><input class="textbox" type="text" name="data_riparazione" value="<?=$record['data_riparazione']?>" /> &nbsp;(gg/mm/aaaa)</td>
        </tr>
        <tr>
         <td><b>Tecnico</b></td>
         <td><input class="textbox" type="text" name="tecnico" value="<?=$record['tecnico']?>" />
         </td>
        </tr>
          <tr>
           <td><b>Guasto</b></td>
           <td><textarea name="guasto" class="bigtext"><?=$record['guasto']?></textarea></td>
          </tr>
          <tr>
           <td><b>Soluzione</b></td>
           <td><textarea name="soluzione" class="bigtext"><?=$record['soluzione']?></textarea></td>
          </tr>
         <tr>
          <td colspan="2" width="400"><img src="images/dotpix.gif" width="1" height="15"></td>
         </tr>
         <tr>
          <td colspan="2" width="400" align="center"><div id="txtHint"><input class="button" type="button" name="modifica" value="Modifica" onClick="modif_scheda_riparazione()" /></div></td>
         </tr>
          </form>

pagina .php che dovrebbe salvare i dati sul db

<?php

     include ("../../inc/connessione.php");

     

     $stato = ($_GET['stato'] == '1') ? 'aperte' : 'chiuse';

     $idriparazione = $_GET['idriparazione'];

     $idapparato = $_GET['idapparato'];

     $data_riparazione = $_GET['data_riparazione'];

     $tecnico = trim($_GET['tecnico']);

     $guasto = trim($_GET['guasto']);

     $soluzione = trim($_GET['soluzione']);

          $sql = "UPDATE t_riparazioni SET

         data_riparazione = '$data_riparazione',

         tecnico = '$tecnico',

         guasto = '$guasto',

         soluzione = '$soluzione'

         WHERE id_riparazione = '$idriparazione'

      ;";

     mssql_query($sql) or die("Errore nel codice della query.");

     mssql_close($connessione);

?>
risposto 7 anni fa
Nando
X 0 X

Ok...

La query che viene generata puoi farla vedere?

Puoi fare un echo della variabile $sql?

Inoltre non occorre che metti il ";" finale alla query...credo...o con SQL Server è necessario?

risposto 7 anni fa
Mario Santagiuliana
modificato 7 anni fa
X 0 X

ho inserito del testo di prova nel campo soluzione ed ecco cosa mi restituisce:

UPDATE t_riparazioni SET data_riparazione = '', tecnico = '', guasto = '', soluzione = 'aaa', stato = '' WHERE id_riparazione = ''

non vede tutti gli altri campi precompilati.  :'(

risposto 7 anni fa
Nando
X 0 X

Lavora correttamente no?

Se non inserisci qualcosa in tutti i campi ovviamente le variabili restano vuote...tu hai detto di aver compilato solamente "soluzione" e non gli altri...

Dove sta il problema?

P.S. la variabile $record da dove la tiri fuori?

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Tutti i campi ad eccezione di soluzione vengono precompilati dal db al momento dell'apertura della scheda in fase di modifica.

Se faccio stampare la querystring ad ajax, vedo tutti i valori passati nella form, perché non vengono passati al file php ??

risposto 7 anni fa
Nando
X 0 X
Se faccio stampare la querystring ad ajax, vedo tutti i valori passati nella form, perché non vengono passati al file php ??

Puoi far vedere l'url che viene generato da ajax dopo aver inviato la richiesta?

Puoi fare vedere il codice html generato dal server? (solo la parte del form)

risposto 7 anni fa
Mario Santagiuliana
X 0 X

Rettifico, sbagli a nominare le variabili, tu le passi così:

url = url+"?id_riparazione="+id_riparazione+"&id_apparato="+id_apparato+"&data_riparazione="+data_riparazione+"&tecnico="+tecnico+"&guasto="+guasto+"&soluzione="+soluzione;

e nel php le chiami così:

  $stato = ($_GET['stato'] == '1') ? 'aperte' : 'chiuse';
  $idriparazione = $_GET['idriparazione'];
  $idapparato = $_GET['idapparato'];
  $data_riparazione = $_GET['data_riparazione'];
  $tecnico = trim($_GET['tecnico']);
  $guasto = trim($_GET['guasto']);
  $soluzione = trim($_GET['soluzione']);

Le devi chiamare così invece:

  $stato = ($_GET['stato'] == '1') ? 'aperte' : 'chiuse';
  $idriparazione = $_GET['id_riparazione'];
  $idapparato = $_GET['id_apparato'];
  $data_riparazione = $_GET['data_riparazione'];
  $tecnico = trim($_GET['tecnico']);
  $guasto = trim($_GET['guasto']);
  $soluzione = trim($_GET['soluzione']);
risposto 7 anni fa
Mario Santagiuliana
X 0 X

Cavolo è vero, adesso funziona. Mi devo essere incasinato con tutte queste variabili.

Grazie tante

 :bye:

risposto 7 anni fa
Nando
X 0 X

Niente  :bye: :bye:

risposto 7 anni fa
Mario Santagiuliana
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda