在我的HTML页面上,我有一个通过PHP发送数据库查询的脚本。 现在我需要将带有结果(关联数组)的数组传递回我的HTML页面以填充一些textareas。
问题(我是PHP新手):
1-数组可以按原样传递,还是需要编码/解码或序列化/反序列化(以及如何)?
2-一旦数组到达HTML脚本,我可以通过循环遍历其元素(我的意思是,是否可以在HTML脚本中创建循环?)
3-如果后者不可能,我怎么能指示PHP在HTML页面上填充给定的textarea?
已编辑(现已使用代码):
//HTML
<script>
function PopulateTextAreas()
{
var arrayTextAreasNames = ["name","surname","dob"];
//Now pass this to php
var xhttp = new XMLHttpRequest();
var jsonstring = JSON.stringify(arrayTextAreasNames);
var encoded = encodeURIComponent(jsonstring);
xhttp.open("GET", "LoadFromDb.php?hId=" + "&arrayTextAreasNames=" + encoded, true);
xhttp.onreadystatechange = function()
{
if (this.readyState == 4 && this.status == 200)
{
var decoded = json_decode(this.responseText);
console.log(decoded); //Not working
//A loop would then follow to separate each element of the array and then populate the corresponding textareas is a way similar to below:
//document.getElementById("name").value = this.responseText;
//document.getElementById("surname").value = this.responseText;
//document.getElementById("dob").value = this.responseText;
}
};
xhttp.send();
}
</script>
//PHP
//The associative array is built in a loop like this
$ArrayDbEntryName_and_itsValue[$i] [$DbItemName] = $DbItemValue;
//and it looks like the follow one:
array(3) {
[0]=>
array(1) {
["name"]=>
string(1) "paul"
}
[1]=>
array(1) {
["surname"]=>
string(2) "green"
}
[2]=>
array(1) {
["dob"]=>
string(8) "1/1/1980"
}
//Then the array is echoed back to the HTML page like this
$ResultStringified = JSON.stringify($ArrayDbEntryName_and_itsValue);
echo encodeURIComponent($ResultStringified);
答案 0 :(得分:1)
编辑:以下信息是根据OP(包括海报代码之前)。
PHP中的数组无法传递给HTML。相反,您将该数组转换为更可用的格式,然后可以将其发送到HTML。通常,您使用JSON(Javascript Object Notation)格式。例如,假设您在PHP文件中创建了一个关联数组。
$info = ["firstname" => "somename", "age" => 25, "address"=>["home"=>"something1","collage"=>"something2"]];
现在您必须将$ info转换为JSON格式。 你使用以下功能来做到这一点。
$jsoninfo = json_encode($info);
JSON格式只包含名称 - 值对。名称是&#34;名字&#34;它的价值是&#34; somename&#34;。这是第一个名称 - 价值对。等等。 由于您希望在HTML上显示它,因此您回显$ jsoninfo:
echo $jsoninfo;
这就是HTML的外观。
{"firstname":"somename","age":25,"address":{"home":"something1","collage":"something2"}};
但是你说你想用HTML填充这个textarea。因此我使用它代替那个简单的回声。这将创建一个textarea元素,并将整个值$ jsoninfo放在该textarea元素中。
echo "<textarea>".$jsoninfo."<textarea>"; // this is not a good practice to send value to HTML like this way, since you asked about it I had to write like that. You will need javascript to actually play with the JSON object and then write it to HTML.
与数组不同,从JSON开始,您必须使用名称 - 值对中的名称来获取其关联值。你需要javascript。我在告诉你。
由于这不是关于javascript的教程,我将直接进行。
假设您的html页面中也有一个空的段落元素(我们将需要这个),它的ID是&#34; p1&#34;。如下:
<p id='p1'></p>
现在我们将使用HTML中的以下javascript代码或已经包含在HTML中的外部js文件。在这里,我将其编写为HTML中的内联脚本。
<script>
var getfromtextarea = document.getElementsByTagName("textarea")[0].innerHTML; //get the JSON object from textarea and save it into a javascript variable named getfromtextarea
var get2 = JSON.parse(getfromtextarea); //JSON.parse() function is used to convert JSON object into javascript plain object so that we can get the value associated to its name(remember name-value pair), you will understand this is next line.
document.getElementById("p1").innerHTML = get2.firstname; //this will write/print "somename"(without quotes) inside the p element that we had created in HTML.
</script>
很多事情都是可能的,你只需要学习技巧并遵守规则。我希望它可以帮助你理解一些东西。
答案 1 :(得分:0)
1.如果要传递数组,可以使用JSON格式。看看它http://php.net/manual/en/function.json-encode.php
2.HTML是一种标记语言,而不是脚本。要在浏览器中循环浏览数组,可以使用Javascript。或者您可以使用PHP在服务器端生成HTML页面。
3.举个例子:
<?php
/**
* This is .php file
*
* @var array $rows Array of data which you would to show in textarea
*/
?>
<textarea>
<?php
foreach ($rows as $key => $value): ?>
<p id="<?= $key ?>"><?= $value ?></p>
<?php endforeach; ?>
</textarea>
答案 2 :(得分:0)
我在考虑这样的事情:
在PHP方面:
echo '<div id="my_array" style="display:hidden">' . json_encode($myArray) . '</div>';
在HTML / JavaScript方面:
<script>
var myArray = JSON.parse(document.getElementById("myArray").innerHTML);
//loop through myArray using JavaScript
var arrayLength = myArray.length;
for (var i = 0; i < arrayLength; i++) {
alert(myArray[i]);
//Do something
}
<script>
对于#3,有很多方法。我可能需要查看生成textarea
的代码,以建议如何使用文本填充它。
<强>更新强>
我发现你直接使用var xhttp = new XMLHttpRequest();
..为什么?
我非常推荐使用jQuery AJAX工具(简单的学习曲线和低初始投资)或类似AngularJS(高学习曲线和初始投资)的AJAX请求。
将减少代码,减少调试的内容
如果json_decode()
无效,请尝试JSON.parse(this.responseText);
JSON.parse
是JS函数,而json_decode
是PHP函数,你试图在JS脚本中使用它。
我还没有进一步查看代码,看看如何将文本放到textarea
框中,但是你可以使用AJAX来做这样的事情:
答案 3 :(得分:0)
我知道它已经过去了将近两年,但是仅可以使用一种更简单的PHP
方法,而无需使用JS
或
json
,如果数据源仅是通过HTML
提交的表单。
HTML/PHP
下面设置的代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>PHP HTML - Pass data around with POST</title>
<link rel='stylesheet' type="text/css" href="css/style.css" />
</head>
<body>
<form method="post" name="frmData" action="pass_data_received.php">
Name:<textarea name="name"></textarea>
Surname:<textarea name="surname"></textarea>
Date of birth:<textarea name="dob"></textarea>
<br />
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
<?php
// Process only if the form was submitted
if(isset($_POST['submit'])){
echo '<h3>Data was submitted as shown below.</h3>';
// init variable data to an empty array
$data = [];
// set the data to the post array
$data = $_POST;
// get the count of posted by only the name field (any field can do as long as it is a mandatory/required input)
$dataLength = count($data['name']);
/* You can use a (foreach) loop or a (for) loop to iterate through the data array as below methods */
// Method-1: for each loops through each entry in the data array as key->vlue pairs and echo with line break
// Note: This will not give you index for further referencing
foreach($data as $key=>$value){
echo $key.':'.$value.'<br />';
}
// Method-2: for loop
// Note: This will give you index (i) for reference if required
for( $i=0; $i > $dataLength; $i++ ){
$data['name'] = $_POST['name'];
$data['surname'] = $_POST['surname'];
$data['dob'] = $_POST['dob'];
}
// Print_r the array for debug only
echo '<pre>'; print_r($data); echo '</pre>';
?>
<h3>Data received and processed through POST and PHP only</h3>
<!-- Note:
You can post the same data even further to any HTML or PHP again if needed
using the POST and ACTION
-->
<form method="post" name="frmData" action="pass_data_further.php">
Data of index <?php echo $i; ?> <br />
<hr />
Name:<textarea name="name"><?php echo $data['name'] ?></textarea>
Surname:<textarea name="surname"><?php echo $data['surname'] ?></textarea>
Date of birth:<textarea name="dob"><?php echo $data['dob'] ?></textarea>
<br />
<input type="submit" name="submit" value="Submit">
</form>
<?php
}
?>