加载JQuery .load()时PHP表单不起作用

时间:2017-11-16 12:56:37

标签: php jquery ajax forms post


我正在开发一个在浏览器中运行的基于小表的软件。

我需要添加一个搜索栏,我可以使用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>

请帮助我。
非常感谢你。

1 个答案:

答案 0 :(得分:0)

我要感谢所有人让我自己找到答案。
我做到了:我解决了问题,但我仍然不知道是什么造成了这个问题。

显然使用JQuery .load()会让浏览器对我的表单内部和内部的内容感到困惑。因此,我利用了新的HTML5属性,将表单元素连接到特定的表单ID。
HTML form Attribute - W3Schools

现在一切正常工作。
我唯一的问题这就是为什么问题是由JQuery方法创建的,为什么在使用AJAX加载函数之前我不需要form属性?