Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler bei eintragen der Formulardaten in SQL Datenbank

Einklappen

Neue Werbung 2019

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

  • Fehler bei eintragen der Formulardaten in SQL Datenbank

    Hallo Ihr,

    Ich habe vor 2 Monaten begonnen mit PHP & mySQL zu arbeiten. Habe hier aus mehrer Tutorial Videos ein Formular zusammengebaut und versuche die Daten welche ich im Formular eingebe in meine Datenbank-> Tabelle "kunden" einzutragen. Allerdings bekomme ich immer die Nachricht "Konnte den Datensatz nicht eintragen" , und komischer weise wird mir auch kein mysql_error ausgegeben.
    Ich sitze jetzt echt schon viel Stunden daran und habe auch schon einige Fehler gefunden, allerdings passt irgendetwas immer noch nicht...
    Wenn jemand erfahrenes von euch da mal drüber schauen könnte und mir eventuell helfen, Vielen Dank im vorraus, ich bin echt schon verzweifelt ^^

    Code:
    <?php
    	// Eintrag eines neuen Kunden in die Table "kunden" der DB "psytranceshop"
    	// Prüfen, ob sich die Seite selbst aufgerufen hat
    	if ( isset($_REQUEST["do"]) && $_REQUEST["do"] == "insert" )
    	{
    		// Die Seite hat sich selbst aufgerufen
    		// Pflichtfeldkontrolle
    	    
    		$error_msg	=	"";    
    	
    		if ( $_REQUEST["form_name"] == "" )
    		{
    			$error_msg = "Bitte geben Sie ihren Namen an.<br>";
    		}
    		if ( $_REQUEST["form_strasse"] == "" )
    		{
    			$error_msg .= "Bitte geben Sie ihre Strasse an.<br>";
    		}
    		if ( $_REQUEST["form_wohnort"] == "" )
    		{
    			$error_msg .= "Bitte geben Sie ihren Wohnort an.<br>";
    		}
    		if ( $_REQUEST["form_email"] == "" )
    		{
    			$error_msg .= "Bitte geben Sie ihre Email an.<br>";
    		}
    		if (filter_var(($_POST["form_email"]), FILTER_VALIDATE_EMAIL) === false) {
    			echo "E-Mail nicht gültig<br>";
    } 		else {
    			echo "E-Mail gültig<br>";
    }
    		echo $error_msg;		
    
    		if ( $error_msg	== "")
    		{
    			// Alles o.k.
    			// Datenbank-Zugriff
    			$mysqli = new mysqli("localhost", "root", "", "psytranceshop");
    			if ($mysqli->connect_error) 
    			{
    				die ("Fehler bei der Verbindung: " . mysqli_connect_error() );
    			}
    
    			// "land_id" ermitteln aus "form_land"
    			$query = "SELECT laenderid FROM laender WHERE land=";
    			// folgendes ist notwendig, um eventuelle Apostrophe in "form_land" richtig darzustellen
    			$ZwSp = $mysqli->real_escape_string($_REQUEST["form_land"]);
    			$query .= " '" . $ZwSp . "' ";			
    			$ergebnis = $mysqli->query( $query );
    
    			if ($zeile = $ergebnis->fetch_array()) 
    			{
    				$Land = $zeile['laenderid'];
    			}
    			else
    			{
    				$Land = 0;
    			}
    
    			// Neuen Eintrag in die Tabelle "kunden" durchfuehren
    			$query = "INSERT INTO kunden (name, strasse, land, wohnort, plz, email ) VALUES ( ";
    			$query .= " '" . $_REQUEST["form_name"] . "', ";
    			$query .= " '" . $_REQUEST["form_strasse"] . "', ";
    			$query .= " '" . $Land . "' ";
    			$query .= " '" . $_REQUEST["form_wohnort"] . "', ";
    			$query .= " '" . $_REQUEST["form_plz"] . "', ";
    			$query .= " '" . $_REQUEST["form_email"] . "', ";
    			$query .= " ) " ;
    
    			// In die Datenbank eintragen
    
    			$result	= $mysqli->query( $query );
    
    			if ( ! $result )
    			{
    				die ("Konnte den Datensatz nicht eintragen: " . mysql_error() );
    			}
    		}
    	}
    ?>

  • #2
    Du fragst mysql_error() ab, nutzt aber mysqli_* ...

    Reicht das als Tipp?

    PS: Satt $_REQUEST solltest du $_GET oder $_POSt verwenden.
    PS2: Lese dich mal in Prepared Statements ein, momentan ist deine Skript anfällig für SQL-Injection.
    [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
    [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

    Kommentar


    • #3
      Vielen Dank für deine Antwort erstmal. Hab erstmal alles auf POST geändert, danke auch dafür.
      Die SQL Injection verhindere ich mit zb. htmlspecialchars oder? Das is mir beim durchstöbern schon untergekommen, werde auch das einbauen.

      Wegen dem DB eintrag aber, ...
      jetzt wird mir folgendes angezeigt

      Warning: mysqli_error() expects exactly 1 parameter, 0 given in C:\xampp\htdocs\user.php on line 76
      in line 76 steht jetzt

      die ("Konnte den Datensatz nicht eintragen: " . mysqli_error() );

      Kommentar


      • #4
        Zitat von chudl Beitrag anzeigen
        Die SQL Injection verhindere ich mit zb. htmlspecialchars oder?
        Nein, die verhinderst du mit
        Zitat von ChrisvA Beitrag anzeigen
        Prepared Statements

        Kommentar


        • #5
          Für die Warnung lohnt sich ein Blick ins Manual:
          http://php.net/manual/en/mysqli.error.php
          [URL="http://php.net/manual/en/migration55.deprecated.php"]mysql ist veraltet[/URL] [URL="http://php-de.github.io/jumpto/mail-class/"]Mails senden: Ohne Probleme und ohne mail()[/URL]
          [PHP]echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>';[/PHP]

          Kommentar

          Lädt...
          X