PHP 未将数据插入 MySQL

标签 php html mysql database mysqli

我查看了其他帖子并尝试了一些建议,但我似乎仍然无法填充数据库中的特定表。

我将提供一些代码块来正确看待事情。

这是我创建要填充数据的表的代码:

    CREATE TABLE `Devices` (
      `dID` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `deviceType` enum('BT','C1','AW') DEFAULT NULL COMMENT 'BT = Bluetooth, C1 = C1     Reader, AW = Acyclica Wifi',
      `deviceName` varchar(255) NOT NULL DEFAULT '',
      `deviceIP` varchar(15) NOT NULL DEFAULT '',
      `devicePort1` int(4) NOT NULL,
      `devicePort2` int(4) DEFAULT NULL,
      `deviceRealLatitude` float(10,6) NOT NULL,
      `deviceRealLongitude` float(10,6) NOT NULL,
      `deviceVirtualLatitude` float(10,6) DEFAULT NULL,
      `deviceVirtualLongitude` float(10,6) DEFAULT NULL,
      `deviceChanged` tinyint(1) DEFAULT NULL,
      `deviceStatus` tinyint(1) DEFAULT NULL,
      `deviceLastSeen` timestamp NULL DEFAULT NULL,
      `deviceBufferSize` int(4) DEFAULT NULL,
      `deviceSoftwareVersion` varchar(20) DEFAULT NULL,
      `deviceMacAddress` varchar(17) DEFAULT NULL,
      `deviceTest` tinyint(1) DEFAULT NULL,
      `deviceAPIKey` varchar(100) DEFAULT NULL COMMENT 'Only used with the Acyclia   Scanners',
      `deviceSerialID` int(6) DEFAULT NULL COMMENT 'Only used with the Acyclia  Scanners',
       PRIMARY KEY (`dID`)
      ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;

我已经声明了所有字段变量,即

 $dID = 0;
 .....
 $deviceSerialID = 0;

我检查了每个字段是否已设置,即

isset($_POST['dID']) == 1 ? ($dID = ($_POST['dID'])) : null;
.....
isset($_POST['deviceSerialID'])   == 1 ? ($deviceSerialID = ($_POST['deviceSerialID']))     : null;

这里是我使用 INSERT INTO "table name"--> VALUES 的地方

$insert_query = "INSERT INTO Devices (`dID`, `deviceType`, `DeviceName`, `deviceIP`,
`devicePort1`, `devicePort2`, `deviceRealLatitude`, `deviceRealLongitude`,
`deviceVirtualLatitude`, `deviceVirtualLongitude`, `deviceChanged`, `deviceStatus`,
`deviceLastSeen`, `deviceBufferSize`, `deviceSoftwareVersion`, `deviceMacAddress`,
`deviceTest`, `deviceAPIKey`, `deviceSerialID`) VALUES ('".$dID."', '".$deviceType."',
'".$deviceName."', '".$deviceIP."', '".$devicePort1."', '".$devicePort2."', 
'".$deviceRealLatitude."', '".$deviceRealLongitude."', '".$deviceVirtualLatitude."', 
'".$deviceVirtualLongitude."', '".$deviceChanged."', '".$deviceStatus."', 
'".$deviceLastSeen."', '".$deviceBufferSize."', '".$deviceSoftwareVersion."', 
'".$deviceMacAddress."', '".$deviceTest."', '".$deviceAPIKey."', 
'".$deviceSerialID."')";

mysqli_query($conn,$insert_query);

现在,在我的 html 表单中,我只想输入某些字段的数据:

<fieldset>
<form name = "form1" id = "form1" action = "" method = "post">
Device ID:         <input type="text" name="dID"        >               <br>

Device Type:              <select name="deviceType">                    
              <option value = "BT">BT</option>
              <option value = "C1">C1</option>
              <option value = "AW">AW</option>  
              </select>                                             <br>

Device Name:       <input type="text" name="deviceName" >               <br>
Device IP:         <input type="text" name="deviceIP"   >               <br>
Device Port 1:         <input type="text" name="devicePort1">               <br>
Device Port 2:         <input type="text" name="devicePort2">               <br>

<input type = "submit" name = "submit" value = "submit" />
</fieldset>
</form>

当我输入数据并点击提交时,没有出现任何错误。我意识到我在代码中所做的一些事情是不必要的,例如刻度线。这一切都是为了看看它是否能解决我的问题。请问我能做什么有什么建议吗?

更新 2014 年 6 月 20 日

问题似乎出在我的 CREATE TABLE 语法上。当我将字段的类型“int”或“float”替换为“varchar”时(dID 是一个异常(exception)),它会更新表。有人熟悉发布“int”或“float”值吗?

更新 2014 年 6 月 20 日几个小时后...

各位,看来我已经发现问题了。这是一个小技术问题,我使代码复杂化,导致进一步的错误。

这个想法如下:

此时我不需要担心字段的设置,因为许多字段将保持为空。我只需要使用此方法为每个字段填写一些内容:

$deviceType                 = $_POST['deviceType'];

此外,使用“int”或“float”需要在如何实现 INSERT INTO ... VALUES 子句方面有所不同。如果将其保留为空(我现在是这样),我将无法执行此操作:

$insert_query1 = "INSERT INTO Devices (deviceChanged) VALUES ('$deviceChanged');

此迭代导致表格无法填充适当的值。

相反,用 null 填充它:

$insert_query1 = "INSERT INTO Devices (deviceChanged) VALUES (NULL);

PHP 现在将数据插入 MySQL。感谢您的帮助!

最佳答案

isset 返回 bool 值(true/false),而不是整数或其他值( http://www.php.net//manual/en/function.isset.php )

另一个错误是关于如何使用三元比较。在这里查看更多相关信息:http://davidwalsh.name/php-shorthand-if-else-ternary-operators

所以代替:

isset($_POST['deviceName']) == 1 ? ($deviceName = ($_POST['deviceName'])) : null;

你应该写

$deviceName = isset($_POST['deviceName']) ? $_POST['deviceName'] : null;

此外,请考虑使用某种循环来分配这些变量(如果确实需要的话),并且不要大量重复您的代码。

关于PHP 未将数据插入 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24316820/

相关文章:

现场 PHP session 问题但不是本地问题

javascript - 单击取消按钮显示另一个文本字段的值

php - PHP mySQL开发如何智能管理状态/历史记录?

html - 显示 :table-cell 内的绝对定位

javascript - 循环隐藏和显示表格行

html - 单击按钮显示蓝色矩形。此外,按钮在关闭模式后取消悬停

java - JPA OneToOne 加入问题

php - Symfony 2 部署 git 文件

mysql - 从选择查询更新时出现语法错误

php - 使用 Woocommerce 更新 Wordpress 上的用户信息?