【问题标题】:Connect to PHP MySQL with Javascript from external server从外部服务器使用 Javascript 连接到 PHP MySQL
【发布时间】:2013-03-24 18:32:41
【问题描述】:

好的,问题来了。我有以下 PHP 代码。

    <?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$result = mysqli_query($con,"SELECT * FROM Persons");

echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";

while($row = mysqli_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['FirstName'] . "</td>";
  echo "<td>" . $row['LastName'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysqli_close($con);
?>

我从W3Schools 下来,在数据库所在的服务器上工作正常。但是,我想做的是使用以下 Javascript 在另一个站点上显示它。

    function displaydata()
{
var xmlhttp;
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("datalist").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","phpscripthere.com/myphp.php",true);
xmlhttp.send();
}

上述 javascript 有效,但仅当它位于数据库所在的服务器上时。我需要的是让 Javascript 在另一个位置工作,而 PHP 仍然可以存储在主服务器上。

【问题讨论】:

  • Javascript 有一个跨域策略,可以阻止发送到其他域的请求。您需要启用 CORS 或使用 JSONP 才能使其正常工作。
  • 另外,您可以通过 ajax 调用服务器上的页面,该页面使用 CURL 获取远程页面。
  • 这里应该提醒一下,使用jsonp时会失去安全性,即。没有帖子,所以所有发布的数据都将暴露给用户,中间的所有路由器和网络服务器,每个都记录信息。

标签: php javascript html


【解决方案1】:

请不要将此标记为答案,因为它不是。

但这只是建议。

这是 w3Schools 病毒传播....

$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

在此脚本中,处理继续,即使连接失败

你应该像这样加入更多的失败检查和退出:

if (mysqli_connect_errno())
{
   echo "Failed to connect to MySQL: " . mysqli_connect_error();
   exit(0);
}

你也不知道

$result = mysqli_query($con,"SELECT * FROM Persons");

查询成功。

除了这些陷阱

您应该更好地为页面收集数据并将其编码为 JSON 并发送到客户端。如下所示:

$r = array();
while(true){
    $row = mysqli_fetch_array($result);
    if(!$row)break;
    $r[] = json_encode((object)$row);
}
echo json_encode($r);

forming [  {"firstName":"John", "lastName": "Smith"}, 
           {"firstName":"Abraham", "lastName":"Lincoln"}, ...etc ]

then upon receiving decode the data in js and inject to your page.

当然也可以使用 ajax 跨域请求(不太安全)或让您的服务器与其他服务器通信(更安全)来解决您的问题。

【讨论】:

  • 教人们正确的东西很棒,但这应该是答案还是评论?
  • 等待其余的来。我不追求代表,我开始一次又一次地遇到同样的事情。
  • 感谢您的建议。我知道 W3Schools 只是他们的教学,而不一定是他们提供最佳实践。
  • @Ihsan 等一下。我有点失落。所以让我看看我是否可以发布一个我从你那里得到的例子,看看我是否理解你。$r = array(); while(true){ $row = mysqli_fetch_array($result); if(!$row)break; $r[] = json_encode(object($row)); } 回声 json_encode($r);形成 [ {"firstName": $row['FirstName'], "lastName": $row['LastName']}]
  • 我发布的内容与您相同,但我将 John 替换为变量,将 Smith 替换为变量。我也很可能会向它添加一个循环,因为数据库总是在变化。
【解决方案2】:

【讨论】:

  • 谢谢你我去了你推荐我的网站。我从 GITHub 下载了文件,我会看看扔掉它们。
【解决方案3】:

尝试使用 $.ajax 和跨域 true 发出请求,如下所示:

$.ajax({
type: "GET",
crossDomain:true,
url: "phpscripthere.com/myphp.php"
});

【讨论】:

  • 我了解您发布的 AJAX 代码。它看起来很像 Javascript。但是,我还有一些其他问题应该 AJAX 在 中还是应该被引用
  • 您可以在 或 部分中的其他部分中调用上述 ajax 方法。如果您想从另一个文件中调用它那么这应该是一个扩展名为 .js 的 JavaScript 文件,并且需要包含在页面的 中。
  • 只要确保你包含了 jQuery JS。
【解决方案4】:

如果您是从 W3Schools 学习这些东西,听起来可能有点复杂,但不要气馁 :)

无论如何,就像@LoneWOLFs 在评论中所说,您可能还可以在您的 JavaScript 来自的同一服务器上设置另一个 PHP 页面,并在另一个远程服务器上调用该页面。

基本上,您的新 PHP 脚本将执行与旧脚本类似的操作 - 从某个远程位置调用一些数据。然后它将这些数据传回调用它的浏览器。

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多