2015-07-06 2 views
-1

У меня есть ошибка в поле после отправки. Ошибка Предупреждение: htmlspecialchars() ожидает, что параметр 1 является строкой, массив указан в /path/ on line 420. Ниже приведен фрагмент кода (420 строк)Предупреждение в поле

<table> 
     <tr> 
      <td rowspan="4" style="width: 100px; height:200px"> 
       <div style="position:absolute; top:0; margin:25px"> 
        <input type="checkbox" id="exhibition" name="exhibition" value="Speaker"> 
       </div> 
      </td> 
      <td colspan="2" style="width:400px; height:50px"><b>Speaker</b></td> 
     </tr> 
     <tr> 
      <td style="width:130px; height:50px">Section:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields[]" name="fields[]" value="<?php echo htmlspecialchars($_POST['fields']); ?>"></td> 
     </tr> 
     <tr> 
      <td style="width:130px; height:50px">Topic report:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields[]" name="fields[]" value="<?php echo htmlspecialchars($_POST['fields']); ?>"></td> 
     </tr> 
     <tr> 
      <td style="width:130px; height:50px">Required hardware:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields[]" name="fields[]" value="<?php echo htmlspecialchars($_POST['fields']); ?>"></td> 
     </tr> 
</table> 

Этот отрезанный код связан с этим кодом php.

<?php 
if (isset($_POST["submit"])) { 
    $surname = $_POST['surname']; 
    $name = $_POST['name']; 
    $institution = $_POST['institution']; 
    $post = $_POST['post']; 
    $degree = $_POST['degree']; 
    $title = $_POST['title']; 
    $mailing = $_POST['mailing']; 
    $phone = $_POST['phone']; 
    $email = $_POST['email']; 
    $site = $_POST['site']; 
    $from = 'Energy-knutd'; 
    $from .= "MIME-Version: 1.0"."\r\n" ."Content-type: text/plain; charset='utf-8'". "\r\n"; 
    $to = '[email protected]'; 
    $subject = 'Member';  
    $form = implode(", ", (array)$_POST['participation']); 
    $fields = implode(", ", (array)$_POST['fields']); 
    $exhibition = $_POST['exhibition']; 


    if($_POST['exhibition']) 
    { 
     $body ="From: $surname\n Surname: $name\n Institution: $institution\n Post: $post\n Degree: $degree\n Title: $title\n Mailing: $mailing\n Phone: $phone\n Email: $email\n Site: $site\n Form: $exhibition. $fields"; 
    } else { 
     $body ="From: $surname\n Surname: $name\n Institution: $institution\n Post: $post\n Degree: $degree\n Title: $title\n Mailing: $mailing\n Phone: $phone\n Email: $email\n Site: $site\n Form: $form"; 
    } 



    // Check if name has been entered 
    if(!$_POST['surname']){ 
     $errSurname = 'Pleaes enter your surname'; 
    } 

    if (!$_POST['name']) { 
     $errName = 'Please enter your name'; 
    } 

    if (!$_POST['institution']) { 
     $errInstitution = 'Please enter your name of institution'; 
    } 

    if (!$_POST['post']) { 
     $errPost = 'Please enter your post'; 
    } 

    if (!$_POST['mailing']) { 
     $errMailing = 'Please enter your mailing address'; 
    } 

    if (!$_POST['phone']) { 
     $errPhone = 'Please enter your phone'; 
    } 

    // Check if email has been entered and is valid 
    if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 
     $errEmail = 'Please enter a valid email address'; 
    } 

    if (!$_POST['confirm']) { 
     $errConfirm = 'You should confirm with this statement'; 
    } 

// If there are no errors, send the email 
    if (!$errName && !$errEmail && !$errSurname && !$errInstitution && !$errPost && !$errMailing && !$errPhone && !$errConfirm) { 
     if (mail ($to, $subject, $body, $from)) { 
      $result="<div class='alert alert-success'>Thank You $name! I will be in touch</div>"; 
     } else { 
      $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>'; 
     } 
    } 
} 
?> 
+0

Вы хотите, чтобы вывести определенное поле в столбце, он говорит в ошибке, что функция принимает только строку – Derek

+0

Похоже, что это массив, а не строка. Вы хотели называть hhtmlspecialchars ($ fields) вместо $ _POST ('fields')? – michaelp

+0

"fields" - это массив. В нескольких местах вашего кода вы явно определяете его и используете его как массив. Ошибка просто говорит вам, что вызываемая вами функция не может быть вызвана в массиве. Что вы даже * пытаетесь сделать? – David

ответ

0

htmlspecialchars хочет строку, но вы даете ему массив:

<?php echo htmlspecialchars($_POST['fields']); ?>

Чтобы получить доступ к одному из значений в массиве, вам просто нужно сделать что-то вроде этого:

<?php echo htmlspecialchars($_POST['fields']['your_sub_field']); ?>

0

Когда вы даете элементу формы имя, оканчивающееся в квадратных скобках fields[] вы устанавливаете это значение как массив,

<input type="text" class="form-control" id="fields[]" name="fields[]" value="<?php echo htmlspecialchars($_POST['fields']); ?>"> 

Тогда вы передаете $_POST['fields'] к htmlspecialchars(), которые в качестве ошибки указанной требуется строка.

Вам нужно изменить htmlspecialchars($_POST['fields']); к чему-то вроде:

взрывать все элементы в запятыми список ele1, ele2, ele3

htmlspecialchars(implode(", ", $_POST['fields']));

или только первый элемент htmlspecialchars($_POST['fields'][0]);

или названным htmlspecialchars($_POST['fields']['myelement']);

Вам нужно как-то обработать ваш массив полей и преобразовать его в строку, которую вы хотите сохранить/передать скрипту.

0

htmlspecialchars() ожидает передачу строки, но вы передаете массив в качестве параметра. Также вы отправляете каждое поле в виде массива, поэтому $ _POST ['fields'] - это массив, содержащий все поля, имя атрибута которых равно «полям []». Я не уверен, отображается ли эта часть HTML-кода после отправки электронной почты или раньше, но я думаю, что вы пытаетесь отобразить значение, отправленное почтой.

Если $ _POST [ «поля»] является числовой массив, а значение раздела находится на первой позиции массива, то вы должны сделать что-то вроде этого:

<td style="width:270px; height:50px"><input type="text" class="form-control" id="fields[]" name="fields[]" value="<?php echo htmlspecialchars($_POST['fields'][0]); ?>"></td> 

Во всяком случае, в этом случае Я не понимаю, почему вы отправляете значения этих полей в виде массива.

0

Изменить этот код:

<tr> 
      <td style="width:130px; height:50px">Section:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields0" name="fields[0]" value="<?php echo htmlspecialchars($_POST['fields'][0]); ?>"></td> 
     </tr> 
     <tr> 
      <td style="width:130px; height:50px">Topic report:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields1" name="fields[1]" value="<?php echo htmlspecialchars($_POST['fields'][1]); ?>"></td> 
     </tr> 
     <tr> 
      <td style="width:130px; height:50px">Required hardware:</td> 
      <td style="width:270px; height:50px"><input type="text" class="form-control" id="fields2" name="fields[2]" value="<?php echo htmlspecialchars($_POST['fields'][2]); ?>"></td> 
     </tr> 

Вы должны избежать ввода почты и результат ввода также.

Идентификатор объекта html должен быть уникальным. Если вы хотите идентифицировать несколько объектов, вы должны использовать класс.