2

出于某种原因,我的数据库中的数组值被截断了。这是我的php

<?php
$con = mysql_connect("localhost","Andrew","password");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("mydb", $con);

$sql="INSERT INTO persons (firstname, lastname, modelid, system, department, comm,    other, shift, comments)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','". implode(",",       $_POST['system']) ."','$_POST[department]','". implode(",", $_POST['comm']) ."','".   implode(",", $_POST['other']) ."','$_POST[shift]','$_POST[comments]')";

if (!mysql_query($sql,$con))
  {
 die('Error: ' . mysql_error());
  }
 echo "1 record added";

mysql_close($con);
?> 

我所说的截止是我的复选框条目输入正确,用逗号和所有分隔,但它几乎就像我可以输入单个字段的某种字符限制一样。只是乱七八糟我已经添加了 mysql_real_escape_string 没有错误认为这是问题,但我仍然有同样的问题。有没有人见过这个或知道任何可能的修复?

4

2 回答 2

0

就像我在评论中说的那样,最好不要使用用户mysql_*功能-最好使用 PDO 或 MySQLi。

您的代码中的问题在这里:

$sql="INSERT INTO persons (firstname, lastname, modelid, system, department, comm,    other, shift, comments)
VALUES
('$_POST[firstname]','$_POST[lastname]','$_POST[modelid]','". implode(",",       $_POST['system']) ."','$_POST[department]','". implode(",", $_POST['comm']) ."','".   implode(",", $_POST['other']) ."','$_POST[shift]','$_POST[comments]')";
  1. 您应该在使用 POST 参数之前对其进行清理和验证
  2. 如果你会做#1,你可以使用没有字符串连接的参数(在前 3 个 POST 参数之前和之后$firstname都有缺失。"

我实现这个的方式是这样的:

   /*** first sanitize your POST params ***/
   $firstname = mysql_real_escape_string($_POST['firstname']));
   $lastname= mysql_real_escape_string($_POST['lastname']));
   //etc ...

   /**the query ***/
   $stmt = $dbh->prepare("INSERT INTO persons (firstname, lastname, modelid, system, department, comm,    other, shift, comments)
VALUES(:firstname, :lastname, :modelid, :system, :department, :comm, :other, :shift, :comments)");


   /*** bind the paramaters ***/
   $stmt->bindParam(':firstname', $firstname, PDO::PARAM_STR);
   $stmt->bindParam(':lastname', $lastname, PDO::PARAM_STR);
   // etc...

   /*** execute the prepared statement ***/
   $stmt->execute();
于 2012-10-09T07:04:13.447 回答
0

哦,哇,我现在绝对觉得自己像个新手!!!我的长度/值设置为 15!在问这个问题之前,我应该多看看周围,但感谢所有评论的人!!!

于 2012-10-09T07:14:45.033 回答