Contact-form-handler.php va deixar de funcionar als meus llocs – PHP – SitePoint Forums

Tinc un parell de llocs web (el meu i un sense ànim de lucre) que tenen un formulari de contacte/donació. Aquest formulari es va obtenir fa molts anys com a forma gratuïta. Ha deixat de funcionar i estic intentant solucionar-ho però no sé PHP. Puc copiar l’script aquí perquè algú el pugui mirar i ajudar-me a solucionar-lo?


Segur que pots copiar el codi aquí. Quan publiqueu el codi al fòrum, heu de formatar-lo. Per fer-ho, podeu seleccionar tot el codi i fer clic a botó o escriviu 3 retrocessos “` en una línia separada abans i després del bloc de codi.

També haurem de saber quins errors tens quan algú envia un formulari. Si no es mostra res al navegador, hauríeu de mirar als registres d’errors. Haurien d’estar disponibles al vostre tauler de control.

També seria útil saber quina versió de PHP està executant el vostre servidor.

Saps què va canviar entre quan va funcionar i després no?
Si es tracta d’un script antic, potser l’amfitrió va deixar de proporcionar una versió de PHP antiga i l’script ja no és compatible. Potser no és això, només la primera idea que em va venir al cap.
Però el registre d’errors és sovint la clau per trobar què passa.

Aquí teniu el codi del formulari de donació. No tinc clar quan això va deixar de funcionar. El meu client fa poc que em va contactar dient que els visitants del seu lloc no podien utilitzar el formulari. Després d’omplir el formulari i fer clic al botó d’enviament, em porta a una pàgina que diu que aquesta pàgina no funciona. Actualment no pot gestionar aquesta sol·licitud. El seu lloc està allotjat a godaddy.com i utilitza PHP 8.1.






	Contact form handler









eregi La funció es va eliminar a PHP 7.
Desgastat preg_match en lloc d’això. Tot i que en aquest cas hauríeu d’utilitzar filter_var per validar una adreça de correu electrònic.
Suposo que l’amfitrió s’ha actualitzat des de PHP 5.X

if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
   $errors .= "rn Error: Invalid email address";
}

Vaig canviar el (!eregi( al que vau suggerir. Vaig trobar un lloc web que és un sandbox PHP i vaig executar el codi. Aquí teniu els resultats).

Warning: Undefined array key "name" in /home/user/scripts/code.php on line 10

Warning: Undefined array key "address" in /home/user/scripts/code.php on line 11

Warning: Undefined array key "city" in /home/user/scripts/code.php on line 12

Warning: Undefined array key "state" in /home/user/scripts/code.php on line 13

Warning: Undefined array key "zipcode" in /home/user/scripts/code.php on line 14

Warning: Undefined array key "email" in /home/user/scripts/code.php on line 15

Warning: Undefined array key "phone" in /home/user/scripts/code.php on line 16

Warning: Undefined array key "memory" in /home/user/scripts/code.php on line 17

Warning: Undefined array key "honor" in /home/user/scripts/code.php on line 18

Warning: Undefined array key "checkbox" in /home/user/scripts/code.php on line 19




	Contact form handler





Error: all fields are required
Error: Invalid email address

Suposo que és perquè no n’hi ha $_POST dades d’un formulari enviat al vostre sandbox.
Realment, tot el processament del formulari hauria d’estar dins d’una condició com aquesta:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // Process form data here!!
}

Per tant, només s’executa quan s’envia el formulari.
Però suposo que això no funcionarà al vostre sandbox, ja que cap dada de publicació ja no donarà lloc a un error, només vol dir que no passa res, perquè ja no intenta processar dades que no hi són.

He penjat el codi PHP al meu lloc de prova i funciona. Almenys ja no tinc cap error. Vaig demanar al meu client que revisés els seus correus electrònics per assegurar-me que n’havia rebut un de prova.

He canviat exactament el mateix codi al meu formulari de contacte i encara tinc un error amb el meu. Diu
Error: tots els camps són obligatoris
Error: adreça electrònica no vàlida

L’única diferència entre el seu codi i el meu és a la part superior

El formulari del lloc del meu client ara em porta a la pàgina d'agraïment després d'omplir el formulari, però no s'envia cap correu electrònic amb la informació del formulari. Vaig canviar l'adreça de correu electrònic a la meva per provar-la i vaig comprovar la meva carpeta no desitjada, però no hi ha correu electrònic, així que no estic segur que això estigui causant. Algú pot tornar a mirar el codi i veure què més cal actualitzar-hi?

El problema podria estar amb el vostre amfitrió i el PHP mail() funció. Seria millor utilitzar alguna cosa com PHPMailer per enviar el correu electrònic. A part de ser més fiable, podeu obtenir diagnòstics si cal.

He baixat el fitxer zip PHPMailer. He llegit el fitxer readme i he buscat diversos vídeos sobre com utilitzar-lo. He d'admetre que estic fent molt gran i estic completament perdut en el que he de fer perquè tot això funcioni. Aquest és l'únic lloc que encara mantinc, ja que m'he retirat del desenvolupament o disseny web. No vull haver de reconstruir el formulari que tinc al seu lloc. Només vull que pugui rebre un correu electrònic indicant que algú ha omplert el formulari en memòria o en honor d'algú.

A la meva carpeta de proves del seu lloc, tinc el fitxer contact-form-handler.php i una cosa que es diu webformaier.php. No estic segur de què és això. La pàgina donada té el formulari. Vaig penjar el fitxer per a PHPMailer i el vaig anomenar PHPMailer.

També vaig comprovar els registres d'errors i rebo avisos de PHP per a claus de matriu no definides per a totes les seccions del formulari. El lloc de godaddy executa PHP 8.1.

Si us plau, tingueu paciència amb mi i expliqueu-me què he de fer per rebre un correu electrònic al meu client que inclogui tots els camps que necessita perquè sàpiga qui ha omplert el formulari i si és en memòria o en honor d'algú. Gràcies.

Bones notícies! Vaig investigar més perquè es va esmentar que podria ser la funció PHP mail(). Vaig trobar una publicació de la comunitat godaddy sobre canviar el registre MX i això ho va solucionar. El formulari no llança errors i el correu electrònic arriba.

Tanmateix, al meu lloc després d'omplir el formulari, encara apareix l'error de tots els camps necessaris, tot i que tots els dimonis s'omplen amb la informació correcta. No estic segur de què està causant aquest error.



1 M'agrada

Vaig investigar més i vaig trobar que en el mateix formulari tenia quan hauria d'haver estat en minúscula. Ara tot funciona. És estrany que ambdues formes funcionin fa anys, només es troben, però les coses van canviar i van causar problemes. Ara puc fer funcionar el formulari del meu client i el meu formulari i enviar el correu electrònic des de l'enviament del formulari.

No sabia sobre la funció obsoleta, així que gràcies per ajudar-lo.

Leave a Comment

Your email address will not be published. Required fields are marked *