PHP& MySQL - 数组到字符串转换错误问题

时间:2010-04-23 01:11:28

标签: php mysql

我在下面列出的这一行上遇到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>';

3 个答案:

答案 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']);

希望这有帮助!