2017-01-11 4 views
-2

この質問に答えようとしたStackOverflowを含むいくつかのWebサイトがあります。しかし、私はそれらを理解していません。私は誰かが私が間違っていることを私に見せて、非常に簡単な言葉でそれを説明することを望んでいます...私が理解するために。アンカータグからjavascript関数を実行するにはどうすればよいですか?

タグから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> 

'すべてのメンバーの地図は' 素晴らしい作品が、 'ICS214は' 失敗:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND logdate = (SELECT min(logdate) FROM NetLog WHERE netID =)' at line 8' in /var/www/html/sbr/ics214.php:24 Stack trace: #0 /var/www/html/sbr/ics214.php(24): PDO->query('SELECT min(logd...') #1 {main} thrown in /var/www/html/sbr/ics214.php on line 24

私の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];}; 
    } 
?> 
+5

'あなたはSQL構文にエラーがあります.' - これはjavascriptエラーではなく、' ics214() 'を間違っていない形で実行しています...エラーは' ics214.php'にありますあなたは –

+1

を表示することを怠っており、この –

+1

のためのphpは@JaromandaXが簡単な言葉で言ったように、あなたは ''ics214()'というjavascript関数を持っています。あなたが 'ICS214'リンクをクリックすると、この関数が起動し、この関数で' ics214.php'ファイルへの 'ajax'呼び出しがあります。あなたの 'html'の' select1'要素の値を 'q'という名前のパラメータを' ics214.php'ファイルに送ります。今度はJavaScriptのこの行で 'document.getElementById(" netBody ")。innerHTML = xmlhttp.responseText;'あなたの 'php'ファイルの応答を表示しています。エラーがあるので、そのエラーが表示されます。 – EhsanT

答えて

1

本当に$ q値が実際の値に解決されていますか?それはそうではないように見えます。 SQLエラーのフィードバックでは、 'and SELECT .. ... netID ='の近くの構文にエラーがあり、空に見えます。 $ qが空の場合(値はスタックトレースのnetIDの後に表示されます)、AND句の前に空になります。つまり、あなたのSQLは WHERE netID = AND SELECT ...という構文になります。その構文は失敗します。

アップデート:私はあなたがあなたの$ _GET配列から「NETID」を見つけようとしてあなたのjavascript xmlhttp.open("GET","ics214.php?q="+str,true);

からではなく、あなたのPHPでのq値を提出していることに気づきました。

$q = $_GET["NetID"]; 

おそらく、jsのqをNetIDに変更するか、その逆にする必要があります。

+0

テストのためにq値をSQLにハードコードしました。つまり、私がしなければならないことは、PHPを実行する関数を呼び出すことだけです。これは機能します。だからあなたは正しいです、それはJavaScriptの関数からqの値を取得していません。なぜ疑問だ。他のリンクからアンカータグなしで呼び出すのと同じ関数です。 –

+0

hrefでPHPダイレクトを呼び出すことは可能でしょうか?しかし、私はqの価値を知る必要があります。だから私は

関連する問題