2009-11-20 78 views
0

HI Guys,简单的PHP问题?

我有以下问题。我试图从我的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); 

     } 
    ?>

如果我硬编码的土地=价值“德国”我得到一个答案,但如果我做其他的事情,没有东西出来。

我希望你能帮助我。

+0

您是否将$ country作为POST变量发送?你能告诉我们你使用的表单吗? – 2009-11-20 14:33:03

+0

转义你的变量。 $ _POST ['contry']是否填充? – NDM 2009-11-20 14:33:44

回答

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(); 

但是,打印其他东西后不能发送头文件 - 就像在脚本的早期回声调用一样。这听起来不像是一个问题,但它会是当你的查询工作。

此外,你循环的结果集。如果您只希望获得一个结果,请将while循环消除。如果你有多个结果,你会因header()调用而出错。

+0

谢谢你。我在这里试图打印XML,现在它正在工作。 – 2009-11-20 19:25:44

1

如果你print_rvar_dump($_POST)会发生什么情况?乍一看,它看起来像你的POST是空的,或至少$_POST['country']

+0

是的帖子是空的。 :-) duuno它是如何发生的,但现在它回到了正轨,它正在工作:-) – 2009-11-20 19:26:28

1

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

尝试

echo $query; 

和更新帖子,所以我们可以看到的内容。

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

0

的一个好方法来调试这是把这个区块在你的文件的顶部:

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

编写代码这种和平能调试程序

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

    } 
?> 
0

如果

$country = $_POST['country']; 

正在返回比您刚需要更改的值恰当的值

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

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

否则只是检查是否正在接收$ _ POST [“国家”]值正确如果不是那么第一次调试。