Netlify a odesílací formulář - nejspíš

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod RednammoC 3. 9. 2023 19:29

Dobrý den mám stránku vytvořenou v Reactu a vytvořený build vložen manuálně do Netlify. Zde odkaz na formulář https://arevyhs.netlify.app/kontakty , u kterého bych byl rad, kdyby mi po vyplnění odeslal zadané informace na můj email danielconka1993@gmail.com.
Po vyplnění mi nic na mail nedorazí.

1) _redirects mám vytvořený a jeho obsah je
Kód: Vybrat vše
/* /index.html 200


2) U projektu na Netlify jsem aktivoval detekci Form

3) Zde přikládám komponentu odesílacího formuláře
~ nic jiného udělané nemám. Budu rád pokud mi poradíte co s tím dál.
Kód: Vybrat vše
import "./css/Email.css";
import { useState } from "react";

const Email = () => {
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const [text, setText] = useState("");
  const [error, setError] = useState("");

  const validateName = (name) => {
    const nameRegex = /^[a-zA-ZěščřžýáíéúůĚŠČŘŽÝÁÍÉÚŮ,:.() -]{4,20}$/;
    return nameRegex.test(name);
  };

  const validateEmail = (email) => {
    const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailRegex.test(email);
  };

  const validateText = (text) => {
    const textRegex = /^[a-zA-Z0-9ěščřžýáíéúůĚŠČŘŽÝÁÍÉÚŮ,:.() -]{10,100}$/;
    return textRegex.test(text);
  };

  const btnSubmit = (e) => {
    e.preventDefault();

    if (!name || !email || !text) {
      setError("Všechna pole jsou povinná");
    } else if (!validateName(name)) {
      setError("Délku Jména 4 - 100 znaků. Povolené znaky: ,.():-");
    } else if (!validateEmail(email)) {
      setError("Neplatný formát e-mailu");
    } else if (!validateText(text)) {
      setError("Délku text 10 - 100 znaků. Povolené znaky: ,.():-");
    } else {
      setError("Zpráva odeslána, brzy Vás kontaktuji zpět");

        setName("");
        setEmail("");
        setText("");
    }
  };

  return (
    <section className="kontakty">
      {/* Nastavení pro Netify */}
      <form name="contact" method="POST" data-netlify="true" action="/kontakty">
        <h1>Poslat E-mail</h1>
        <div className="kontakty-prvniRadek">
          <div className="sloupec">
            <p>Jméno</p>
            <input
              type="text"
              name="name"
              placeholder="Zadejte jméno"
              value={name}
              onChange={(e) => setName(e.target.value)}
            />
          </div>
          <div className="sloupec">
            <p>E-mail</p>
            <input
              type="email"
              name="email"
              placeholder="Zadejte e-mail"
              value={email}
              onChange={(e) => setEmail(e.target.value)}
            />
          </div>
        </div>
        <textarea
          value={text}
          name="text"
          onChange={(e) => setText(e.target.value)}
          className="kontakty-textarea"
          id=""
          placeholder="Zadejte text"
        ></textarea>
        <div className="container-btnSubmit">
          <p>{error}</p>
          <input className="btnSubmit" type="submit" onClick={btnSubmit} />
        </div>
        {/* Inputy pro Netify */}
        <input
        type="hidden"
        name="to_email"
        value="danielconka1993@gmail.com"
        />
        <input
        type="hidden"
        name="subject"
        value="Zpráva z mé webovky"
        />
        <input
        type="hidden"
        name="message"
        value={`Jméno: ${name}\nE-mail: ${email}\nText: ${text}`}
        />
      </form>
    </section>
  );
};

export default Email;
RednammoC
Junior

Odeslat příspěvekod Just_jo 3. 9. 2023 19:40

Sice neznám Netlify ani jak se s tím pracuje, nicméně mě zarazil obsah fce btnSubmit.
Kde je nějaké odeslání? Pokud zakáži defaultní akci ( e.preventDefault() ) tak někde pak musí být odeslání - ne jen validace
Just_jo
Junior
Uživatelský avatar

Odeslat příspěvekod RednammoC 4. 9. 2023 17:55

Ano Máš pravdu.
Nyní mi po odeslání formuláře vyskočí chyba
Zde je odkaz na formulář
https://statuesque-centaur-33e9a8.netlify.app/kontakty


Page Not Found
Looks like you've followed a broken link or entered a URL that doesn't exist on this site.

