我在下面列出的这一行上遇到Array to string conversion error
的以下错误。我该如何解决这个问题?
$skill = explode('', $_POST['skill']);
这是PHP& MySQL代码。
$skill = explode('', $_POST['skill']);
$experience = explode('', $_POST['experience']);
$years = explode('', $_POST['years']);
for ($s = 0; $s < count($skill); $s++){
for ($x = 0; $x < count($experience); $x++){
for ($g = 0; $g < count($years); $g++){
if (mysqli_num_rows($dbc) == 0) {
$mysqli = mysqli_connect("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"INSERT INTO learned_skills (user_id, skill, experience, years, date_created)
VALUES ('" . $user_id . "', '" . $skill[$s] . "', '" . $experience[$x] . "', '" . $years[$g] . "', NOW())");
}
if ($dbc == TRUE) {
$dbc = mysqli_query($mysqli,"UPDATE learned_skills
SET skill = '$skill', experience = '$experience', years = '$years', date_created = NOW()
WHERE user_id = '$user_id'");
echo '<p class="changes-saved">Your changes have been saved!</p>';
}
if (!$dbc) {
print mysqli_error($mysqli);
return;
}
}
}
}
这是HTML代码。
<li><label for="skill">Skills: </label><input type="text" name="skill[]" id="skill[]" size="25" maxlength="255" />
<label for="experience">Experience: </label>
<?php
echo '<select id="experience[]" name="experience[]">' . "\n";
foreach($experience_options as $option) {
if ($option == $experience) {
echo '<option value="' . stripslashes(htmlentities(strip_tags($option))) . '" selected="selected">' . stripslashes(htmlentities(strip_tags($option))) . '</option>' . "\n";
} else {
echo '<option value="'. stripslashes(htmlentities(strip_tags($option))) . '">' . stripslashes(htmlentities(strip_tags($option))) . '</option>'."\n";
}
}
echo '</select>';
?>
<label for="years">Years: </label>
<?php
echo '<select id="years[]" name="years[]">' . "\n";
foreach($year_options as $option) {
if ($option == $years) {
echo '<option value="' . stripslashes(htmlentities(strip_tags($option))) . '" selected="selected">' . stripslashes(htmlentities(strip_tags($option))) . '</option>' . "\n";
} else {
echo '<option value="'. stripslashes(htmlentities(strip_tags($option))) . '">' . stripslashes(htmlentities(strip_tags($option))) . '</option>'."\n";
}
}
echo '</select></li>';
答案 0 :(得分:1)
正如文档所述,带有空分隔符的explode
始终返回FALSE。你想做什么。 $_POST['skill']
看起来像什么?
答案 1 :(得分:1)
我会在
中说$skill = explode('', $_POST['skill']);
$_POST['skill']
是一个数组。 explode()
的第二个参数需要一个字符串,或者它可以转换为我认为的字符串。如果您尝试使用空字符串变量进行拆分,它可能会让您头疼。
我也知道这一点,因为您输入字段的名称是skill[]
。
PHP会将最后带有[]
的任何名称转换为数组。您甚至可以在括号中指定您喜欢的密钥。
所以你可以跳过那一行,因为变量已经是一个数组。如果您不希望它成为数组,请将[]
从名称属性中删除。
答案 2 :(得分:1)
在此文本表单元素中:
<label for="skill">Skills: </label>
<input type="text" name="skill[]" id="skill[]" size="25" maxlength="255" />
您已要求PHP将用户提供的文本值存储在名为“技能”的数组中。要将字段存储为简单字符串(稍后可以爆炸),请删除方括号:
<label for="skill">Skills: </label>
<input type="text" name="skill" id="skill" size="25" maxlength="255" />
这应该可以修复数组错误。另一方面,正如其他人所指出的,在这一行中爆炸的空参数可能不正确:
$skill = explode('', $_POST['skill']);
用户提供的技能是否应以逗号分隔?如果是这样,也许这就是你想要的?
$skill = explode(',', $_POST['skill']);
希望这有帮助!