2013-03-23 79 views
1

我是Android编程的新手,我试图接受用户输入并将其添加到我的外部数据库。现在我的PHP代码:在Android中添加到外部数据库

<?php 
mysql_connect("host","login","pass") or die ("Unable to connect to MySQL"); 
mysql_select_db("database"); 

mysql_query("INSERT INTO Table (number, format, name, price) VALUES ('".$_REQUEST['number1']."', ".$_REQUEST['format1'].", ".$_REQUEST['name1'].", ".$_REQUEST['price1'].")"); 

mysql_close(); 

>

我看不出有什么毛病我的PHP,但是当我运行我的程序,我没有得到任何错误,但是当我看我的?数据库似乎没有任何实际上被添加。我的Java代码是:

Log.d("debug", "ENTER METHOD ADD"); 
    new Thread(new Runnable(){ 
     public void run(){ 

     ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

     EditText eNumber = (EditText) findViewById(R.id.barcodeEdit); 
     EditText eFormat = (EditText) findViewById(R.id.codeFormatEdit); 
     EditText eName = (EditText) findViewById(R.id.titleEdit); 
     EditText ePrice = (EditText) findViewById(R.id.priceEdit); 

     Log.d("debugNumber", eNumber.getText().toString()); 
     Log.d("debugFormat", eFormat.getText().toString()); 
     Log.d("debugName", eName.getText().toString()); 
     Log.d("debugPrice", ePrice.getText().toString()); 

     nameValuePairs.add(new BasicNameValuePair("number1", eNumber.getText().toString())); 
     nameValuePairs.add(new BasicNameValuePair("format1", eFormat.getText().toString())); //you can add as many you need 
     nameValuePairs.add(new BasicNameValuePair("name1", eName.getText().toString())); 
     nameValuePairs.add(new BasicNameValuePair("price1", ePrice.getText().toString())); 

     try { 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost("http://MY_SITE.com/my.php"); 
       httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpClient.execute(httpPost); 
       HttpEntity entity = response.getEntity(); 
       //is = entity.getContent(); 
       Log.d("debug", "ENDED TRY"); 
      }catch (Exception e) { 
       // TODO: handle exception 
       Log.e("log_tag", e.toString()); 
       //return false; 
       //Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    }).start(); 

这是我添加的代码位。我知道我可以很好地连接到数据库,因为我用来搜索数据库的代码工作正常,但由于某种原因,我的添加是搞砸了。我有代码在新线程中运行,因为我有一天学到了不能在程序的主线程中执行这些http请求。我一直在寻找答案,并没有找到一个,也许我只是想念一条线,任何帮助,非常感谢。

+0

您的PHP脚本是否接收正确的值? – 2013-03-23 03:17:12

+0

我相信是这样的,我有这些Log.d命令以确保即时消息从文本框中解析正确的值,是否有一种方法可以真正查看发送到PHP脚本的内容?我想我可以打印出什么是存储在number1,format1等在我的PHP脚本? – user2200175 2013-03-23 03:19:06

+0

对所有字符串变量“'”进行引用。$ _ REQUEST ['name1']。“''并使用PDO或mysqli和预处理语句。不要直接将请求传递给查询。你打开sql注入。 – bitWorking 2013-03-23 03:24:12

回答

1

我建议你首先开发一个简单的HTML表单,以确保您不会在你的php侧像这样得到任何问题。

<html xmlns='http://www.w3.org/1999/xhtml'> 
    <head > 
     <meta http-equiv='Content-Type' content='text/html; charset=utf-8'/> 
     <title >Form Page: sampleform</title> 
    </head> 
<body> 
<h1>Sample form page</h1> 

<form id='sampleform' method='post' action='http://MY_SITE.com/my.php' > 
    <p> 
    number1: <input type='text' name='number1' /> 
    </p> 
    <p> 
    format1: <input type='text' name='format1' /> 

    </p> 

    <p> 
    name1: <input type='text' name='name1' /> 
    </p> 

    <p> 
    price1: <input type='text' name='price1' /> 
    </p> 

    <p> 
    <input type='submit' name='Submit' value='Submit' /> 
    </p> 

</form> 

</body> 
</html> 

运行此快速测试并让我知道。以便我可以进一步帮助你。

编辑:

是。这个问题可能在你的插入语句中。尝试使用以下代码。

<?php 
    $mysqli = new mysqli("Your host", "Db username", "Db password", "Db name"); 

    if ($mysqli->connect_errno) { 
     echo "Couldn't connect to database"; 
    } 

    $number = $mysqli->real_escape_string($_POST['number1']); 
    $format= $mysqli->real_escape_string($_POST['format1']); 
    $name= $mysqli->real_escape_string($_POST['name1']); 
    $price= $mysqli->real_escape_string($_POST['price1']); 

    $query = "INSERT INTO Table (number, format, name, price) VALUES('$number','$format','$name', '$price');"; 

    $result = $mysqli->query($query); 

if($result) 
{ 
     echo "Successfully inserted"; 
} 

    ?> 
+0

我跑这个代码,当我点击提交时,它只是打印项目,可能来自我在我的PHP代码中的回声声明,我在文本框中写入,并没有实际添加到数据库。但是,由于正确的项目被打印,这应该意味着PHP代码正在接收正确的信息?我的INSERT语句可能有些问题,因为php正在获得正确的信息 – user2200175 2013-03-23 12:43:51

+0

如果您能够快速回到我身边,情况会更好。无论如何编辑我的答案。检查它并快速告诉我。 – Kanth 2013-03-23 13:42:26

+0

修复了这个问题:D为什么我可能还没有用原来的插件完成它? – user2200175 2013-03-23 13:57:56

0

显然它在代码中没有显示任何错误。要调试更一行行,你应该修改你的PHP代码,并尝试 -

<?php 
mysql_connect("host","login","pass") or die ("Unable to connect to MySQL"); 
mysql_select_db("database"); 

echo $_REQUEST['number1']; 
echo $_REQUEST['format1']; 
echo $_REQUEST['name1']; 
echo $_REQUEST['price1']; 

$sql = "INSERT INTO Table (number, format, name, price) VALUES ('".$_REQUEST['number1']."', '".$_REQUEST['format1']."', '".$_REQUEST['name1']."', '".$_REQUEST['price1']."')"; 

echo $sql; 

mysql_query($sql) or die(mysql_error()); 

mysql_close(); 
?> 

你也可以用$ _POST语法而不是$ _REQUEST尝试。

你应该明白这个错误。

请与我们分享结果,以便我们可以进一步帮助您。

感谢

+0

当我运行Android应用程序,并刷新我的PHP页面应该打印该页面,因为没有任何东西似乎回响在网页上。 – user2200175 2013-03-23 03:46:38