简单的PHP问题?

时间:2009-11-20 14:28:02

标签: php iphone select load

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 =“德国”的价值,我会得到答案,但如果我做了另一件事,那就什么都没有了。

我希望你能帮助我。

7 个答案:

答案 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_rvar_dump($_POST)会怎样?乍一看,看起来你的POST是空的,或者至少是$_POST['country']

答案 2 :(得分:1)

您是否检查过$ _POST ['country']实际上是否包含值?

尝试

echo $query;

并更新帖子,以便我们查看内容。

答案 3 :(得分:0)

写下这段代码可以调试你的程序

<?php
   if (!isset($_POST)) {

    }
?>

答案 4 :(得分:0)

如果

$country = $_POST['country'];

返回正确值,而不是您需要更改

$query = "SELECT * FROM world WHERE land='$country'";

as

$query = "SELECT * FROM world WHERE land='".$country."'";

否则只检查您是否正确接收$ _POST ['country']值,如果没有,则先调试它。

答案 5 :(得分: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

答案 6 :(得分:0)

调试此方法的一个好方法是将此块放在文件的顶部:

<?php
if (!isset($_POST)) {
    die('A $_POST is required for this page.');
}
...