【问题标题】:php mysqli ajax jqueryphp mysqli ajax jquery
【发布时间】:2013-03-27 07:48:12
【问题描述】:

我正在创建一个反馈页面,允许用户提供反馈并使用 php 和 mysqli 将此反馈存储在数据库中,而无需使用 jquery 和 ajax 刷新页面,但问题是我没有得到任何插入的数据,尽管我获取成功消息 如果有人可以帮助我,我将不胜感激

feedback_form.php

<?php
 session_start();
  $login = ($_SESSION['login']);
   $userid = ($_SESSION['user_id']);
   $login_user = ($_SESSION['username']);
   $fname = ($_SESSION['first_name']);
   $lname = ($_SESSION['last_name']);
   $sessionaddres =($_SESSION['address']);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>feedback page</title>
    <script type = "text/javascript" src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <link href="style/stylesheet.css"rel="stylesheet" type="text/css"/>

    <script type = "text/javascript">

    $(function(){

       $('#submit').click(function(){
         $('#container').append('<img src = "images/loading.gif" alt="Currently loading" id = "loading" />');


             var comments = $('#comments').val();


             $.ajax({

                url: 'feedback_process.php',
                type: 'POST',
                data: {"comments": comments},

                success: function(result){
                     $('#response').remove();
                     $('#container').append('<p id = "response">' + result + '</p>');
                     $('#loading').fadeOut(500, function(){
                         $(this).remove();
                     });

                }

             });         

            return false;

       });


    });

    </script>




    </head>
<?php require_once('header.php'); ?>


<body>
<form action = "feedback_form.php" method = "post">
<br />
<br />

  <div id = "container">
            <h2><?php echo $login_user ?></h2>



          <label for = "comments">Comments</label>
          <textarea rows = "5"cols = "35" name = "comments" id = "comments"></textarea>
          <br />
  </div>
   </form>
       <input type = "submit" name = "submit" id = "submit" value = "send feedBack" />



<?php require_once('footer.php'); ?>

</body>
</html> 

feedback_process.php

<?php

session_start();
if($_SESSION['login'] != 'true'){
        header("location:index.php");
    }


   $login = ($_SESSION['login']);
   $userid = ($_SESSION['user_id']);
   $login_user = ($_SESSION['username']);
   $fname = ($_SESSION['first_name']);
   $lname = ($_SESSION['last_name']);
   $sessionaddres =($_SESSION['address']);

$conn = new mysqli('localhost', 'root', 'root', 'lam_el_chamel_db');

  echo"<pre>";
  print_r($_POST);
  echo"</pre>";

  if(isset($_POST['comments'])){

  $comments = $_POST['comments'];



  $query = "INSERT into feedback (feedback_text, user_name,) VALUES(?,?)";

  $stmt = $conn->stmt_init();
  var_dump($stmt);

  if($stmt->prepare($query))
  {

     $stmt->bind_param('ss', $comments, $login_user);
     $stmt->execute();

  }
  $query2 = "UPDATE feedback SET feedback_text = ?, user_name = ? WHERE user_name = ? ";

  $stmt = $conn->stmt_init();
  if($stmt->prepare($query2))
  {
     $stmt->bind_param('sss', $comments, $login_user, $login_user);
     $stmt->execute();

  }



  if($stmt){

  echo "thank you .we will be in touch soon <br />";

  }
  else{
   echo "there was an error. try again later.";
   }  

}

else
   echo"it is a big error";
?>

表格字段为:feedback_id feedback_text、user_name

【问题讨论】:

  • 您正在保存数据并返回一个字符串,例如“谢谢你..”。 “我没有插入数据”是什么意思?不要退回这样的东西,对吗?
  • 你的$query2后面的echo $stmt-&gt;error;的值是多少
  • 并且:删除 var_dump,它可能会破坏进程:-D
  • @ jamie0726 var dump 用于跟踪正在发送的内容和可视化.....其次我没有得到插入的数据意味着在数据库中没有插入数据
  • @user2214618 删除查询中“user_name”之后的 ,。 :-D

标签: php forms jquery mysqli


【解决方案1】:

您的查询中有一个额外的 , 。

//old
$query = "INSERT into feedback (feedback_text, user_name,) VALUES(?,?)";

//new
$query = "INSERT into feedback (feedback_text, user_name) VALUES(?,?)";

【讨论】:

  • 伙计们,我有一个问题通知,如果同一用户在数据库中输入另一个反馈,它将插入一个新行,但我需要的是只更新反馈文本的字段而不添加任何新的同一用户的行
  • 查看 MySQL 中的替换命令 dev.mysql.com/doc/refman/5.1/en/replace.html
  • @ jamie0726 在 cmets 部分人们说如果我们使用替换语句并且我们有这个所需表的外键,这个表将被替换并且工作良好,但引用的表将为空
  • @user2214618 你的用例中没有引用表,不是吗?
  • @user2214618 像 pouki06 推荐的那样做也可以,尽管您还有其他查询。
【解决方案2】:

您需要检查是否存在具有相同用户名的行:

//Check a row with same username exists 
$queryChecking = "Select COUNT(*) FROM feedback WHERE user_name = ?"; 

如果结果等于一,则需要更新行而不是插入新行;)

【讨论】:

  • @ pouki06 我正在使用更新语句,但似乎我使用错误的方式..所以你的意思是在插入语句之前我需要检查用户名是否存在然后我插入或我更新??
  • 是的。首先检查给定用户名的条目是否已经存在。如果不进行插入,则进行更新。
  • 是的,就像 jamie 说的那样,如果该行存在,请重用检查查询返回的相同 id,在这种情况下更新检查查询:$queryChecking = "Select id FROM feedback WHERE user_name = ?"如果返回 1 行,则反馈已经存在,您必须执行更新语句而不是插入,否则像现在一样执行插入 ;)
猜你喜欢
  • 2017-06-04
  • 2016-11-26
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多