1

あるエージェントが、私が 1 か月前に取り組んだ機能について彼の Web サイトの URL を要求したため、最終的にいくつかの小さな変更を加える必要がありました。非常によく似たスクリプトを実行する 2 つの関数 PHP ページがありますが、2 つの値セットに基づいて 2 つを作成する必要がありました。AJAX を使用してページにエコーする内容はまったく同じで、ここで少し奇妙になります...

私が行った最初のスクリプトは成功しましたが、if elseif elseすべてのエージェントがどこにも行かないリンクを持たないように声明を出す必要がありました。このステートメントをいじった後、私は 1 人のエージェントに彼の Web サイトの URL をそこに載せてもらうことができました。それができたら、そこからの航海はスムーズになるだろうという印象を受けました..そうではありませんでした...

私は両方のスクリプトにまったく同じステートメントを使用しましたが、作品は 1 つだけです。それらとの唯一の違いは、それが受け取っている価値と、最初のものに JavaScript + AJAX を使用し (どちらが機能するか)、次に jQuery + AJAX を学習して次のものを行うことにしたことです。これより前は、それらはすべて機能していました。これは、JavaScript/jQuery (同じ言語) の使用以外の両方の正確なコードであり、一方が使用GETしている間に他方が使用しています。POST

関数の実行中にエラーも何も発生しません。エージェントの名前は Sam Fiorentino で、ウェブサイトの URL を持つ唯一のエージェントです。2 番目の検索であるラジオ ボタンのコンソールに移動すると、問題の原因であるアンカー タグの外側に会社名が表示されます。一方が正しく表示され、もう一方が正しく表示されないのはなぜですか?

最初の PHP (作品)

