如何从锚标签运行javascript函数?

时间:2017-01-11 03:38:33

标签: javascript php html mysql

有很多网站包括StackOverflow试图回答这个问题。但我不明白他们。我希望有人可以告诉我我做错了什么,并用非常简单的词语解释......让我理解。

如何从标签中执行我的javascript函数?

我有这个HTML:

<span class="dropdown">
    <span class="dropbtn">Reports &nbsp;||&nbsp;</span>
    <div class="dropdown-content">
        <a href="NCMMaps.php" target="_blank">Map All Members</a>
        <a href="#" onclick="ics214(); return false;">ICS214</a>
    </div>
</span>

'Map All Members'工作得很好,但是'ICS214'失败了,出现了这个错误:

  

致命错误:带有消息的未捕获异常'PDOException'   'SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   在'AND logdate =附近使用正确语法的MySQL服务器版本   (在第8行'中选择min(logdate)FROM NetLog WHERE netID =)'   /var/www/html/sbr/ics214.php:24堆栈跟踪:#0   /var/www/html/sbr/ics214.php(24):PDO-&gt;查询('SELECT min(logd ...')#1   {main}在第24行的/var/www/html/sbr/ics214.php中抛出

我的Javascript看起来像这样;

function ics214() {
    var str = document.getElementById("select1").value;
    xmlhttp.onreadystatechange = function() {  
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("netBody").innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","ics214.php?q="+str,true);
    xmlhttp.send();
}

下面是php / MySQL部分。但它运行良好并产生我需要的报告。我在这里看不到错误。但也许我传递'Q'值的方式是错误?

<?php

    ini_set('display_errors',1); 
    error_reporting (E_ALL ^ E_NOTICE);

    require_once "dbConnectDtls.php";

    $q = $_GET["NetID"]; 

    $sql1 = ("SELECT min(logdate) AS minlog, 
                     DATE(min(logdate)) AS indate, 
                     TIME(min(logdate)) AS intime, 
                     DATE(max(timeout)) AS outdate, 
                     TIME(max(timeout)) AS outtime, 
                     activity, fname, lname, netcontrol, callsign 
              FROM NetLog 
              WHERE netID = $q AND logdate = (SELECT min(logdate) 
                FROM NetLog 
                WHERE netID = $q ) ");
    foreach($db_found->query($sql1) as $row) {

        $fname  = $row[fname];  $lname   = $row[lname];     $activity = $row[activity];
        $indate = $row[indate]; $outdate = $row[outdate];   $netcntl = $row[callsign];
        $intime = $row[intime]; $outtime = $row[outtime];
            if ($row[netcontrol] == "PRM") {$netcontrol = "Net Control Operator"; $netopener = $row[callsign];};
    }
?>

1 个答案:

答案 0 :(得分:1)

您确定$ q值是否正在解析为实际值?它看起来可能不是。在SQL错误反馈中,它表示在'和SELECT .. ... netID ='附近的语法中有一个错误,它看起来是空的。如果$ q为空(值应在netID之后的堆栈跟踪上显示),它将在AND子句之前为空。这意味着您的SQL现在将成为 WHERE netID = AND SELECT ...语法失败。

更新:我注意到您正在从javascript中提交q值  xmlhttp.open("GET","ics214.php?q="+str,true);

但是在你的PHP中你试图从$ _GET数组中找到'NetID'。

$q = $_GET["NetID"]; 

也许您应该将js中的q更改为NetID,反之亦然。