Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
required input
#1
hallo, wie kann ich hier Pflichtfelder definieren?

Code:
/* START */
let buttonKontakt = document.querySelector('button[name="save_kontakt"]');
const formKontakt = document.querySelector('form[name="kontakt"]');

if (buttonKontakt) {
    buttonKontakt.addEventListener('click', () => {
        alert('TEST');
        $.ajax({
            type: 'POST',
            url: '../database/post_kontakt_neu.php',
            data: {
                vorname: formKontakt.querySelector('input[name="firstname"]').value.setAttribute('required', true), // so geht es leider nicht
                nachname: formKontakt.querySelector('input[name="lastname"]').value,
                firma: formKontakt.querySelector('input[name="company"]').value,
                telefon: formKontakt.querySelector('input[name="phone"]').value,
                mobil: formKontakt.querySelector('input[name="mobil"]').value,
                fax: formKontakt.querySelector('input[name="fax"]').value,
                funktion: formKontakt.querySelector('input[name="funktion"]').value,
                email: formKontakt.querySelector('input[name="email"]').value,
                prowl: formKontakt.querySelector('input[name="prowl"]').value,
                divera: formKontakt.querySelector('input[name="divera"]').value,
                synonym: formKontakt.querySelector('input[name="synonym"]').value,
                action: 'insert_kontakt',
            },
            success: function () {
                formKontakt.reset();
                $('#table_kontakt').load(window.location.href + ' #table_kontakt');
            },
        });
    });
}
/* ENDE */
Zitieren
#2
Viel einfacher: Gleich im HTML das Attribute "required" setzen:
Code:
<input name="firstname" required>

Benutzt Du modernes Javascript, wird das Ganze noch viel einfacher:
Code:
    <script>
        fetch('../database/post_kontakt_neu.php', {
            method: 'post',
            body: new FormData(document.querySelector('form'))
        }).then(res => {
            return res.text();
        }).then(res => {
            console.log(res);
            // Hier die Aktivitäten für "success"
            // Die Antwort vom Server findest Du im Parameter "res"
        });
    </script>
D. h. Du brauchtst nicht alle Formularelemente einzeln in "data" einzutragen, das macht das "new FormData" für dich.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#3
(09.07.2024, 08:59)Sempervivum schrieb: Viel einfacher: Gleich im HTML das Attribute "required" setzen:
Code:
<input name="firstname" required>

Benutzt Du modernes Javascript, wird das Ganze noch viel einfacher:
Code:
    <script>
        fetch('../database/post_kontakt_neu.php', {
            method: 'post',
            body: new FormData(document.querySelector('form'))
        }).then(res => {
            return res.text();
        }).then(res => {
            console.log(res);
            // Hier die Aktivitäten für "success"
            // Die Antwort vom Server findest Du im Parameter "res"
        });
    </script>
D. h. Du brauchtst nicht alle Formularelemente einzeln in "data" einzutragen, das macht das "new FormData" für dich.

das habe ich versucht :

Viel einfacher: Gleich im HTML das Attribute "required" setzen:
Code:
<input name="firstname" required>

wenn ich aber <button auf  type="submit" umstelle,  wird der POST blockiert ???
ohne submit hat required keine Auswirkung
Code:
     <button type="button" name="save_kontakt"
             class="btn btn-outline-secondary btn-sm" value="save_kontakt">Kontakt erstellen</button>
    </form>
