2010-04-23 3 views
1

Я продолжаю получать следующую ошибку Array to string conversion error в этой строке, приведенной ниже. Как я могу исправить эту проблему?PHP & MySQL - Ошибка преобразования строки в строку

$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

Можете ли вы опубликовать фрагмент формы, который показывает элементы 'skill'? – staticsan

ответ

1

Как отмечают документы, explode с пустым ограничителем всегда возвращает FALSE. Что ты пытаешься сделать. На что похож $_POST['skill']?

1

Я бы сказал, что в

$skill = explode('', $_POST['skill']); 

$_POST['skill'] является массивом. explode() 2-й аргумент ожидает строку или что-то, что она может преобразовать в строку, я думаю. Вероятно, это также даст вам головные боли, если вы попытаетесь разбить пустую строковую переменную.

Я также знаю это, потому что ваше имя поля ввода - skill[].

PHP превратит любое имя с [] в конец в массив. Вы даже можете указать подходящий ключ между скобками.

Так что вы, вероятно, можете пропустить эту строку, так как переменная уже является массивом. Если вы не хотите, чтобы он был массивом, отмените значение [] с атрибутом name.

+0

как мне решить мою проблему? – comma

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

Надеюсь, это поможет!

Смежные вопросы