我正在开发一个在浏览器中运行的基于小表的软件。
我需要添加一个搜索栏,我可以使用JQuery .load( )使用表和正确的MySQL SELECT指令加载一个PHP文件,对应于用户文本输入。
但是,当我这样做时,更新行数据的所有表单都变为空(用JQuery检查.serialize ())并且它们不向POST发送任何内容。
这是主PHP文件的代码,其中包含表:https://expirebox.com/download/e70d6f84dd7964c16ff20bcf6ffababd.html
这是以前PHP页面的JS代码:
var vistaF = true;
$(document).keydown(function(event)
{
if (event.which==70)
{
if (vistaF)
{
$("th, td").css("border", "none");
vistaF = false;
}
else
{
$("th, td").css("border", "1px solid grey");
vistaF = true;
}
}
});
function controllaContesto(id)
{
if (id=="r")
{
var ricerca = "ricerca-";
id = "";
}
else
{
var ricerca = "";
id = "-"+id;
}
if ($("#"+ricerca+"contesto"+id+" option:selected").text()=="fiera")
{
$("#contenitore-"+ricerca+"fiera"+id).css("display", "inline");
}
else
{
if ((inizio || $("#contenitore-"+ricerca+"fiera"+id).attr("style")=="display: inline;") && $("#contenitore-"+ricerca+"fiera"+id).val()!=undefined)
{
$("#contenitore-"+ricerca+"fiera"+id).css("display", "none");
}
}
}
function ricerca()
{
var cerca = $("#ricerca input[type='text']").val();
var accessoDb = true;
if ($("#opzioniAvanzate").css("display")=="none")
{
var ricercaIntelligente = 1;
}
else
{
var ricercaIntelligente = 0;
}
var opzioni = new Array();
$("input[name='campo-cerca']:checked").each(function(){opzioni.push(this.value);});
if (opzioni[0]==undefined)
{
opzioni[0] = 0;
}
var filtri = new Array();
filtri[0] = $("#ricerca-listino").val();
filtri[1] = $("#ricerca-contesto").val();
filtri[2] = $("#ricerca-fiera").val();
filtri[3] = $("#ricerca-utente").val();
if (accessoDb)
{
accessoDb = false;
setTimeout(function(){$("table").load("ricerca-risposte.php", {cerca: cerca, ricercaIntelligente: ricercaIntelligente, opzioni: opzioni, filtri: filtri});}, 500);
inizio = true;
setTimeout(function(){accessoDb = true;}, 2000);
}
}
function mostraOpzioniAvanzate()
{
if ($("#opzioniAvanzate").css("display")=="none")
{
$("#opzioniAvanzate").css("display", "block");
}
else
{
$("#opzioniAvanzate").css("display", "none");
$("#opzioniAvanzate").children("input[type='checkbox']").each(function()
{
if ($(this).attr("id")=="radio-cliente")
{
if ($(this).prop("checked")==false)
{
$(this).prop("checked", true);
ricerca();
}
}
else
{
if ($(this).prop("checked")==true)
{
$(this).prop("checked", false);
ricerca();
}
}
});
$("#opzioniAvanzate").children("select").each(function()
{
if ($(this).val()!=0)
{
$("#"+$(this).attr("id")+" option:eq(0)").prop("selected", true);
ricerca();
}
});
if ($("#ricerca-fiera").val()!=0)
{
$("#ricerca-fiera option:eq(0)").prop("selected", true);
controllaContesto("r");
}
}
}
function comandiTestoSI(id, risolto)
{
$("#sfondoTestoSI").mousedown(function(event)
{
if (event.which==1)
{
$("#testoSI").css("display", "none");
$("#sfondoTestoSI").css("display", "none");
$("table").removeClass("sfuocato");
if (!risolto && $("#testoSI").val().trim()!="" && $("#testo-"+id).html()!=$("#testoSI").val())
{
var temp = $("#testoSI").val();
$("#testo-"+id).html(temp);
var lunghezzaMax = 100;
var limite = 0;
if (temp.length>lunghezzaMax)
{
limite = lunghezzaMax;
}
var posTemp = temp.indexOf("\n");
if (posTemp!=-1)
{
posTemp = temp.indexOf("\n", posTemp+1);
if (posTemp!=-1)
{
limite = posTemp+5;
}
temp = temp.replace("\n", "<br />");
}
if (limite==0)
{
$("#"+id).html(temp);
}
else
{
$("#"+id).html(temp.substr(0, limite)+"...");
}
}
}
});
}
function chiamaTestoSI(id, risolto)
{
$("#testoSI").css("display", "block");
$("#sfondoTestoSI").css("display", "block");
if (risolto)
{
$("#testoSI").attr("readonly", "readonly");
}
else if ($("#testoSI").attr("readonly")=="readonly")
{
$("#testoSI").removeAttr("readonly");
}
$("table").attr("class", "sfuocato");
$("#testoSI").val($("#testo-"+id).html());
comandiTestoSI(id, risolto);
}
$(document).ready(function()
{
for (index=0; index<id.length; index++)
{
controllaContesto(id[index]);
}
controllaContesto("r");
inizio = false;
$("#ricerca input[type='text']").on("keyup input", function()
{
ricerca();
});
$("#ricerca button").click(function()
{
if (!$("#ricerca input[type='text']").val().trim()=="")
{
ricerca();
}
});
$("#opzioniAvanzate input").change(ricerca);
$("#opzioniAvanzate select").change(ricerca);
});
最后但并非最不重要的是,这里是使用来自ricerca()函数的JQuery .load()调用的文件的PHP代码:
<?php
require('lib/php/dbManager.php');
require('lib/php/dbConfig.php');
require('lib/php/dbQuery.php');
$db_risposte = new dbManager(host, user, password, dbName);
$mostra = false;
$cerca = $_POST['cerca'];
$ricercaIntelligente = $_POST['ricercaIntelligente'];
$opzioni = $_POST['opzioni'];
$filtri = $_POST['filtri'];
$db_risposte->run('SELECT id, nome FROM contesti');
while($val = $db_risposte->get())
{
$contesti['id'][] = $val['id'];
$contesti['nome'][] = $val['nome'];
}
$db_risposte->run('SELECT id, nome FROM fiere');
while($val = $db_risposte->get())
{
$fiere['id'][] = $val['id'];
$fiere['nome'][] = $val['nome'];
}
if ($ricercaIntelligente==1)
{
function ricercaIntelligente($filtro, $numFiltro)
{
global $filtri, $cerca;
for ($indice=0; $indice<count($filtro); $indice++)
{
if (strpos(strtolower($filtro['nome'][$indice]), strtolower($cerca))!==false)
{
$filtri[$numFiltro] = $filtro['id'][$indice];
$cerca = '';
return true;
break;
}
}
return false;
}
if (strlen($cerca)>2)
{
if (!ricercaIntelligente($contesti, 1))
{
ricercaIntelligente($fiere, 2);
}
}
}
function scriviQuery($cerca, $opzioni, $filtri)
{
function tempFunz($tabella, $valore, &$primo, $colonna)
{
global $db_risposte;
$parteQuery = '';
$db_risposte->run('SELECT id FROM '.$tabella.' ORDER BY id DESC LIMIT 0,1');
while($val = $db_risposte->get())
{
$maxIndice = $val['id'];
}
for ($indice=1; $indice<=$maxIndice; $indice++)
{
if ($valore==$indice)
{
if ($primo)
{
$parteQuery .= ' WHERE IF (risposte.'.$colonna.'=\'0\', richieste.'.$colonna.', risposte.'.$colonna.')=\''.$indice.'\'';
$primo = false;
}
else
{
$parteQuery .= ' AND IF (risposte.'.$colonna.'=\'0\', richieste.'.$colonna.', risposte.'.$colonna.')=\''.$indice.'\'';
}
break;
}
}
return $parteQuery;
}
$query = 'SELECT * FROM richieste INNER JOIN risposte ON richieste.id = risposte.id';
$primo = true;
for ($indice=0; $indice<count($opzioni); $indice++)
{
switch (true)
{
case ($opzioni[$indice]==1):
if ($primo)
{
$query .= ' WHERE richieste.cliente LIKE \'%'.$cerca.'%\'';
$primo = false;
}
else
{
$query .= ' AND richieste.cliente LIKE \'%'.$cerca.'%\'';
}
break;
case ($opzioni[$indice]==2):
if ($primo)
{
$query .= ' WHERE IF (risposte.fattura=\'0\', richieste.fattura, risposte.fattura) LIKE \'%'.$cerca.'%\'';
$primo = false;
}
else
{
$query .= ' AND IF (risposte.fattura=\'0\', richieste.fattura, risposte.fattura) LIKE \'%'.$cerca.'%\'';
}
break;
case ($opzioni[$indice]==3):
if ($primo)
{
$query .= ' WHERE risposte.causale LIKE \'%'.$cerca.'%\'';
$primo = false;
}
else
{
$query .= ' AND risposte.causale LIKE \'%'.$cerca.'%\'';
}
break;
case ($opzioni[$indice]==4):
if ($primo)
{
$query .= ' WHERE risposte.oggetto LIKE \'%'.$cerca.'%\'';
$primo = false;
}
else
{
$query .= ' AND risposte.oggetto LIKE \'%'.$cerca.'%\'';
}
break;
}
}
if ($filtri[0]!=0)
{
$query .= tempFunz('listini', $filtri[0], $primo, 'listino');
}
if ($filtri[1]!=0)
{
$query .= tempFunz('contesti', $filtri[1], $primo, 'contesto');
}
if ($filtri[2]!=0)
{
$query .= tempFunz('fiere', $filtri[2], $primo, 'fiera');
}
if ($filtri[3]!=0)
{
$query .= tempFunz('utenti', $filtri[3], $primo, 'utente');
}
return $query;
}
$query = scriviQuery($cerca, $opzioni, $filtri);
function getDataFromDB()
{
global $db_risposte, $mostra, $id, $data, $fattura, $causale, $oggetto, $listino, $contesto, $fiera, $utente, $risolto, $vistaSingola, $query, $vistaRisolto, $cliente;
$id = array();
$data = array();
$fattura = array();
$causale = array();
$oggetto = array();
$listino = array();
$contesto = array();
$fiera = array();
$utente = array();
$risolto = array();
$db_risposte->run($query);
while($val = $db_risposte->get())
{
$mostra = true;
$id[] = $val['id'];
$data[] = $val['data'];
$fattura[] = $val['fattura'];
$causale[] = $val['causale'];
$oggetto[] = $val['oggetto'];
$listino[] = $val['listino'];
$contesto[] = $val['contesto'];
$fiera[] = $val['fiera'];
$utente[] = $val['utente'];
$risolto[] = $val['risolto'];
}
for ($index=0; $index<count($id); $index++)
{
$query = 'SELECT cliente, fattura, listino, contesto, fiera, utente FROM richieste WHERE id=\''.$id[$index].'\'';
$db_risposte->run($query);
while($val = $db_risposte->get())
{
$cliente[] = $val['cliente'];
if ($fattura[$index]==0)
{
$fattura[$index] = $val['fattura'];
}
if ($listino[$index]==0)
{
$listino[$index] = $val['listino'];
}
if ($contesto[$index]==0)
{
$contesto[$index] = $val['contesto'];
}
if ($contesto[$index]==0)
{
$contesto[$index] = $val['contesto'];
}
if (associaNome('contesti', $contesto[$index])=='fiera' && $fiera[$index]==0)
{
$fiera[$index] = $val['fiera'];
}
if ($utente[$index]==0)
{
$utente[$index] = $val['utente'];
}
}
}
}
getDataFromDB();
function inputTesto($risolto, $val, $nameInput=null)
{
$html = '';
if ($risolto==0)
{
$html .= '<input type="text" name="'.$nameInput.'" value="'.$val.'"/>';
}
else
{
$html .= '<p>'.$val.'</p>';
}
return $html;
}
function anteprimaStringa($stringa, $lunghezza)
{
$limite = strlen($stringa);
$puntini = '';
if (strlen($stringa)>=$lunghezza)
{
$limite = $lunghezza;
$puntini = '...';
}
$posTemp = strpos($stringa, '<br />');
if ($posTemp!==false)
{
$posTemp = strpos($stringa, '<br />', $posTemp+6);
if ($posTemp!==false)
{
$limite = $posTemp;
if ($puntini=='')
{
$puntini = '...';
}
}
}
return substr($stringa, 0, $limite).$puntini;
}
function textarea($risolto, $val, $nameInput=null, $id=null)
{
$html = '';
if ($val=='')
{
$val = 'CLICCAMI PER MODIFICARE!';
}
$html .= '<p id="';
if ($nameInput=='causale')
{
$html .= 'causale';
}
else if ($nameInput=='oggetto')
{
$html .= 'oggetto';
}
$html .= '-'.$id.'" class="anteprima" onclick="javascript:chiamaTestoSI(this.id, ';
if ($risolto==0)
{
$html .= 'false';
}
else
{
$html .= 'true';
}
$html .= ')">';
$html .= anteprimaStringa($val, 97);
$html .= '</p>';
$html .= '<textarea id="testo-';
if ($nameInput=='causale')
{
$html .= 'causale';
}
else if ($nameInput=='oggetto')
{
$html .= 'oggetto';
}
$html .= '-'.$id.'" name="'.$nameInput.'" style="display: none;" >'.str_replace('<br />', '', $val).'</textarea>';
return $html;
}
function associaNome($nomeTabella, $id)
{
global $db_risposte;
$nome = '';
$query = 'SELECT nome FROM '.$nomeTabella.' WHERE id=\''.$id.'\'';
$db_risposte->run($query);
while($val = $db_risposte->get())
{
$nome .= $val['nome'];
}
return $nome;
}
function opzioni($risolto, $nomeTabella, $selected, $nameSelect=null, $idSelect=null, $onchangeJS=null)
{
global $db_risposte;
$html = '';
if ($idSelect===null)
{
$idSelect = '';
}
if ($onchangeJS===null)
{
$onchangeJS = '';
}
if ($risolto==0)
{
if ($nomeTabella=='fiere')
{
$html .= '<span id="contenitore-'.$idSelect.'">: ';
}
$html .= '<select name="'.$nameSelect.'"';
if ($idSelect!='')
{
$html .= ' id="'.$idSelect.'"';
}
if ($onchangeJS!='')
{
$html .= ' onchange="javascript:'.$onchangeJS.'"';
}
$html .= '>';
$query = 'SELECT id FROM '.$nomeTabella.' ORDER BY id DESC LIMIT 0,1';
$db_risposte->run($query);
while($val = $db_risposte->get())
{
$idMax = $val['id'];
}
for ($index=1; $index<=$idMax; $index++)
{
$html .= '<option value="'.$index.'"';
if ($index==$selected)
{
$html .= ' selected';
}
$html .= '>';
$html .= associaNome($nomeTabella, $index);
$html .= '</option>';
}
$html .= '</select>';
if ($nomeTabella=='fiere')
{
$html .= '</span>';
}
}
else
{
switch(true)
{
case($nomeTabella=='contesti' && associaNome($nomeTabella, $selected)=='fiera'):
$html .= '<p>';
$html .= associaNome($nomeTabella, $selected);
$html .= ': ';
break;
case($nomeTabella=='fiere'):
$html .= associaNome($nomeTabella, $selected);
$html .= '</p>';
break;
default:
$html .= '<p>';
$html .= associaNome($nomeTabella, $selected);
$html .= '</p>';
break;
}
}
return $html;
}
?>
<table>
<tr>
<th><h1>id</h1></th>
<th><h1>data</h1></th>
<th><h1>cliente</h1></th>
<th><h1>fattura</h1></th>
<th><h1>causale</h1></th>
<th><h1>oggetto</h1></th>
<th><h1>listino</h1></th>
<th><h1>contesto</h1></th>
<th><h1>utente</h1></th>
<th><h1>risolto</h1></th>
<th></th>
</tr>
<?php
if ($mostra)
{
for ($index=0; $index<count($id); $index++)
{
if ($risolto[$index]=='1')
{
$classe = 'class="risolto"';
}
else
{
$classe = '';
}
?>
<tr id="<?php echo($id[$index]) ?>" <?php echo($classe) ?>>
<form action="risposte.php?id=<?php echo($id[$index]); ?>" method="post">
<input name="id" type="hidden" value="<?php echo($id[$index]) ?>"/>
<th><p><?php echo($id[$index]); ?></p></th>
<th><p><?php if ($data[$index]!='0000-00-00 00:00:00'){echo(date("m/d/Y H:i:s", strtotime($data[$index])));} else {echo('00/00/0000 00:00:00');} ?></p></th>
<th><p><?php echo($cliente[$index]); ?></p></th>
<th><?php echo(inputTesto($risolto[$index], $fattura[$index], 'fattura')); ?></th>
<th><?php echo(textarea($risolto[$index], $causale[$index], 'causale', $id[$index])); ?></th>
<th><?php echo(textarea($risolto[$index], $oggetto[$index], 'oggetto', $id[$index])); ?></th>
<th>
<?php echo(opzioni($risolto[$index], 'listini', $listino[$index], 'listino')); ?>
</th>
<th>
<?php echo(opzioni($risolto[$index], 'contesti', $contesto[$index], 'contesto', 'contesto-'.$id[$index], 'controllaContesto('.$id[$index].')')); echo(opzioni($risolto[$index], 'fiere', $fiera[$index], 'fiera', 'fiera-'.$id[$index])); ?>
</th>
<th>
<?php echo(opzioni($risolto[$index], 'utenti', $utente[$index], 'utente')); ?>
</th>
<?php
if ($risolto[$index]=='1')
{
?>
<th><p>sì</p></th>
<th></th>
<?php
}
else
{
?>
<th><input name="risolto" type="checkbox" value="s"/></th>
<th><input type="submit" value="AGGIORNA"/></th>
<?php
}
?>
</form>
</tr>
<?php
}
}
?>
</table>
答案 0 :(得分:0)
我要感谢所有人让我自己找到答案。
我做到了:我解决了问题,但我仍然不知道是什么造成了这个问题。
显然使用JQuery .load()会让浏览器对我的表单内部和内部的内容感到困惑。因此,我利用了新的HTML5属性,将表单元素连接到特定的表单ID。
HTML form Attribute - W3Schools
现在一切正常工作。
我唯一的问题这就是为什么问题是由JQuery方法创建的,为什么在使用AJAX加载函数之前我不需要form属性?