我遇到了通过fwrite处理其他变量的问题。当只包含$ roll变量时,它会正确写入。发生的事情是来自$ roll的随机数进入chat.txt,但是当添加$ quantity和$ dice时,则没有显示任何内容(甚至不是$ roll)。我想要发生的是,用户选择骰子的数量,骰子类型,然后滚动。然后来自roll的文本应写入chat.txt。同样,只有在添加$ quantity和$ dice变量时才会出现问题。请原谅我的新见事。这是代码:
<?php
if(isset($_POST['submit']))//on submit
{
$roll = $_POST['roll'];
$quantity = $_POST['quantity'];
$dice = $_POST['dice'];
$nickname = htmlentities(strip_tags($_POST['nickname']));
fwrite(fopen('chat.txt', 'a'), "<span>". $nickname . " :</span>" . $$roll = str_replace("\n", " ", $quantity, $dice, $roll) . "\n");
fclose($file);
print_r(error_get_last());
}
?>
<form action="" id="rollBox" name="rollBox" method="post">
<input type="text" name="roll" id="demo">
<input type="number" name="quantity" min="1" max="10">
<select name="dice">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<button type="submit" name="submit" >Roll</button>
</form>
<script>
$(document).ready(function () {
$('#rollBox').submit(function(e) {
var x=document.getElementById("demo")
x.value=Math.floor((Math.random()*20)+1);
e.preventDefault();
var obj = $(this), // (*) references the current object/form each time
url = obj.attr('action'),
method = obj.attr('method'),
data = {};
obj.find('[name]').each(function(index, value) {
var obj = $(this),
name = obj.attr('name'),
value = obj.val();
data[name] = value;
});
$.ajax({
url: url,
type: method,
data: data,
success: function(response2) {}
});
return false;
});
});
</script>
<p id="name-area"></p>
<div id="chatWrap"><div id="chat-area"></div></div>
<form id="send-message-area">
<p>Your message: </p>
<textarea id="sendie" maxlength = '200' ></textarea>
</form>
答案 0 :(得分:2)
您在此处有错误:
$$roll = str_replace("\n", " ", $quantity, $dice, $roll)
删除一个 $
另外,请查看str_replace声明:
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
你有太多的争论。
答案 1 :(得分:1)
str_replace("\n", " ", $quantity, $dice, $roll)
您正在向str_replace
函数传递额外的参数。你可能想把最后三个作为一个传递,所以你必须引用它们:
str_replace("\n", " ", "$quantity, $dice, $roll")
答案 2 :(得分:0)
$file
。将你的行分开:
$file = fopen('chat.txt', 'a');
fwrite($file, "<span>". $nickname . " :</span>" . $$roll = str_replace("\n", " ", $quantity, $dice, $roll) . "\n");
fclose($file);
答案 3 :(得分:0)
想出来。这个问题通过你们的答案组合解决了。感谢大家的帮助。顺便说一下,新代码如下:
<div id="pageWrap">
<div id="expander"> Expand</div>
<?php
if(isset($_POST['submit']))//on submit
{
$roll = $_POST['roll'];
$quantity= $_POST['quantity'];
$dice = $_POST['dice'];
$nickname = htmlentities(strip_tags($_POST['nickname']));
$file = fopen('chat.txt', 'a');
fwrite($file, "<span>". $nickname . " :</span>" . $roll = str_replace("\n", " ", " <em> Rolls </em>$quantity $dice <em>for</em> $roll") . "\n");
fclose($file);
}
?>
<form action="" id="rollBox" name="rollBox" method="post">
<input type="text" name="roll" id="demo">
<input type="number" name="quantity" min="1" max="10">
<select name="dice">
<option value="d4">d4</option>
<option value="d6">d6</option>
<option value="d8">d8</option>
<option value="d10">d10</option>
<option value="d12">d12</option>
<option value="d20">d20</option>
</select>
<button type="submit" name="submit" >Roll</button>
</form>
<script>
$(document).ready(function () {
$('#rollBox').submit(function(e) {
var x=document.getElementById("demo")
x.value=Math.floor((Math.random()*20)+1);
e.preventDefault();
var obj = $(this), // (*) references the current object/form each time
url = obj.attr('action'),
method = obj.attr('method'),
data = {};
obj.find('[name]').each(function(index, value) {
var obj = $(this),
name = obj.attr('name'),
value = obj.val();
data[name] = value;
});
$.ajax({
url: url,
type: method,
data: data,
success: function(response2) {}
});
return false;
});
});
</script>
</form>
<p id="name-area"></p>
<div id="chatWrap"><div id="chat-area"></div></div>
<form id="send-message-area">
<p>Your message: </p>
<textarea id="sendie" maxlength = '200' ></textarea>
</form>
</div>