【问题标题】:Data in database is entered only for the first time数据库中的数据仅是第一次输入
【发布时间】:2015-06-28 03:53:17
【问题描述】:

我正在尝试创建一个私人消息传递系统,在该系统中,用户向另一个用户发送消息并将内容插入到数据库中。我使用称为哈希的随机数来识别两个人之间的对话。表是“message_group ”,用于保存消息的表是“消息”..问题来了..
当我在文本区域中输入内容并单击发送消息按钮时,它会将数据插入消息数据库。但是如果再次输入内容并尝试发送,数据将不会进入数据库。因为其他人只能得到第一条消息..请帮我解决这个问题..这是代码

<html>
<head>
<title>new convo</title>
</head>
<body>
<?php include 'connect.php';?>
<?php include 'message_title_bar.php';?>
<?php include 'functions.php';?>

<div>
<?php 
if(isset($_GET['user']) && !empty($_GET['user'])){ 
?>


<form method='post'>

<?php
if(isset($_POST['message']) && !empty($_POST['message'])){


        $my_id=$_SESSION['user_id'];

    $user=$_GET['user'];
    $random_number=rand();
    $message=$_POST['message'];


    $connect = mysqli_connect('localhost','root','','php_mysql_login_system');
    if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

  $query_string = "SELECT `hash` FROM `message_group` WHERE (`user_one`='$my_id' AND `user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')";

  $check_con=mysqli_query($connect,$query_string) or die(mysqli_error($connect));
    if(mysqli_num_rows($check_con)==1){
        echo "<p>Conversation already Started</p>";
    }else{
        $connect = mysqli_connect('localhost','root','','php_mysql_login_system');

    if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
        mysqli_query($connect,"INSERT INTO message_group VALUES('$my_id' , '$user' , '$random_number')");
    mysqli_query($connect,"INSERT INTO messages VALUES ('','$random_number','$my_id','$message')");
    echo "<p>Conversation started</p>";
    }
}
?>

Enter message:<br />
<textarea name='message' rows='7' cols='60'></textarea>
<br />
<br />
<input type='submit' name="submit" value="sendmessage" />
</form>


<?php


}

else{
    echo "<b>Select User</b>";
$connect = mysqli_connect('localhost','root','','php_mysql_login_system');
   $user_list=mysqli_query($connect,"SELECT `id`,`username` FROM `users`");
    while($run_user=mysqli_fetch_array($user_list)){
       $user = $run_user['id'];
        $username = $run_user['username'];
        echo "<p><a href='send.php?user=$user'>$username</a></p>";
        }
}
?>
</div>
</body>
</html>  

感谢任何帮助。

【问题讨论】:

  • 聊天系统或评论系统使用ajax...避免多次连接数据库...
  • 尝试以这种方式使用插入函数mysqli_query($GLOBALS["___mysqli_ston"], "INSERT INTO tablename(id,msg) VALUES ('$id','$msg')");
  • 我只知道一点 php 和 mysqli..我从来没有学过 ajax 和 jquery..所以我没有使用它:( ..无论如何谢谢你的建议兄弟@DeepakKumar
  • 我试过你告诉我的但没有用..你能建议我一些其他的方法吗? @DeepakKumar

标签: php html mysql mysqli


【解决方案1】:
<html><head><title>new convo</title></head><body>
<?php include 'connect.php'; ?>
<?php include 'message_title_bar.php'; ?>
<?php include 'functions.php'; ?>
<?php $connect = mysqli_connect('localhost', 'root', '', 'php_mysql_login_system'); if (mysqli_connect_errno()) echo "Failed to connect to MySQL: " . mysqli_connect_error(); ?>
<div>
<?php
if (isset($_GET['user']) && !empty($_GET['user'])) {
    ?>
    <form method='post'>
        <?php
        if (isset($_POST['message']) && !empty($_POST['message'])) {
            $my_id = $_SESSION['user_id'];
            $user = $_GET['user'];
            $message = $_POST['message'];
            $query_string = "SELECT `hash` FROM `message_group` WHERE (`user_one`='$my_id' AND `user_two`='$user') OR (`user_one`='$user' AND `user_two`='$my_id')";
            $check_con = mysqli_query($connect, $query_string);
            if (mysqli_num_rows($check_con)) {
                $f_array = mysqli_fetch_array($check_con);
                $hash = $f_array['hash'];
                echo "<p>Conversation already Started</p>";
            } else {
                $hash = rand();
                mysqli_query($connect, "INSERT INTO message_group VALUES('$my_id' , '$user' , '$hash')");
                echo "<p>Conversation started</p>";
            }
            mysqli_query($connect, "INSERT INTO messages VALUES ('', '$hash', '$my_id', '$message')");
        }
        ?>
        <label for="message">Enter message:</label>
        <textarea name='message' id="message" rows='7' cols='60'></textarea>
        <br/>
        <br/>
        <input type='submit' name="submit" value="sendmessage"/>
    </form>
<?php
} else {
    echo "<b>Select User</b>";
    $user_list = mysqli_query($connect, "SELECT `id`,`username` FROM `users`");
    while ($run_user = mysqli_fetch_array($user_list)) {
        $user = $run_user['id'];
        $username = $run_user['username'];
        echo "<p><a href='send.php?user=$user'>$username</a></p>";
    }
}
?>
</div>
</body>
</html>

【讨论】:

  • 你需要从你的 "if (mysqli_num_rows($check_con)) {" mysqli_query($connect, "INSERT INTO messages VALUES ('','$random_number','$my_id', '$message')");
  • 非常感谢您的时间兄弟!但我无法理解你在那里所做的事情。你能更具体地说明你修改过的部分吗?再次感谢@Oversun
  • 在将新消息插入数据库之前,您需要在“if(mysqli_num_rows($check_con)==1){”这一行中关闭“if”。在这一行之后 mysqli_query($connect, "INSERT INTO message_group VALUES('$my_id' , '$user' , '$random_number')"); echo "

    对话开始

    ";
  • 当我按照你告诉我的去做时..message_group 表工作正常(意味着~只有一个为该 convo 创建的散列(随机值))但在消息表中有两个不同的散列值..一个与 message_group 表中的相同,因此会显示..但其他哈希值不同,因此不会显示从第二条消息开始的那些哈希消息@Oversun
  • 你知道吗?它刚刚奏效..非常感谢!和另一个简单的 qstn ..在选择用户列表中,它显示了包括我在内的所有用户列表..我不想在那里显示我的名字,因为我不想给自己发信息..如何不显示我的名字?@oversun
【解决方案2】:

代码哥先读basic有很多错误...而且你不是用echo功能打印旧聊天。

只是回声旧聊天。在发布功能之前。

steps:
1. Check if users already chatting.
2. If they are chatting echo chat which they already chatted.
3. If not chatting then start new chat.
4. if they are not chatting you dont need to echo anything just echo new message.

您当前的代码只会显示我认为的最后一条消息。因为您的页面正在重新加载。并且在它加载后它只是在我看来打印您的最后一条消息..您还需要打印旧聊天。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多