Ankündigung

Einklappen
Keine Ankündigung bisher.

Brauche ein paar Tipps mit Formular PHP und Ajax Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Brauche ein paar Tipps mit Formular PHP und Ajax Problem

    Hallo Community,

    ich habe hier ein problem und bräuchte etwas Hilfe.
    Folgendes Problem habe ich.

    Ich habe ein Ajax basiertes Formular, welches per Ajax und PHP eine E-Mail (sendmail.php)
    abschickt. Soweit Funktioniert auch alles zumindest mit der E-Mail. Daten werden korrekt gesendet.

    Nun Habe ich eine Datenbank angelegt und möcht, dass die Daten zuvor auch in die Datenbank eingetragen werden. Da liegt mein Problem.
    Die Daten werden nicht in die Datenbank eingetragen, aber die E-Mail wird gesendet und Daten sind vorhanden.

    Hier mal meine sendmail.php, die via ajax angesprochen wird:

    PHP-Code:
    <?php
    include("SimplifiedDBPDO.php");
    if (isset(
    $_POST["anrede"]) && isset($_POST["vorname"]) && isset($_POST["nachname"]) && isset($_POST["email"]) && isset($_POST["strasse"]) && isset($_POST["nummer"]) && isset($_POST["plz"]) && isset($_POST["ort"]) && isset($_POST["land"])) {
        
    $sdb      = new SimplifiedDB();
        
    $sdb->dbConnect("localhost""user""pass""db");
        
    $insertRoles                          = array();
        
    $insertRoles["firma"]                 = $_POST["firma"];
        
    $insertRoles["anrede"]                = $_POST["anrede"];
        
    $insertRoles["titel"]                 = $_POST["titel"];
        
    $insertRoles["vorname"]               = $_POST["vorname"];
        
    $insertRoles["nachname"]              = $_POST["nachname"];
        
    $insertRoles["strasse"]               = $_POST["strasse"];
        
    $insertRoles["nummer"]                = $_POST["nummer"];
        
    $insertRoles["plz"]                   = $_POST["plz"];
        
    $insertRoles["ort"]                   = $_POST["ort"];
        
    $insertRoles["land"]                  = $_POST["land"];
        
    $insertRoles["telefon"]               = $_POST["telefon"];
        
    $insertRoles["email"]                 = $_POST["email"];
        
    $insertRoles["neueenergien"]          = $_POST["ne"];
        
    $insertRoles["venturecapital"]        = $_POST["vc"];
        
    $insertRoles["privateequity"]         = $_POST["pe"];
        
    $insertRoles["rohstoffe"]             = $_POST["roh"];
        
    $insertRoles["bestandsimmobilienab"]  = $_POST["biab"];
        
    $insertRoles["bestandsimmobiliennb"]  = $_POST["binb"];
        
    $insertRoles["denkmalimmobilienab"]   = $_POST["diab"];
        
    $insertRoles["denkmalimmobiliennb"]   = $_POST["dinb"];
        
    $insertRoles["investitionslaufzeit"]  = $_POST["il"];
        
    $insertRoles["investitionshoehe"]     = $_POST["ih"];
        
    $sdb->dbInsert("adresspool"$insertRoles);
        if (
    $sdb) {
            
    $to      "yz@email.de";
            
    $subject "Eine Eintragung von " $_POST["nachname"] . " in den Letter";
            
    $message 'Sehr geehrte Damen und Herren,' "\n\n" 'Es wurde eine Eintragung für den Letter vorgenommen.' "\n" 'Folgende Daten hat der Interessent angegeben:' "\n\n" 'Firma: ' $_POST["firma"] . "\n" 'Anrede: ' $_POST["anrede"] . "\n" 'Titel: ' $_POST["titel"] . "\n" 'Vorname: ' $_POST["vorname"] . "\n" 'Nachname: ' $_POST["nachname"] . "\n" 'Straße Nr: ' $_POST["strasse"] . ' ' $_POST["nummer"] . "\n" 'PLZ Ort: ' $_POST["plz"] . ' ' $_POST["ort"] . "\n" 'Land: ' $_POST["land"] . "\n" 'E-Mail: ' $_POST["email"] . "\n" 'Telefon: ' $_POST["telefon"] . "\n" 'Neue Energien: ' $_POST["ne"] . "\n" 'Venture Capital: ' $_POST["vc"] . "\n" 'Private Equity: ' $_POST["pe"] . "\n" 'Rohstoffe: ' $_POST["roh"] . "\n" 'Bestandsimmobilien AB: ' $_POST["biab"] . "\n" 'Bestandsimmobilien NB: ' $_POST["binb"] . "\n" 'Denkmalschutzimmobilien AB: ' $_POST["diab"] . "\n" 'Denkmalschutzimmobilien NB: ' $_POST["dinb"] . "\n" 'Laufzeit: bis ' $_POST["il"] . ' Jahre' "\n" 'Invetitionshöhe: ab € ' $_POST["ih"] . "\n\n" "Die Anfrage wurde von der XYZ Seite gesendet." "\n\n" 'Mit freundlichen Grüßen' "\n" 'Ihr Team';
            
    $from    'test@test.de';
            
    $headers 'From: ' $from "\n" 'Content-Type: text/plain; charset="utf-8"';
            
    mail($to$subject$message$headers);
            echo 
    "Success";
        } 
    }
    Die SimplifiedDBPDO.php ist eine PDO Helper Klasse, die ich auch erfolgreich in anderen Projekten verwendet habe.

    Meine DB habe ich wie folgt erstellt (sql)

    Code:
    CREATE TABLE IF NOT EXISTS `adresspool` (
      `id` int(10) NOT NULL AUTO_INCREMENT,
      `firma` varchar(255) NOT NULL,
      `anrede` varchar(255) NOT NULL,
      `titel` varchar(255) NOT NULL DEFAULT '0',
      `vorname` varchar(255) NOT NULL,
      `nachname` varchar(255) NOT NULL,
      `strasse` varchar(255) NOT NULL,
      `nummer` varchar(8) NOT NULL,
      `plz` varchar(5) NOT NULL,
      `ort` varchar(255) NOT NULL,
      `land` varchar(255) NOT NULL,
      `telefon` varchar(255) NOT NULL DEFAULT '0',
      `email` varchar(255) NOT NULL,
      `neueenergien` int(1) NOT NULL DEFAULT '0',
      `venturecapital` int(1) NOT NULL DEFAULT '0',
      `privateequity` int(1) NOT NULL DEFAULT '0',
      `rohstoffe` int(1) NOT NULL DEFAULT '0',
      `bestandsimmobilienab` int(1) NOT NULL DEFAULT '0',
      `bestandsimmobiliennb` int(1) NOT NULL DEFAULT '0',
      `denkmalimmobilienab` int(1) NOT NULL DEFAULT '0',
      `denkmalimmobiliennb` int(1) NOT NULL DEFAULT '0',
      `investitionslaufzeit` varchar(255) NOT NULL,
      `investitionshoehe` varchar(255) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
    Ich habe Stunden verbracht, der Error log spuckt keine Fehler aus und ich weiss mir keinen Rat mehr.
    Ich habe auch dem $insertRoles Array mal "feste" Werte gegeben und 1mal wurde etwas eingetragen, allerdings 2mal (?). Danach wurde wieder nix eingetragen.

    Es ist wie verhext.

    Hier mal noch mein Ajax Script, den ich verwende

    Code:
    var winW,
    	winH,
    	winS = $(window).scrollTop(),
    	isMobile = false,
    	isTablet = false,
    	tabletThr = 1024,				// tablet threshold
    	mobileThr = 720,				// mobile threshold
    	header,							// header
    	hH = 56,						// header height
    	pR = 4;							// paralax ratio
    
    $.ajaxSetup({ cache: false }); // Prevents caching
    
    // jQ Easing extension
    
    jQuery.easing.swing = jQuery.easing.swing;
    jQuery.extend( jQuery.easing, {
    	def: 'easeOutQuad',
    	swing: function (x, t, b, c, d) {
    		//alert(jQuery.easing.default);
    		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
    	},
    	easeInExpo: function (x, t, b, c, d) {
    		return (t===0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
    	},
    	easeOutExpo: function (x, t, b, c, d) {
    		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
    	},
    	easeInOutExpo: function (x, t, b, c, d) {
    		if (t===0) return b;
    		if (t==d) return b+c;
    		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
    		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
    	}
    });
    
    function initOnLoad() {
    	adjustContent();
    	slideSwitcher( $("#testimonials") );
    	formActionHandler( $("#contact-form"), "php/sendmail.php" );
    }
    
    $(window).on({
    
    	load: function(){
    		initOnLoad();
    	},
    	
    	scroll: function(){				
    		winS = $(window).scrollTop();
    		
    		if ( winS >= 100 ) { header.addClass("compact"); }
    		else { header.removeClass("compact"); }
    		
    	},
    	
    	resize: function(){
    		getWindowDimensions();
    		adjustContent();
    	}
    	
    });
    
    function getWindowDimensions(){
    
    	winH = $(window).height();
    	winW = $(window).width();
    	
    	if ( winW < tabletThr ) { isTablet = true; } else { isTablet = false; }
    	if ( winW < mobileThr ) { isMobile = true; } else { isMobile = false; }
    	
    }
    
    function adjustContent(){
    	
    	// 0. Getting window dimensions
    	
    	getWindowDimensions();
    	
    	// 2. Adjusting testimonials slideshow
    	
    	var liMH = 0,
    		ulH = 0;
    	
    	$("#testimonials-container")
    		.find("li")
    		.each(
    			function(){
    				var liH = $(this).height();
    				if ( liH > liMH ){
    					liMH = liH;
    					ulH = liMH;
    					$("#testimonials-container").height( ulH );
    				}	
    		})
    		.each(
    			function(){
    				var liH = $(this).height();
    				
    				if ( liH < ulH ) {
    					$(this).css({
    						top: (ulH-liH)/2
    					});
    				}
    		});	
    	
    }
    
    function slideSwitcher( slideShow ) {
    	
    	var slides = slideShow.find(".slides"),
    		slideNav = slideShow.find(".slide-nav"),
    		slideNavItems = slideShow.find(".slide-nav li");
    		
    	slideNavItems
    		.on({
    			click: function(){
    				var slideInd = $(this).index();
    				slideNavItems.removeClass("current");
    				$(this).addClass("current");
    				
    				slides
    					.find("li")
    					.removeClass("current")
    					.eq(slideInd)
    					.addClass("current");
    				
    				return false;
    			}
    		});
    }
    
    function formActionHandler( form, actionURL ){	
    	form.on({
    		submit: function(){
    			$(this).removeClass("sent");
    			var reqEmpty = $(this).find(".required").filter( function(){ return $(this).val() == ""; }),
    				data = "";
    			$(this).find(".invalid").removeClass("invalid");
    			if ( reqEmpty.length !== 0 ) {
    				reqEmpty
    					.first()
    					.addClass("invalid")
    					.focus();
    			} else {
    				data = $(this).serialize();			
    				$.ajax({
    					type: "POST",
    					url: actionURL,
    					data: data,
    					beforeSend: function(){ form.addClass("standby"); },
    					success: function( data ) {
    						form.addClass("sent");
    						setTimeout(function(){ resetForm( form ); }, 2000 );
    					}
    				});
    			}
    			return false;
    		}
    	});
    	
    	function resetForm( form ) {
    		form.find("input, textarea").val("");
    	}
    	
    }

    Noch zur Info, das Formular hat inputfelder, checkboxen und 2 Select Felder.
    Bitte helft mir auf die Sprünge.

    Vorab Vielen Dank
    Steffen


  • #2
    Also zunächst vermute ich mal einen Fehler bei der generierten SQL-Query, aber die sieht man nicht, geschweige denn, wie diese zusammengebaut wird.
    Du postest das, was funktioniert. Das macht wenig Sinn, wenn wir Dir helfen sollen Fehler zu finden.

    btw. Bitte nicht mail() verwenden! Warum?
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Hallo Arne Drews,

      erstmal Danke.

      Nun ich Poste eigentlich schon, was nicht funktioniert.
      Aber du hast recht, der SQL-Query wird via dem PDO Helper generiert und dieser beinhaltet keine Fehler. Allerdings kann ich diesen hier nicht veröffentlichen, da dieser ein Kommerzielles Produkt ist.

      Eine kurze Doku befindet sich hier -> Link

      Wie ja schon geschrieben, habe ich anstatt den $_POST vom Formular, mal feste Werte ins Array geschrieben und da hat es, wenngleich auch als doppelter Eintrag, einmal funktioniert.
      Die E-Mail wird jedoch immer mit allen Daten gesendet.
      Den Tipp mit mail() werde ich mir mal zu Herzen nehmen.

      Gruß
      Steffen

      Kommentar


      • #4
        Hier mal mein aktueller Stand,

        Wenn nur die Pflichtfelder ausgefüllt werden, dann wird nichts eingetragen.
        Checkboxen und 2 Input Felder (Titel und Telefon ) können leer sein, da keine Pflichtfelder.
        Und genau da liegt das Problem.

        Werden alle Felder und checkboxen ausgefüllt, funktioniert auch die Datenbankeintragung.
        Was muss ich machen, damit es auch mit leeren oder nur ein paar ausgewählten checkboxen funktioniert?

        Danke
        Steffen

        Kommentar


        • #5
          Du musst prüfen ob die Checkboxen gesetzt sind oder nicht. Wenn eine Checkbox nicht aktiv ist wird sie auch nicht übertragen. Undefinierte Variablen sind in PHP automatisch null. Die Datenbankklasse wird sehr wahrscheinlich null auch als NULL in SQL verwenden. Da die Felder aber alle NOT NULL sind funktioniert das nicht.

          Kommentar


          • #6
            Genau so ist es und wurde bereits geändert.

            Vielen Dank an alle die meine Gehirnwindungen wach gerüttelt haben.

            Kommentar


            • #7
              Der Fehler ist ja schon so was wie ein Klassiker

              Kommentar

              Lädt...
              X