Zitieren
#4
Verstehe, ohne Submit funktioniert die Validierung des Formulars nicht. Du kannst aber, statt des "click", das Submit des Formulars abfangen und es mit Ajax an den Server schicken. Dann sollte die Validierung greifen:
Code:
         <button type="submit" name="save_kontakt"
             class="btn btn-outline-secondary btn-sm" value="save_kontakt">Kontakt erstellen</button>
    </form>
    <script>
        const form = document.querySelector('form');
        form.addEventListener('submit', event => {
            // Default-Aktion, Abschicken des Formulars, verhindern,
            // weil wir es mit Ajax zum Server schicken wollen:
            event.preventDefault();

            fetch('dein-script.php', {
                method: 'post',
                body: new FormData(form)
            }).then(res => {
                return res.text();
            }).then(res =>] {
                console.log(res);
                // Aktionen für "success" hier
            });
        });
    </script>
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#5
(09.07.2024, 09:28)Sempervivum schrieb: Verstehe, ohne Submit funktioniert die Validierung des Formulars nicht. Du kannst aber, statt des "click", das Submit des Formulars abfangen und es mit Ajax an den Server schicken. Dann sollte die Validierung greifen:
Code:
         <button type="submit" name="save_kontakt"
             class="btn btn-outline-secondary btn-sm" value="save_kontakt">Kontakt erstellen</button>
    </form>
    <script>
        const form = document.querySelector('form');
        form.addEventListener('submit', event => {
            // Default-Aktion, Abschicken des Formulars, verhindern,
            // weil wir es mit Ajax zum Server schicken wollen:
            event.preventDefault();

            fetch('dein-script.php', {
                method: 'post',
                body: new FormData(form)
            }).then(res => {
                return res.text();
            }).then(res =>] {
                console.log(res);
                // Aktionen für "success" hier
            });
        });
    </script>

 Die Validierung des Formulars funktioniert jetzt! Dafür wird jetzt POST nicht ausgeführt sondern GET??
 Siehe Bilder

Code:
/* START */
const form = document.querySelector('form');
form.addEventListener('submit', (event) => {
    // Default-Aktion, Abschicken des Formulars, verhindern,
    // weil wir es mit Ajax zum Server schicken wollen:
    event.preventDefault();

    fetch('../database/post_kontakt_neu.php', {
        method: 'post',
        body: new FormData(form),
    })
        .then((res) => {
            return res.text();
        })
        .then((res) => {
            console.log(res);
            // Aktionen für "success" hier
        });
});
/* ENDE */


Angehängte Dateien Thumbnail(s)
       
Zitieren
#6
Hm, kann es sein, dass Du mehr als ein Formular auf den Seite hast? Was ist pageKontakte.php, ich vermute, die Seite wo das Formular liegt? Und was ist prufen.php?
Am besten wäre es, wenn man sich das in Aktion ansehen könnte. Hast Du es online?
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#7
(09.07.2024, 10:19)Sempervivum schrieb: Hm, kann es sein, dass Du mehr als ein Formular auf den Seite hast? Was ist pageKontakte.php, ich vermute, die Seite wo das Formular liegt? Und was ist prufen.php?
Am besten wäre es, wenn man sich das in Aktion ansehen könnte. Hast Du es online?

Ja, habe  verschiedene Formulare auf der Seite, ist etwas verstrickt (siehe unten).

Was ist pageKontakte.php, ich vermute, die Seite wo das Formular liegt?  "Richtig"

Am besten wäre es, wenn man sich das in Aktion ansehen könnte. Hast Du es online?   "Leider nicht"

PHP-Code:
<?php
    
require("../includes/session.php"); 
    require("../includes/reporting.php");
    require("../includes/config.php");
    require("../includes/header.php");  
    
require("../includes/mysqlPdo.php");
?>
     <div class="content main-hauptfenster">
            <ul class="nav nav-tabs" id="myTab" role="tablist">
                <li class="nav-item">
                    <a class="nav-link active" id="main-tab1-tab" data-toggle="tab" href="#main-tab1" role="tab" aria-controls="main-tab1"
                        aria-selected="true"><?php echo $pageKontakteTab1 ?></a>
                </li>

                 <li class="nav-item">
                    <a class="nav-link" id="main-tab2-tab" data-toggle="tab" href="#main-tab2" role="tab" aria-controls="main-tab2" 
                        aria-selected="false"><?php echo $pageKontakteTab2 ?></a>
                </li>

                <li class="nav-item">
                    <a class="nav-link" id="main-tab3-tab" data-toggle="tab" href="#main-tab3" role="tab" aria-controls="main-tab3" 
                        aria-selected="false"><?php echo $pageKontakteTab3 ?></a>
                </li>

                <li class="nav-item">
                    <a class="nav-link" id="main-tab4-tab" data-toggle="tab" href="#main-tab4" role="tab" aria-controls="main-tab4" 
                        aria-selected="false"><?php echo $pageKontakteTab4 ?></a>
                </li>

                <li class="nav-item">
                    <a class="nav-link" id="main-tab5-tab" data-toggle="tab" href="#main-tab5" role="tab" aria-controls="main-tab5" 
                        aria-selected="false"><?php echo $pageKontakteTab5 ?></a>
                </li>
            </ul>

                <div class="abstand-box"></div>
                    <div class="tab-content" id="myTabContent">
                        <div class="tab-pane fade show active" id="main-tab1" role="tabpanel">
                            <?php require("../tab/tabKontakte.php"); ?>
                        </div>   
                        <div class="tab-pane fade show" id="main-tab2" role="tabpanel">
                            <?php require("../tab/tabKontakteNeu.php"); ?>
                        </div>  
                    </div>    
        </div>
