注释未插入MySQL表

时间:2010-04-02 01:32:02

标签: php mysql

我正在尝试将以下代码用于评论系统。它不起作用。我试图插入MySQL表“评论”的信息没有被放到那里。任何想法,为什么它不起作用?

提前致谢,

约翰

在comments.php上:

echo '<form action="http://www...com/sandbox/comments/comments2.php" method="post"> 
    <input type="hidden" value="'.$_SESSION['loginid'].'" name="uid">
    <input type="hidden" value="'.$submissionid.'" name="submissionid">  

    <label class="addacomment" for="title">Add a comment:</label>
    <input class="commentsubfield" name="comment" type="title" id="comment" maxlength="1000">  

    <div class="commentsubbutton"><input name="submit" type="submit" value="Submit"></div> 
</form>
';

在comments2.php上:

$comment = $_POST['comment'];
$uid = $_POST['uid'];
$subid = $_POST['submissionid'];


mysql_query("INSERT INTO comment VALUES (NULL, '$uid', '$subid', '$comment', NULL, NULL)");

4 个答案:

答案 0 :(得分:1)

$query = sprintf("INSERT INTO comment VALUES (NULL, '%s', '%s', '%s', NULL, NULL)", $uid, $subid, $comment);

mysql_query($query);

答案 1 :(得分:1)

如果mysql_query()失败,则返回falsemysql_error()可以告诉您原因 另请查看http://docs.php.net/security.database.sql-injection并使用mysql_real_escape_string()或准备好的语句。

if ( !isset($_POST['comment'], $_POST['uid'], $_POST['submissionid']) ) {
  echo '<pre>Debug: Something is missing. _POST=',
    htmlspecialchars( print_r($_POST, 1) ),
    '</pre>';
  die;
}
$comment = mysql_real_escape_string($_POST['comment'], $mysql);
$uid = mysql_real_escape_string($_POST['uid'], $mysql);
$subid = mysql_real_escape_string($_POST['submissionid'], $mysql);

$query = "
  INSERT INTO
    comment
  VALUES
    (NULL, '$uid', '$subid', '$comment', NULL, NULL)
";
echo '<pre>Debug query=', htmlspecialchars($query), '</pre>';
$rc=mysql_query($query, $mysql);
if ( !$rc ) {
  die( htmlspecialchars(mysql_error()) );
}

尝试这个自包含的示例(仅作为示例,不要以这种方式编码; - ))

<?php
session_start();
if ( !isset($_SESSION['loginid']) ) {
  login();
}
else if ( !isset($_POST['comment']) ) {
  showForm();
}
else {
  saveComment();
}

function saveComment() {
   if ( !isset($_POST['comment'], $_POST['uid'], $_POST['submissionid']) ) {
    echo '<pre>Debug: Something is missing. _POST=',
      htmlspecialchars( print_r($_POST, 1) ),
      '</pre>';
    die;
  }
  // insert correct values here:
  $mysql = mysql_connect('localhost', 'localonly', 'localonly') or die(mysql_error());
  mysql_select_db('test', $mysql) or die(mysql_error());

  $comment = mysql_real_escape_string($_POST['comment'], $mysql);
  $uid = mysql_real_escape_string($_POST['uid'], $mysql);
  $subid = mysql_real_escape_string($_POST['submissionid'], $mysql);

  $query = "
    INSERT INTO
      comment
    VALUES
      (NULL, '$uid', '$subid', '$comment', NULL, NULL)
  ";
  echo '<pre>Debug query=', htmlspecialchars($query), '</pre>';
  //$rc=mysql_query($query, $mysql);
  //if ( !$rc ) {
    //die( htmlspecialchars(mysql_error()) );
  //}
}


function login() {
  $_SESSION['loginid'] = rand(1, 100);
  echo 'Your new loginid is ', $_SESSION['loginid'],'<br />
    <a href="?">Continue</a>
  ';
}

function showForm() {
  $submissionid = rand(1000, 9999);
  echo '<div>submissionid=', $submissionid, '</div>';
  echo '<div>loginid=', $_SESSION['loginid'], '</div>';

  echo '<form action="?" method="post"> 
    <input type="hidden" value="'.$_SESSION['loginid'].'" name="uid">
    <input type="hidden" value="'.$submissionid.'" name="submissionid">  

    <label class="addacomment" for="title">Add a comment:</label>
    <input class="commentsubfield" name="comment" type="title" id="comment" maxlength="1000">  

    <div class="commentsubbutton"><input name="submit" type="submit" value="Submit"></div> 
  </form>
  ';
}

如果“有效”将其与您的实际应用进行比较并找到(基本)差异。

答案 2 :(得分:1)

来自您的表单的有效返回值

$comment = $_POST['comment'];
$uid = $_POST['uid'];
$subid = $_POST['submissionid'];

包含有效数据?

SQL查询有效

http://www.w3schools.com/sql/sql_insert.asp

mysql_query返回什么

<?php
$result = mysql_query('SELECT * WHERE 1=1');
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

?>

你的查询得到了什么mysql_error。

使用PDO而不是mysql_query()

我建议你看看PDO为你做了很多繁重的工作。例如,它确保您的SQL查询是安全的,因为即使将注释添加到您的数据库,它也可能(根本)不安全。

PHP安全性

您应始终验证用户输入以阻止SQL injection。幸运的是,当使用PDO(使用准备好的语句也可以提高速度)时,这将在seens后面为你完成。我仍然建议您阅读PHP创建者提供的这些快速security提示,以确保您的网站安全。


希望这些提示可以帮助您。

答案 3 :(得分:0)

您需要任何INSERT语句的字段名称。由于我不知道你桌子的确切位置,我会做一些猜测。

mysql_query("INSERT INTO comment(uid,subid,comment) VALUES($uid, $subid, $comment)");