Back to our site

If this is your site, and you weren't expecting a 404 for this path, please visit Netlify's "page not found" support guide for troubleshooting tips.


Zde posílám upravenou komponentu, které se to týká
Kód: Vybrat vše
import "./css/Email.css";
import { useState } from "react";

const Email = () => {
  const [name, setName] = useState("");
  const [email, setEmail] = useState("");
  const [text, setText] = useState("");
  const [error, setError] = useState("");

  const validateName = (name) => {
    const nameRegex = /^[a-zA-ZěščřžýáíéúůĚŠČŘŽÝÁÍÉÚŮ,:.() -]{4,20}$/;
    return nameRegex.test(name);
  };

  const validateEmail = (email) => {
    const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
    return emailRegex.test(email);
  };

  const validateText = (text) => {
    const textRegex = /^[a-zA-Z0-9ěščřžýáíéúůĚŠČŘŽÝÁÍÉÚŮ,:.() -]{10,100}$/;
    return textRegex.test(text);
  };

  const btnSubmit = () => {
    // e.preventDefault();

    if (!name || !email || !text) {
      setError("Všechna pole jsou povinná");
    } else if (!validateName(name)) {
      setError("Délku Jména 4 - 100 znaků. Povolené znaky: ,.():-");
    } else if (!validateEmail(email)) {
      setError("Neplatný formát e-mailu");
    } else if (!validateText(text)) {
      setError("Délku text 10 - 100 znaků. Povolené znaky: ,.():-");
    } else {
      setError("Zpráva odeslána, brzy Vás kontaktuji zpět");

        // setName("");
        // setEmail("");
        // setText("");
    }
  };

  return (
    <section className="kontakty">
      {/* Nastavení pro Netify */}
      <form name="contact" method="POST" data-netlify="true" action="/kontakty">
        <h1>Poslat E-mail</h1>
        <div className="kontakty-prvniRadek">
          <div className="sloupec">
            <p>Jméno</p>
            <input
              type="text"
              name="name"
              placeholder="Zadejte jméno"
              value={name}
              onChange={(e) => setName(e.target.value)}
            />
          </div>
          <div className="sloupec">
            <p>E-mail</p>
            <input
              type="email"
              name="email"
              placeholder="Zadejte e-mail"
              value={email}
              onChange={(e) => setEmail(e.target.value)}
            />
          </div>
        </div>
        <textarea
          value={text}
          name="text"
          onChange={(e) => setText(e.target.value)}
          className="kontakty-textarea"
          id=""
          placeholder="Zadejte text"
        ></textarea>
        <div className="container-btnSubmit">
          <p>{error}</p>
          <input className="btnSubmit" type="submit" onClick={btnSubmit} />
        </div>
        {/* Inputy pro Netify */}
        <input
        type="hidden"
        name="to_email"
        value="danielconka1993@gmail.com"
        />
        <input
        type="hidden"
        name="subject"
        value="Zpráva z mé webovky"
        />
        <input
        type="hidden"
        name="message"
        value={`Jméno: ${name}\nE-mail: ${email}\nText: ${text}`}
        />
      </form>
    </section>
  );
};

export default Email;
RednammoC
Junior


Odeslat příspěvekod RednammoC 4. 9. 2023 19:11

Ahoj kamerko. Ano a dle mého jsem splnil všechny co po mě chtějí. Je to ale můj první projekt s Reactu který "se snažím" pustit ven, takže v tom trochu tápu. V PHP mi odeslání dat na email problém nedělá, ale tady jsem už 3 den ztracený. Jsem jdu už jako poslední možnost probrat to s odborníky.
RednammoC
Junior

Odeslat příspěvekod Wikan 4. 9. 2023 19:17

Takže asi nečetl. Píšou tam, že pokud formulář generuješ pomocí JS (tvůj případ), tak musíš mít ve statickém HTML skrytý formulář s inputy odpovídajícími inputům ve tvém generovaném formuláři.
A do svého generovaného formuláře přidat ještě jeden skrytý input.
Pak tam je taky odkaz na tutorial v Reactu.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod RednammoC 4. 9. 2023 19:29

Opravdu četl, ale odkazu na tutoriál v reactu jsem si nevšiml přiznávám. Vyzkouším podle návodu a pokud budu noob, tak se ještě ozvu o radu. Děkuju Moc
RednammoC
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků