HI Guys,
我有以下问题。我正在尝试从我的Iphone应用程序连接到php站点,以访问mySql数据库,以获取正确的信息。
这是我的代码:
<?php
mysql_connect ("localhost", "user", "pass") or die (mysql_error());
echo "Connected to MySql <br /><hr />";
mysql_select_db ("database_com") or die (mysql_error());
echo "Connectted to Database <br /><hr />";
$country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT
echo "value <br /><hr />" . $country;
$query = "SELECT * FROM world WHERE land='$country'";
$result = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($result)) {
$1 = $row['1'];
$2 = $row['2'];
$3 = $row['a3'];
$4 = $row['4'];
$xmltext = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<country></country>";
$xmlobj = simplexml_load_string($xmltext);
$xmlobj->addChild("1", $1);
$xmlobj->addChild("2", $2);
$xmlobj->addChild("a3", $a3);
$xmlobj->addChild("4", $4);
print header("Content-type: text/plain") . $xmlobj->asXML(); // Place future code ABOVE this line
$xml->save(statistic.xml);
}
?>
如果我硬编码land =“德国”的价值,我会得到答案,但如果我做了另一件事,那就什么都没有了。
我希望你能帮助我。
答案 0 :(得分:4)
你有一个表单将一个国家/地区发布到你的php页面吗?如果是这样,表格是否使用method =“post”?如果您将国家/地区放在网址中,请使用$ _GET而不是$ _POST。
另外,调用mysql_real_escape_string($ _ POST ['country'])以避免SQL注入问题(比如删除所有数据库的人)。
此外,这一行:
print header("Content-type: text/plain") . $xmlobj->asXML();
有很多问题。它应该是:
header("Content-type: text/plain");
print $xmlobj->asXML();
但是,在打印其他内容之后,您无法发送标题 - 就像脚本中的echo调用一样。听起来这不是一个问题,但是当你的查询有效时它就会出现。
此外,您正在遍历结果集。如果您只期望一个结果,请抛弃while循环。如果您有多个结果,则会因为header()调用而出错。
答案 1 :(得分:1)
如果您print_r
或var_dump($_POST)
会怎样?乍一看,看起来你的POST是空的,或者至少是$_POST['country']
。
答案 2 :(得分:1)
您是否检查过$ _POST ['country']实际上是否包含值?
尝试
echo $query;
并更新帖子,以便我们查看内容。
答案 3 :(得分:0)
尝试一个简单的错误捕获:
<?php
mysql_connect ("localhost", "user", "pass") or die (mysql_error());
echo "Connected to MySql <br /><hr />";
mysql_select_db ("database_com") or die (mysql_error());
echo "Connectted to Database <br /><hr />";
$country = $_POST['country'];// THIS IS THE VALUE I WANT TO LOAD INTO THE SELECT STATEMENT
echo "value <br /><hr />" . $country;
if (!isset($country) || $country == FALSE /* other fail conditions */) {
echo "<p>There was a problem; one, or more, error condition occurred:</p>";
echo "<pre>" . print_r(get_defined_vars(),true) . "</pre>";
}
else {
// database access stuff
}
?>
这样,如果未设置值(或满足错误测试),您将显示当前定义的所有变量,并且不会发生数据库访问。
这很粗糙,但有时候看看发生了什么有帮助。但就个人而言,我认为您更有可能只是遇到错字$_POST['country']
而不是$_POST['contry']
或其他内容,或者使用$_POST
代替$_GET
。
答案 4 :(得分:0)
调试此方法的一个好方法是将此块放在文件的顶部:
<?php
if (!isset($_POST)) {
die('A $_POST is required for this page.');
}
...
答案 5 :(得分:0)
<?php
if (!isset($_POST)) {
}
?>
答案 6 :(得分:0)
如果
$country = $_POST['country'];
返回正确值,而不是您需要更改
$query = "SELECT * FROM world WHERE land='$country'";
as
$query = "SELECT * FROM world WHERE land='".$country."'";
否则只检查您是否正确接收$ _POST ['country']值,如果没有,则先调试它。