从textarea创建数组

时间:2012-02-05 06:47:54

标签: php amazon-simpledb

我正在尝试将一些数据放入亚马逊的simpledb中。我需要为一个属性(逗号分隔)输入多个值,但是因为我现在有了脚本,所以它将所有值作为一个属性输入。我想我需要从textarea中的逗号分隔值创建一个数组,但我不知道该怎么做。哎呀,我真的不知道如何正确地提出这个问题。 :)

这是代码。

<?php require_once('./simpledb/config.inc.php');  ?>
<html>
<body>
<h1>Input Cities</h1>
<?php
$domain = "states";
if (!empty($_POST["state"])) {  // if a value is passed from the key input field save it
$state = $_POST["state"];
} else {
$state = "";
}
$state = stripslashes($state);  // remove PHP escaping 

if (!empty($_POST["cities"])) { // if a value is passed from the key input field save it
$cities = $_POST["cities"];
} else {
$cities = "";
}
//$cities = stripslashes($cities);  // remove PHP escaping 

?>
<FORM ACTION="addcities.php" METHOD=post>

<label>State (Caps)</label><br>
<input type=text name="state" size=10 value="<?php echo $state; ?>"><br>
<label>Cities ('' & comma seperated)</label><br>
<textarea name="cities" cols=60><?php echo($cities); ?></textarea><br>
<INPUT TYPE=submit VALUE="Add Cities">


<?php

if (!class_exists('SimpleDB')) require_once('./simpledb/sdb.php');  

$sdb = new SimpleDB(awsAccessKey, awsSecretKey);    // create connection

$item_name = $state; 
//$input_cities = array("value" => array($cities));
echo "<p>putAttributes() item $item_name<br>"; 
//$putAttributesRequest["make"] = array("value" => "Acura"); // Example add an attribute
$putAttributesRequest['City'] = array("value" => array("Blue","Red")); // Add multiple values

上一行是将多个值添加到属性中的手动方式。我尝试执行以下操作,它获取文本区域的值,但正如我之前提到的,它只创建了一个以逗号分隔的值与多个值。

$putAttributesRequest['City'] = $input_cities; // Add multiple values

以下是代码的其余部分。

$rest = $sdb->putAttributes($domain,$item_name,$putAttributesRequest);
if ($rest) {
echo("Item $item_name created");
echo("RequestId: ".$sdb->RequestId."<br>");
echo("BoxUsage: ".$sdb->BoxUsage." = " . SimpleDB::displayUsage($sdb->BoxUsage)<br>");
} else {
echo("Item $item_name FAILED<br>");
echo("ErrorCode: ".$sdb->ErrorCode."<p>");
}

?>

3 个答案:

答案 0 :(得分:2)

使用php explode功能

例如:

$cities = explode(",", $_POST['cities']);

这仅适用于您的数据格式如下:

  

纽约,拉斯维加斯,悉尼,墨尔本,伦敦

更改爆炸功能的第一部分以匹配文本区域的格式。

然后您可以执行以下操作:

foreach ($cities as $key => $val){
    echo trim($val) . '<br />';
}

将SimpleDB内容放在上面的foreach循环中,并使用$val来使用城市名称。

这将遍历数组并在每个城市上执行SimpleDB。

答案 1 :(得分:0)

在逗号上分解字符串。

$citiesArray = explode(",", $cities);

然后,您需要修剪每个城市,以确保城市名称之前或之后没有额外的空白区域。

call_user_func_array("trim", $cities);

答案 2 :(得分:0)

PUT中还有一个请求参数 - 替换。虽然其默认值为false,但请将其指定为false。如果Replace为false,则该值将作为多值添加到该属性,如果为true,则它将替换旧值。

每次在PUT请求中,您还需要添加一对“属性名称和属性值”。即如果您需要多值V1和属性A的V2然后在你请求它就像这样 -

https://sdb.amazonaws.com/
?Action=PutAttributes
&Attribute.1.Name=A
&Attribute.1.Value=V1
&Attribute.2.Name=A
&Attribute.2.Value=V2
&Attribute.3.Replace=false
&AWSAccessKeyId=[valid access key id]
&DomainName=MyDomain
&ItemName=Item123
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2010-01-25T15%3A03%3A05-07%3A00
&Version=2009-04-15
&Signature=[valid signature]