php没有将数据写入数据库

时间:2016-08-04 14:54:56

标签: php html mysql

我写了一个html文件,它将从用户请求一些信息并将其发送到另一个php文件。 php文件将建立与数据库的连接并将值插入数据库。
我的数据库名称= testdb
表名= table1
我通过调用警报消息对这两个文件进行了一些测试,警报消息能够显示在html文件中,它是&#39 ; s看起来像html文件中的请求无法发送到php文件,因此用于将数据插入数据库的代码无法执行
我的Html表格如下所示

<form id="firstPrize" method="POST" action="firstPrize.php">

<label> Number 1</label>
<input type="text" name="num1"><br>
<label> Number 2</label>
<input type="text" name="num2"><br>
<label> Number 3</label>
<input type="text" name="num3"><br>
<label> Number 4</label>
<input type="text" name="num4"><br><br><Br>
<input type="button" value="enter" name="btnSubmit" onclick="show()">

</form> 

firstPrize.php示例代码

 <?php

   $host = "localhost";
   $user =  "root";
   $password = "";
   mysql_connect($host,$user,$password);
   mysql_select_db("testdb") or die(mysql_error());
   Session_Start();
   echo("yeah");
   if(isset($_POST["btnSubmit"]))
   {
      $num1 = $_POST["num1"];
      $num2 = $_POST["num2"];
      $num3 = $_POST["num3"];
      $num4 = $_POST["num4"];

      mysql_query("insert into table1(num1,num2,num3,num4) values ('num1','num2','num3','num4')");
?>

5 个答案:

答案 0 :(得分:1)

。将您的查询更改为;

mysql_query("insert into table1(`num1`,`num2`,`num3`,`num4`) values ('".$num1."','".$num2."','".$num3."','".$num4."')");

后跟if语句的右括号(})。

答案 1 :(得分:1)

首先,您的if语句缺少结束}

其次,您的SQL查询未插入您在上面设置的变量。您已经获得了$num1之类的变量,但是您只是在SQL插入中插入值'num'。您必须将'num1', 'num2'...更改为'$num1', '$num2'...

第三,请对PHP数据对象(PDO)或MYSQLi(帖子底部的参考链接)进行一些研究。 <{1>} 已弃用,完全容易受到恶意攻击。

修改:此外,请参阅下面的fred -ii-评论,了解有关更好mysql_次查询的一些合理建议。安全的做法是在针对您的数据库运行它们之前验证这些值是您所期望的类型。

fred -ii-说:

  

如果其中一个值恰好包含注射,例如&#39; 123?

,该怎么办?      

[使用] ...(int)$ _ POST [&#34; num1&#34;]并检查输入的输入是否为整数。有一些功能可以做到这一点。

在测试期间对您的查询使用错误报告和错误检查,并假设您能够使用MySQL_ API。

参考文献:

否则,您将需要使用MySQLi_或PDO API。

参考文献:

答案 2 :(得分:1)

首先,您的查询可以生成SQL注入。使用Mysqli准备好的声明:

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "testdb";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

 if(isset($_POST["btnSubmit"]))
 {
    $num1 = $_POST["num1"];
    $num2 = $_POST["num2"];
    $num3 = $_POST["num3"];
    $num4 = $_POST["num4"];

    // prepare and bind
    $query = $conn->prepare("INSERT INTO table1 (num1, num2, num3, num4) VALUES (?, ?, ?, ?)");
    $stmt->bind_param("ssss", $num1, $num2, $num3, $num4);
}

此函数将参数绑定到SQL查询,并告诉数据库参数是什么。 “ssss”参数列出了参数所包含的数据类型。 s字符告诉mysql该参数是一个字符串。

论证可能是以下四种类型之一:

i - integer
d - double
s - string

其次,您的if语句错过了结束括号}

第三,从不使用变量$num1。您使用num1num2,但却错过了'$'

答案 3 :(得分:0)

<div>
    <p>Data from @ViewBag.site.</p>
    <div id="logo"></div>
</div>

<script>
        var site = '@(ViewBag.site)';
        var elem = document.createElement("img");
        switch(site){
            case "WeatherUnderground":
                elem.src = '~/Images/wunderground.jpg';
                break;
            case "Forecast.io":
                elem.src = '~/Images/fio.jpg';
                break;
            case "NOAA":
                elem.src = '~/Images/noaa.png';
                break;
            case "WeatherUnlocked":
                elem.src = '~/Images/wunlocked.jpg';
                break;
            case "APIXU":
                elem.src = '~/Images/apixu.jpg';
                break;
            case "OpenWeatherMap":
                elem.src = '~/Images/owm.jpg';
                break;
        }
        elem.setAttribute("height", 100);
        elem.setAttribute("width", 133);
        elem.setAttribute("alt", site);
        document.getElementById("logo").appendChild(elem);
</script>

我在你的代码中做了一些调整,这应该这样做。请注意代码中的其他注释,包括由于注入危险而逃避变量的工具。它不是我在你的代码上判断你的地方,但你最好使用准备好的陈述。

这是关于堆栈的一个非常好的主题,我建议你阅读它:How can I prevent SQL injection in PHP?

答案 4 :(得分:0)

正如你在问题中明确提到的那样,

  

“我通过调用警报消息对这两个文件进行了一些测试   警报消息能够显示在html文件中,它就像是   来自html文件的请求无法发送到php文件,因此用于将数据插入数据库的代码无法执行〜@ Heart Break KID“

为此,

1)更改

<input type="button" value="enter" name="btnSubmit" onclick="show()">

<input type="submit" value="enter" name="btnSubmit" onclick="show()">

此处,type='submit'需要提交表单数据..

2)关闭大括号不可用。关闭if条件。

if(isset($_POST["btnSubmit"]))
{
    // Your query.
}

现在,数据将转到下一页。但是,请阅读此问题How can I prevent SQL-injection in PHP?

The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead

更新代码 (使用mysqli)

Html表格

<form id="firstPrize" method="POST" action="firstPrize.php">
  <label> Number 1</label>
  <input type="text" name="num1"><br>
  <label> Number 2</label>
  <input type="text" name="num2"><br>
  <label> Number 3</label>
  <input type="text" name="num3"><br>
  <label> Number 4</label>
  <input type="text" name="num4"><br><br><Br>
  <input type="submit" value="enter" name="btnSubmit" onclick="show()">
</form> 

<强> firstPrize.php

<?php
$host = "localhost";
$user =  "root";
$password = "";
$connect = mysqli_connect($host, $user, $password, "testdb");
session_start();

if(isset($_POST["btnSubmit"]))
{
  $num1 = $_POST["num1"];
  $num2 = $_POST["num2"];
  $num3 = $_POST["num3"];
  $num4 = $_POST["num4"];

  $stmt = mysqli_prepare($connect, "INSERT INTO table1(num1,num2,num3,num4) VALUES (?, ?, ?, ?)");
  mysqli_stmt_bind_param($stmt, 'ssss', $num1, $num2, $num3, $num4);

  $query123 = mysqli_stmt_execute($stmt);
}
?>