【问题标题】:@mention with text or just text on its own@mention with text or just text on its own
【发布时间】:2014-09-29 00:58:18
【问题描述】:

我有一个值或 newmsg 通过我的 div textarea 发送,这可以包含@mention 文本 或者只是文本,具体取决于用户在状态更新器中输入的内容。

我面临的问题是,当我添加 str_replace 代码来转换 @mention + 文本时,它会发布带有 @mention + 文本的任何内容,但不会单独发布带有文本的正常状态。我需要我的 php 脚本来发布两者。

如果它有@metion + 文字帖子

<a href="profile.php?username='.isset($_POST['red']).'">@mention</a> Hi my name is Dave

或者如果它只是没有@提及的文本

Hi my name is Dave

PHP

if(isset($_POST['toid'])){
    if($_POST['toid']==""){$_POST['toid']=$_SESSION['id'];}


if(isset($_POST['newmsg'])&&isset($_POST['toid'])&&isset($_POST['privacy'])&&isset($_POST['red'])){


$_POST['newmsg']=str_replace('@'.isset($_POST['red']).'','<a href="profile.php?username='.isset($_POST['red']).'">'.isset($_POST['red']).'</a>', $_POST['newmsg']);

$sql="SELECT * FROM user WHERE id=".$_SESSION['id']."";
$query=mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
$row = mysqli_fetch_assoc($query);
 date_default_timezone_set($row['timezone']);
$date=date('y:m:d H:i:s');
        if($_POST['toid']==$_SESSION['id']){
            user_core::create_streamitem("1",mysqli_real_escape_string($mysqli,$_SESSION['id']),mysqli_real_escape_string($mysqli,$_POST['newmsg']),mysqli_real_escape_string($mysqli,$_POST['privacy']),mysqli_real_escape_string($mysqli,$_POST['toid']),mysqli_real_escape_string($mysqli,$date));
        }else{
            user_core::create_streamitem("3",mysqli_real_escape_string($mysqli,$_SESSION['id']),mysqli_real_escape_string($mysqli,$_POST['newmsg']),mysqli_real_escape_string($mysqli,$_POST['privacy']),mysqli_real_escape_string($mysqli,$_POST['toid']),mysqli_real_escape_string($mysqli,$date));
        }
    }

}

AJAX

var content = $(this).children("#toid").val();
            var newmsg= $(this).children("#newmsg").text();
           var username = $(".red").attr("href");
            var privacy = $("#privacy").val();
            $.ajax({
            type: "POST",
            url: "insert.php",
            cache: false,
            dataType: "json",
            data: { toid: content, newmsg: newmsg, privacy: privacy, red: username }, 
            success: function(response){ }

我仍然必须转义我的变量以防止 sql 注入。

【问题讨论】:

  • 旁注:您发布的代码中的&lt;/a&lt; 应读作&lt;/a&gt;
  • 这只是一个示例链接。但会更新它。
  • 对不起,请问..这段代码是做什么的? $_POST['newmsg']==$_POST['newmsg'];
  • @dave 我正要说同样的话 ^^^ $_POST['newmsg']==$_POST['newmsg']; 从技术上讲,您正在比较使用 == 而不是分配 =正如 Randyka 所问,那应该怎么做?
  • 我实际上应该删除它。我正在测试它是否可以使用它,但它没有任何区别。我会删除它。

标签: php ajax json str-replace


【解决方案1】:

我已经开始工作了。我删除了 $_POST['red'] 并将其包裹在 str_replace

if(isset($_POST['toid'])){
    if($_POST['toid']==""){$_POST['toid']=$_SESSION['id'];}


if(isset($_POST['newmsg'])&&isset($_POST['toid'])&&isset($_POST['privacy'])){

if(isset($_POST['red']){
$_POST['newmsg']=str_replace('@'.isset($_POST['red']).'','<a href="profile.php?username='.isset($_POST['red']).'">'.isset($_POST['red']).'</a>', $_POST['newmsg']);
}
$sql="SELECT * FROM user WHERE id=".$_SESSION['id']."";
$query=mysqli_query($mysqli,$sql) or die(mysqli_error($mysqli));
$row = mysqli_fetch_assoc($query);
 date_default_timezone_set($row['timezone']);
$date=date('y:m:d H:i:s');
        if($_POST['toid']==$_SESSION['id']){
            user_core::create_streamitem("1",mysqli_real_escape_string($mysqli,$_SESSION['id']),mysqli_real_escape_string($mysqli,$_POST['newmsg']),mysqli_real_escape_string($mysqli,$_POST['privacy']),mysqli_real_escape_string($mysqli,$_POST['toid']),mysqli_real_escape_string($mysqli,$date));
        }else{
            user_core::create_streamitem("3",mysqli_real_escape_string($mysqli,$_SESSION['id']),mysqli_real_escape_string($mysqli,$_POST['newmsg']),mysqli_real_escape_string($mysqli,$_POST['privacy']),mysqli_real_escape_string($mysqli,$_POST['toid']),mysqli_real_escape_string($mysqli,$date));
        }
    }

}

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    相关资源
    最近更新 更多