2

何らかの理由で、配列値がDBで切り取られています。これが私の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);
?> 

カットオフとは、チェックボックスのエントリがカンマなどで区切られて正しく入力されていることを意味しますが、1つのフィールドに入力できる文字数の制限があるかのようです。ただいじり回して、それが問題だと思ってエラーなしで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 に答える