2014-11-21 119 views
1

我试图插入变量到我的数据库中的表中,由于某种原因,INSERT查询没有插入我的值到数据库中。我已经测试了“test_input”函数,它工作正常,并且我知道连接正在工作,因为稍后在代码中的SELECT查询正在工作。我也知道输入是在$ _POST superglobal中,所以我认为它可能与插入查询有关,通过排除其他可能性。查询有什么问题吗?这里是我的php代码:

  function test_input($data) { 
      $data = trim($data); 
      $data = stripslashes($data); 
      $data = htmlspecialchars($data); 
      return $data; 
     } 

     $name = test_input($_POST['name']); 
     $date = test_input($_POST['date']); 
     $datestring = date('Y-m-d',strtotime(test_input($_POST['date']))); 
     $venue = test_input($_POST['venue']); 
     $town = test_input($_POST['town']); 

     $connection = new mysqli("Example","Example","Example","Example"); 
     if (mysqli_connect_errno()) { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 

     if($_POST != []) { 
      $connection->query("INSERT INTO events (Name, Date, Venue, Town) VALUES(" . $name . ", " . $datestring . ", " . $venue . ", " . $town . ")"); 
     } 

这是我的HTML表单代码,如果有什么错误的。

<div class="tr" id="addevent">  

     <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 

     <div class="td"> 
     <input type="text" name="name"> 
     </div> 

     <div class="td"> 
     <input type="text" name="date"> 
     </div>  

     <div class="td"> 
     <input type="text" name="venue"> 
     </div>   

     <div class="td"> 
     <input type="text" name="town"> 
     </div> 

     <div class="td"> 
     <input type="submit" value="Add Event"> 
     </div> 

     </form> 

    </div> 
+1

你可能想检查你的条件'$ _POST!= []'。也许你可以测试'isset($ _ POST ['name'])'。或者任何其他必须存在的表单参数。在if语句中尝试echo并查看它是否被执行。 – 2014-11-21 23:21:46

+0

请删除'$ _SERVER ['PHP_SELF']'作为你的动作。我知道你有'htmlspecialchars()',但其中任何一个就像黑客天堂。在这里查看更多信息 - https://phpsecurity.wordpress.com/2007/11/03/the-danger-of-php_self/以及为什么htmlspecialchars本身就是一个问题 - http://blog.astrumfutura.com/2012/03/A-旅行者引导到跨站点脚本-XSS-在-PHP-部分-1-如何-未使用的-用htmlspecialchars换输出转义/ – DrRoach 2014-11-21 23:24:44

回答

1

它不工作,因为你正在创建的动态SQL INSERT语句将在VALUES列表加引号字符串,因此是畸形的。话虽如此,你真的不应该这样做,因为它很容易受到称为SQL injection的非常常见的攻击。