如果你看一下这段代码我真的很感激:
<?php
if(isset($_POST['add'])) {
$self = $_SERVER['PHP_SELF']; //the $self variable equals this file
$ipaddress = ("$_SERVER[REMOTE_ADDR]"); //the $ipaddress var equals users IP
//connect
$connect = mysql_connect($host,$username,$password) or die('<p class="error">Unable to
connect to the database server at this time.</p>');
mysql_select_db($database,$connect) or die('<p class="error">Unable to connect to the
database at this time.</p>');
//fetch data
$data = htmlspecialchars($_POST['list']);
$comment = mysql_real_escape_string($_POST['comment']);
$data_lines = explode( "\r\n", $data );
$comment_lines = explode( "\r\n", $comment );
for($i=0;$i<count($data_lines);$i++)
{
$data_fields = explode( ",", $data_lines[$i]);
$time = time();
$queryb = "INSERT INTO coords SET tag='$data_fields[0]', guild='$data_fields[1]', name='$data_fields[2]', base='$data_fields[3]', econ='$data_fields[5]', maxecon='$data_fields[6]', location='$data_fields[4]', comment='$comment_lines[$i]', ipaddress='$ipaddress' ,date='$time';";
// if it succeeds, display message
if (@mysql_query($queryb))
{
echo('<p class="success">Successful posting of ['.$data_fields[3].']!</p>');
}
else
{
echo('<p class="error">Error could not post ['.$data_fields[3].'] to database!</p>');
}
}//end for loop
}//end if $_POST['add'] statement
?>
正如您所看到的,它从表单的提交中获取数据并将其分解为行。
对于$data
,它会针对每个逗号再次展开它。
然后,它会在新列中为每个逗号插入所有内容,并为每一行插入新行。
现在$comment
,它应该将它插入每行的新行,而不是这样做。
现在正在寻找和测试它几天。
注释列是一个长度为100的varchar。
基本上,除了在每一行的新行上插入$comment
之外,它会做我需要做的一切。
答案 0 :(得分:1)
尝试用"\r\n"
"\n"
答案 1 :(得分:0)
我并不完全确定我确实完全理解了你的问题,但你的字符串中的一个潜在问题是插值。如果没有适当的转义,你永远不应该放置这样的数组。正确的字符串看起来像这样:
$queryb = "INSERT INTO coords SET tag='{$data_fields[0]}',
guild='{$data_fields[1]}', name='{$data_fields[2]}',
base='{$data_fields[3]}', econ='{$data_fields[5]}',
maxecon='{$data_fields[6]}', location='{$data_fields[4]}',
comment='{$comment_lines[$i]}', ipaddress='$ipaddress' ,date='$time';";
答案 2 :(得分:0)
正如plaindrom所提到的,你应该尝试用“\ n”替换“\ r \ n”,因为这将涵盖表单以“\ r \ n”和“\ n”提交的两种情况。我想你可能想考虑将你的转义移到循环中,以确保转义不会引起问题。
您还需要在查询字符串中的变量周围添加括号。通常,“some string $ array [0]”将解析$ array而不是$ array [0]。因此,您希望将查询切换为:
$queryb = "INSERT INTO coords SET tag='{$data_fields[0]}', guild='{$data_fields[1]}', name='{$data_fields[2]}', base='{$data_fields[3]}', econ='{$data_fields[5]}', maxecon='{$data_fields[6]}', location='{$data_fields[4]}', comment='{$comment_lines[$i]}', ipaddress='$ipaddress' ,date='$time';";
从技术上讲,你不需要围绕$ ipaddress和$ time来做这件事,但如果只是为了保持一致,这可能不是一个坏主意。
答案 3 :(得分:0)
第一
print_r($data_lines ) ."<br>";
print_r($comment_lines) ."<br>";
然后每个插页:
$queryb = "INSERT INTO coords SET
tag='" . $data_fields[0] ."',
guild='" . $data_fields[1] ."',
name='". $data_fields[2] ."',
base='".$data_fields[3]."',
econ='".$data_fields[5]."',
maxecon='".$data_fields[6]."',
location='".$data_fields[4]."',
comment='".$comment_lines[$i]."',
ipaddress='".$ipaddress."' ,
date='".$time."';";
echo $queryb . "<br><br>";
看看这是来自客户端的东西。
print '<pre>';
for ($ ind = 0, $ ind <strlen ($ _POST [ 'comment']); $ ind + +) (
$ w = substr ($ _POST [ 'comment'], $ ind, 1);
print $ w. "." ord ($ _POST [ 'comment']). "<br>;
)
print '</ pre>';
答案 4 :(得分:0)
感谢您花时间回答我的问题,但似乎我找到了一个有效的解决方案。在这里:
这里的mysql_real_escape_string()函数似乎打破了评论:
$comment = mysql_real_escape_string($_POST['comment']);
所以我需要做的是为每个反斜杠添加一个额外的反斜杠。 所以这里:
$comment_lines = explode( "\r\n", $comment );
应该是:
$comment_lines = explode( "\\r\\n", $comment );
相反。
无论如何,我必须再次感谢你花时间阅读我的问题并尝试解决它。