Aviso: índice indefinido

Tenha essa excelente página de contato para usar no meu tema. Isso funciona de forma excelente, mas o problema é que, no modo de debugging, eu obtenho erros de índice indefinidos na seguinte linha de código:

$name = $_POST['name']; $email = $_POST['email']; $message = $_POST['text']; $human = $_POST['human']; $submitted = $_POST['submitted']; 

Então eu mudei o código para os próximos dois pedaços de código com base em respostas e tutoriais anteriores:

 $name = (isset($_POST['name']) ? $_POST['name'] : ''); $email = (isset($_POST['email']) ? $_POST['email'] : ''); $message = (isset($_POST['message']) ? $_POST['message'] : ''); $human = (isset($_POST['human']) ? $_POST['human'] : ''); $submitted = (isset($_POST['submitted']) ? $_POST['submitted'] : ''); 

e

  if (isset ($_POST['name'])) { $name = $_POST['name']; } if (isset ($_POST['email'])) { $email = $_POST['email']; } if (isset ($_POST['message'])) { $message = $_POST['message']; } if (isset ($_POST['human'])) { $human = $_POST['human']; } if (isset ($_POST['submitted'])) { $submitted = $_POST['submitted']; } 

O primeiro conjunto de código remove todas as mensagens de erro de debugging, mas quando você envia o formulário, ele aciona o

$ missing_content

mensagem que triggers quando todos os campos são deixados vazios.

O segundo conjunto de código me dá mensagens de erro de debugging de índice indefinidas no seguinte conjunto de código:

 $headers = 'Van: '. $email . "\r\n" . 'Aantwoord op: ' . $email . "\r\n"; if(!$human == 0){ else if ($submitted) my_contact_form_generate_response("error", $missing_content); 

Também me dá o

$ missing_content

erro.

Tudo isso me diz que de alguma forma em algum lugar eu devo definir nome, e-mail, texto, humano e enviado. E é aí que minhas habilidades limitadas me detêm.

Qualquer sugestão sobre como definir o acima e remover os erros e ainda ter o formulário para funcionar como deveria. Antes de me esquecer, o código completo pode ser visto aqui

Solutions Collecting From Web of "Aviso: índice indefinido"

Tente usar o primeiro código – que funcionou, mas deu erros ao enviar o formulário em branco e apenas cahnge isset($_POST['name'] para:

 isset($_POST['name'] && !empty($_POST['name'] 

No seu código, você está desencadeando o $missing_content que os vars estão empty . De acordo com a especificação (veja a referência), uma seqüência vazia (assim não preenchida como em seu caso) irá ativar isso. Além disso, uma seqüência de caracteres é considerada vazia se não estiver configurada de modo que, em adição ao código acima mencionado, eu sugiro que primeiro configure todos os valores primeiro.

Referência:

  • vazio

Agora, pessoalmente, eu mudaria seu código para parecer algo assim (por favor, tenha em mente que está totalmente atrasado e depois de 10 horas de codificação, então vou dar uma peça para começar):

Primeiro, defina algo importante para você, que deve ser preenchido pelo usuário e irá ajudá-lo a verificar o formulário. Eu usarei nome, email e texto.

 $error_name = false; $error_email = false; $error_message = false; 

Estou configurando-os como falsos desde que começamos a assumir que tudo está bem e o usuário irá preencher tudo. Em seguida, estabelecemos , assim como obter os valores. Agora você não publicou seu DOM para o formulário, mas eu suponho que seu botão de envio tenha o nome e a ID enviados .

 if (isset($_POST['submitted'])) { $name = ''; $email = ''; $message = ''; 

Então, após o envio do formulário, os valores são definidos. Claro que eles estão todos vazios agora, mas agora, pelo menos, não teremos problemas com valores perdidos e não definidos. Por isso, podemos omitir mais tarde, porque temos certeza de que eles estão realmente configurados. Agora vamos obter alguns valores reais, então aqui está a continuação do código acima:

 if (trim($_POST['name']) === '') { $error_name = true; } else { $name = trim($_POST['name']); } 

O que acontece aqui é verificar se o valor está definido para nada. E como nós fizemos isso nós mesmos no início, então, se o usuário não inseriu nada, podemos ter certeza de que faltava um campo. Nós também usamos trim então, se alguém usa apenas espaços ou abas etc., ele irá compensá-los para que o valor ainda não seja nada. Se assim for, então, configuremos $error_name como verdadeiro. Nós usaremos isso mais tarde. Agora, se o valor não é igual a nada, sabemos que o usuário realmente teve o esforço de inserir seu nome, então nós atribuímos o valor. Claro que isso é apenas uma parte. Você precisaria fazer isso três vezes por cada valor (nome, email e mensagem).

Ok, estamos todos preparados. Nós temos os valores que o usuário enviou e, mesmo que não tenham entrado nada, pelo menos sabemos que os configuramos para nada e temos erros vars definidos como verdadeiros se tal acontecesse. Tempo para usar esses erros vars:

 if (!$error_name && !$error_email && !$error_message) { //rest of your form sending procedure goes here } else { $contact_form_not_filled = true; } 

Então, no final, verificamos se todos os erros são falsos. Se assim for, podemos prosseguir e enviar o formulário se não definir outro var como verdadeiro, o que, então, podemos usar para acionar, por exemplo, uma mensagem AJAX ou apenas uma simples notificação, assim:

 < ?php if (isset($contact_form_not_filled) && $contact_form_not_filled == true) : ?> < ?php 'Error! ' ?> < ?php 'Fill out the form correctly and try again.' ?> < ?php endif; ?>