我正在尝试将数据从java发送到php,然后从php发送到mysql数据库,所以我的php代码:
<!DOCTYPE html >
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<?php
require_once('conn.php');
mysql_select_db($db)or die('ERREUR'.mysql_error());
extract($_POST);
$req="insert into `fdt_tab` values(null,'".$date."','".$kpi_category."','".$kpi_indicator."','".$kpi_image."')";
mysql_query($req)or die (mysql_error()."'n".$req);
mysql_close();
echo " Insertion faite avec succés !! " ;?>
</body>
</html>
这是我的Java代码: 尝试 {
URL url = new URL("http://localhost/fdt/inser.php");
PhpPostConnect con = new PhpPostConnect(url);
System.out.println("la connexion est faite avec succés!!");
try
{
con.send("5"+"02/02/2015"+"categorie"+ "cssr"+"CSSR_PS.png");
String meldung = con.read();
System.out.println(meldung);
if(meldung.contains("OKAY"))
{
System.out.println(meldung);
}
}
catch (IOException e)
{
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
我使用此链接编写此代码当我想在我的数据库中插入数据时,我发现我的数据库中添加了空法谱!!
发送 POST 数据时,信息的预期格式为:
name1=value1&name2=value2&name3=value3...
其中 name1
、 name2
、 name3
是参数的名称,value1
、 value2
和 value3
是这些参数的值。名称和值应进行 url 编码。因此,例如,值为 H&M
的参数"storeName"应该作为 storeName=H%26M
发送。
问题是你没有这样做。您刚刚连接了所有参数的值并像这样发送它们:
con.send("5"+"02/02/2015"+"categorie"+ "cssr"+"CSSR_PS.png");
这会将502/02/2015categoriecssrCSSR_PS.png
发送到服务器。PHP 脚本看到了这一点,它无法正确地将其分解为参数,因此您最终会未定义所有参数。在 PHP 中,这意味着当您在 $req
SQL 字符串中使用它们时,它们都是空的。
您需要在PHP中添加所需的参数名称(date
,kpi_category
等),并使用URL编码的值格式化我上面提到的整个数据(例如,您不能将02/02/2015
作为值发送。 /
是保留字符,必须进行百分比编码)。
附加建议:您的PHP脚本确实非常不安全。永远不要使用extract
.这是非常不安全的。任何人都可以通过向您发送该变量作为参数来设置程序中的任何变量。键入可能很烦人,但始终将变量用作$_POST['var_name']
(或$_REQUEST['var_name']
等),并且如果您愿意,请仅将所需的变量放入变量中,而不是=
通过extract
。
此外,请检查所需的每个变量是否已传递:已设置、不为空且包含合理的值。
你从参数中获得的所有字符串,应该被数据库使用,都应该被转义,因为你不知道是否有人会试图破解你的程序并向你发送包含单引号的字符串。这将破坏您的 SQL。使用 mysql_escape_string( $_POST['var_name'])
转义 MySQL 中的字符串。