<?php    
    
require("../includes/footer.php");
?>


pruefen.php ist ein Script was alle 5 sec. ausgeführt wird. (hat aber eine ganz andere Funktion)


Angehängte Dateien Thumbnail(s)
   
Zitieren
#8
Wenn Du mehrere Formulare auf der Seite hast, erklärt das einiges: Das document.querySelector liefert das erste Element, auf das der Selektor passt. Wenn wir diesen ein wenig spezifischer machen, sollte es funktionieren. Eine entsprechende Variable hast Du ja in deinem ersten Posting: "formKontakt". Du brauchst nur diese zu verwenden:

Code:
formKontakt.addEventListener('submit', (event) => {
    // Default-Aktion, Abschicken des Formulars, verhindern,
    // weil wir es mit Ajax zum Server schicken wollen:
    event.preventDefault();
    fetch('../database/post_kontakt_neu.php', {
        method: 'post',
        body: new FormData(formKontakt),
    }) // usw.
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren
#9
(09.07.2024, 10:59)Sempervivum schrieb: Wenn Du mehrere Formulare auf der Seite hast, erklärt das einiges: Das document.querySelector liefert das erste Element, auf das der Selektor passt. Wenn wir diesen ein wenig spezifischer machen, sollte es funktionieren. Eine entsprechende Variable hast Du ja in deinem ersten Posting: "formKontakt". Du brauchst nur diese zu verwenden:

Code:
formKontakt.addEventListener('submit', (event) => {
    // Default-Aktion, Abschicken des Formulars, verhindern,
    // weil wir es mit Ajax zum Server schicken wollen:
    event.preventDefault();
    fetch('../database/post_kontakt_neu.php', {
        method: 'post',
        body: new FormData(formKontakt),
    }) // usw.
 
Ich glaube, dass wir auf dem richtigem Weg sind! Danke :-)

Muss ich in PHP noch ein Array erzeugen? (nicht definiertes Array?)

PHP-Code:
<?php
 
require("../includes/mysqlPdo.php");

if(
$_POST["action"] == "insert_kontakt"){
    $vorname $_POST["vorname"];
    $nachname $_POST["nachname"];
    $firma $_POST["firma"]; 
    $telefon $_POST["telefon"]; 
    $mobil $_POST["mobil"];
    $fax $_POST["fax"];
    $funktion $_POST["funktion"];
    $email $_POST["email"];
    $prowl $_POST["prowl"];
    $divera $_POST["divera"];
    $synonym $_POST["synonym"];

    $sql $pdo->prepare("INSERT INTO tbl_kontakte (vorname, nachname, mobilfunk, telefon, firma, details, email, merkmal_1, merkmal_2, merkmal_3, merkmal_4) VALUES ('".$vorname."','".$nachname."', '".$mobil."','".$telefon."' ,'".$firma."' ,'".$fax."' ,'".$email."' ,'".$funktion."' ,'".$prowl."' ,'".$divera."' ,'".$synonym."')");
    $sql->execute();
}
?>


Angehängte Dateien Thumbnail(s)
       
Zitieren
#10
Der Schlüssel "action" existiert nicht in $_POST. Es muss ein Formularelement geben, das "action" als name-Attribut hat und value="insert_kontakt".
Glaube denen, die die Wahrheit suchen, und zweifle an denen, die sie gefunden haben.
(Andrι Gide (1869-1951), frz. Schriftst., 1947 Nobelpreis)
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen:
1 Gast/Gäste