我正在尝试将一些数据放入亚马逊的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>");
}
?>
答案 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]