while ($stmt->fetch()) { // Gets results from the database
                echo "<div class='agentcon'>" . "<span class='agentn'>" . "<strong>". $First_Name . "&nbsp;" . $Last_Name . "&nbsp;" . $Suffix . "</strong>" . "</span>" . "<a href=mailto:".$Email . ">" . "<span class='email'>" . "Send an e-mail to" . "&nbsp;" . $First_Name . "</span>" . "</a>" ."<div class='floathr'></div>";
                if ($Company == NULL) {
                    echo "<p>";
                }
                elseif ($Website == NULL) {
                    echo "<p>" . "<strong>" .$Company . "</strong>" . "<br>";
                }
                else {
                    echo "<p>" . "<strong>" . "<a target='blank' href=" .$Website . ">" .$Company . "</a>" . "</strong>" . "<br>";
                }

2 番目の PHP (動作しません)

while ($stmt->fetch()) { // Gets results from the database
                echo "<div class='agentcon'>" . "<span class='agentn'>" . "<strong>".$First_Name . "&nbsp;" .$Last_Name . "&nbsp;" . $Suffix . "</strong>" . "</span>" . "<a href=mailto:".$Email . ">" . "<span class='email'>" . "Send an e-mail to" . "&nbsp;" .$First_Name . "</span>" . "</a>" ."<div class='floathr'></div>";
                if ($Company == NULL) {
                    echo "<p>";
                }
                elseif ($Website == NULL) {
                    echo "<p>" . "<strong>" .$Company . "</strong>" . "<br>";
                }
                else {
                    echo "<p>" . "<strong>" . "<a target='blank' href=" .$Website . ">" .$Company . "</a>" . "</strong>" . "<br>";
                }

SQL + バインドされたコード(最初/作業用)

$sql="SELECT First_Name, Last_Name, Suffix,  Email, Company, WorkAddress1, WorkCity, WorkStateProvince, WorkZipCode, Work_Phone, Fax, Ancillary, SmallGroup, IndividualPlans, LongTermCare, Medicare, LargeGroup, TPASelfInsured, CertifiedForPPACA, Website FROM `roster` WHERE Last_Name = '".$q."' OR Company = '".$q."' OR WorkCity = '".$q."' OR WorkZipCode = '".$q."' ORDER BY Last_Name ASC";

        if(!$stmt = $con->Prepare($sql))
    { 
        die; 

    }else{
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($First_Name, $Last_Name, $Suffix, $Email, $Company, $WorkAddress1, $WorkCity, $WorkStateProvince, $WorkZipCode, $Work_Phone, $Fax, $Ancillary, $SmallGroup, $IndividualPlans, $LongTermCare, $Medicare, $LargeGroup, $TPASelfInsured, $CertifiedForPPACA, $Website);
        $rows = $stmt->num_rows;

SQL + バインドされたコード(動作しないもの)

$poststr = $_POST['expertise']; //get our post data
    if(count($poststr) > 1){ //count to make sure we have an array
        $expertise = implode(" AND ",$_POST['expertise']); //implode the array using AND as glue
    }
    else{              //otherwise if it is only one no need for implode
        $expertise = implode("",array($poststr));
    }
    //here is our string for prepared statement
    $sql = "SELECT First_Name, Last_Name, Suffix, Email, Company, WorkAddress1, WorkCity, WorkStateProvince, WorkZipCode, Work_Phone, Fax, Ancillary, SmallGroup, IndividualPlans, LongTermCare, Medicare, LargeGroup, TPASelfInsured, CertifiedForPPACA, Website FROM roster WHERE ".$expertise." = 1 ORDER BY Last_Name ASC";

    if(!$stmt = $con->Prepare($sql))
    { 
        die;

    }else{
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($First_Name, $Last_Name, $Suffix, $Email, $Company, $WorkAddress1, $WorkCity, $WorkStateProvince, $WorkZipCode, $Work_Phone, $Fax, $Ancillary, $SmallGroup, $IndividualPlans, $LongTermCare, $Medicare, $LargeGroup, $TPASelfInsured, $CertifiedForPPACA, $Website);
        $rows = $stmt->num_rows;

Javascript + AJAX (最初のもの/作業中のもの)

<script>
function showUser(str)
{
if (str=="")
  {
  document.getElementById("bodyA").innerHTML="";
  return;
  } 
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("bodyA").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","process.php?q="+str,true);
xmlhttp.send();
}
</script>

jQuery + AJAX (2 つ目/動作しない)

$('input').on('click', function() { //Pulls data based on radial input
    var value = $(this).val();
    $.ajax({
        type: 'POST',
        datatype: "html",
        data: {
            expertise: value
        },
        url: "expertise.php",
        success: function (data) {
            $('#bodyA').html(data);
        }
    });
});

何か案が?

ライブサイト

4

1 に答える 1

4
"<a target='blank' href=" .$Website . ">"

これはあなたの問題です: URL を引用符で囲んでいません。次のように出力します。

<a href=http://whatever.com/path>Company</a>

次のような引用符を追加する必要があります。

"<a target='blank' href='" .$Website . "'>"

URLはこんな感じ!

<a target='blank' href=http://www.samfiorentino.com/>Sam Fiorentino & Associates</a>

引用符が必要です。URLの末尾/<a>.


最初のものは機能するが、2番目のものは機能しない理由:

innerHTMLブラウザが html を解釈できるようにします。 $(...)jQuery によって解釈されます。jQuery は、ブラウザーの互換性のためにいくつかの凝った処理を行いますが、欠点がある場合もあります。一部のブラウザーは不適切なマークアップを修正しようとしますが、ブラウザーが不適切な処理を行うこともあります。jQuery は、それらすべてをほとんど同じように動作させます。

比較のために、この jsfiddle を参照してください: http://jsfiddle.net/Rk7SQ/

<p>Browser rendering:</p>
<p><a target='blank' href=http://www.samfiorentino.com/>Sam Fiorentino & Associates</a></p>

<p>jQuery rendering:</p>
<p id="jqrender"></p>

$(function() {
    $('#jqrender').html("<a target='blank' href=http://www.samfiorentino.com/>Sam Fiorentino & Associates</a>");
});

それらが異なることがわかります。

于 2013-09-30T19:09:16.780 に答える