Из-за того, что один агент хотел, чтобы его URL-адрес веб-сайта о функциях, которые я работал месяц назад, мне пришлось внести некоторые незначительные изменения. У меня есть две функциональные PHP-страницы, которые запускают очень похожий скрипт, но мне пришлось сделать два набора из двух наборов значений. То, что они эхо на странице с AJAX, точно такое же, и это то, где он становится немного странным …
Первый скрипт, который я сделал, был успешным, но мне нужно было сделать if elseif else
поэтому у каждого агента не было ссылки, которая не была там. После возиться с этим заявлением я смог получить только одного агента, чтобы там был URL его веб-сайта. Как только я это сделал, у меня сложилось впечатление, что оттуда будет плавно сглаживаться … не было …
Я использовал то же самое утверждение для обоих своих скриптов, и только одно работает. Единственное, что отличается от них, – это то, какую ценность он получает, и что я использую JavaScript + AJAX для первого (что работает), а затем решил изучить jQuery + AJAX, чтобы сделать следующий. До этого все они работали, и это точный код для обоих, кроме использования JavaScript / jQuery (который является одним и тем же языком), и один использует GET
а другой использует POST
Я также не получаю никаких ошибок или ничего, пока функция работает. Имя агента – Сэм Фиорентино, единственное, у кого есть URL-адрес веб-сайта. Я вошел в консоль для второго поиска, переключателей, и он показывает название компании за пределами привязанного тега, который является корнем проблемы. Зачем правильно отображать его, а другой нет?
Первый PHP (Works)
while ($stmt->fetch()) { // Gets results from the database echo "<div class='agentcon'>" . "<span class='agentn'>" . "<strong>". $First_Name . " " . $Last_Name . " " . $Suffix . "</strong>" . "</span>" . "<a href=mailto:".$Email . ">" . "<span class='email'>" . "Send an e-mail to" . " " . $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>"; }
Второй PHP (не работает)
while ($stmt->fetch()) { // Gets results from the database echo "<div class='agentcon'>" . "<span class='agentn'>" . "<strong>".$First_Name . " " .$Last_Name . " " . $Suffix . "</strong>" . "</span>" . "<a href=mailto:".$Email . ">" . "<span class='email'>" . "Send an e-mail to" . " " .$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 (второй / не работает)
$('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); } }); });
Есть идеи? Вся помощь будет принята с благодарностью, и если вам нужно больше кода, просто дайте мне знать!
Это также единственный раз, когда я когда-либо использовал PHP так голый со мной!
Живой сайт
"<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>
.
Причина, по которой первый работает, а второй – нет:
innerHTML
позволяет браузеру интерпретировать html. $(...)
интерпретируется 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>"); });
Вы можете видеть, что они разные.