У меня есть значение или newmsg, отправленное через мое текстовое поле div, и оно может состоять из текста @mention
или просто текст в зависимости от того, что пользователь вводит в программу обновления статуса.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я добавляю код str_replace для преобразования текста @mention +, он будет публиковать что-либо с текстом @mention +, но не будет публиковать нормальный статус с одним только текстом. Мне нужен мой скрипт php, чтобы опубликовать оба.
Если у него есть сообщение @metion + text
<a href="profile.php?username='.isset($_POST['red']).'">@mention</a> Hi my name is Dave
Или если это просто текст без @mention
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.
У меня это работает. Я удалил $ _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));
}
}
}
Других решений пока нет …