kostenloser Webspace werbefrei: lima-city


INSERT TO funktioniert nicht

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t*************r

    Hallo :)

    Ich habe folgendes Problem:
    Ich habe Daten aus einem HTML-Form ($email und $Name und eine zufällige ID) und möchte diese in MySQL eintragen:

    <?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    // Um die Fehler zu sehen
    
    $name = $_POST["name"];
    $email = $_POST["email"];
    $id = Rand();
    
    $db = mysqli_connect("***", "***", "***", "***");
    if(!$db)
    {
        exit("Verbindungsfehler: ".mysqli_connect_error());
    } else {
        $result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');";
    }
    ?>
    Die Variablen passen, alles andere auch.
    Es kommt auch kein Fehler, aber die Daten werden nicht eingetragen. Was ist der Fehler?

    MfG Thomas
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Die Variablen passen, alles andere auch.

    Naja, du mischt in der Query erst mal munter die Quotes, da solltest du dir unbedingt die Grundlagen zur Stringverkettung nochmal anschauen.
    Wenn das dann durch ist: Man übernimmt nicht ungeprüft irgendwelche Daten vom Nutzer. Stichwort: SQL-Injection. Dafür gibt's aber in mysqli auch eine schöne Lösung: Prepared Statements.
    Und schlussendlich musst du die Abfrage natürlich auch absetzen. Der SQL-Server kann erst was damit anfangen, wenn er die auch bekommen hat. ;)

    Hat die zufällige ID irgendeinen speziellen Sinn? Oder soll nur jeder Datensatz eine eindeutige ID bekommen? -> Auto Increment
  4. fussballturnier

    fussballturnier hat kostenlosen Webspace.

    Hat die zufällige ID irgendeinen speziellen Sinn? Oder soll nur jeder Datensatz eine eindeutige ID bekommen? -> Auto Increment

    Richtig, kann in PHPMyAdmin eingestellt werden, sonst hast du das Dilemma wenn sich die ID dopppelt.

  5. h***********r


    <?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    // Um die Fehler zu sehen
    
    $name = $_POST["name"];
    $email = $_POST["email"];
    $id = Rand();
    
    $db = mysqli_connect("***", "***", "***", "***");
    if(!$db)
    {
        exit("Verbindungsfehler: ".mysqli_connect_error());
    } else {
        $result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');";
    }
    ?>


    Öhö da gehört kein ; in die " " rein. Absenden geht mit
    $snd = $mysqli->query($result)


    $result = "INSERT INTO `tabelle`(`id`, `name`, `mail`) VALUES ('.$id','.$name','.$email');";


    Ich hoffe aber das du an die Sicherheit deiner Datenbanken denkst ;) Da gibt es sicher einige Nutzer die nicht ihre Finger still halten können.
    Mal kucken ob ich's grad noch zusammen bekomm:
    $mysqli = new mysqli("host", "user", "pass", "db");
    if ($mysqli->connect_errno) {
        echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    }
    if (!($stmt = $mysqli->prepare("INSERT INTO `tabelle`(`name`, `mail`) VALUES (?,?)") {
    		echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    }
    if (!$stmt->bind_param("ss",$name ,$email)) { // string string -> name email | id weg gelassen die kannst per mysql setzen wie schon beschrieben. Die Variablen in der Reihenfolge der ? setzen.
    		echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
    }
    if (!$stmt->execute()) {
    		echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
    }


    Beitrag zuletzt geändert: 30.1.2018 20:48:50 von horstexplorer
  6. lykaner-forum

    lykaner-forum hat kostenlosen Webspace.

    Das "Und schlussendlich musst du die Abfrage natürlich auch absetzen." vom muellerlukas hätte gereicht.
    Würde die Leute auch erstmal verrückt machen. -.-'
  7. h***********r

    Naja das ist Basic. Zudem auch nicht schön das ohne prepared Statements zu lösen. Vor allem weil jeder über $_Post nun seine eigenen Befehle in der Datenbank ausführen kann. Zudem er auch noch deutlich mehr kaputt machen kann.

    Deswegen macht man es lieber gleich richtig.

    Beitrag zuletzt geändert: 1.2.2018 19:07:46 von horstexplorer
  8. lykaner-forum

    lykaner-forum hat kostenlosen Webspace.

    Ja genau und du hast natürlich von der ersten Minute alles gewusst. Lasse doch einfach die Menschen ihre Erfahrungen machen. Manchmal hilft man eher, wenn man eben nicht alles vorkaut sondern nur nen Stubs in die richtige Richtung gibt.
  9. h***********r

    lykaner-forum schrieb:
    Ja genau und du hast natürlich von der ersten Minute alles gewusst. Lasse doch einfach die Menschen ihre Erfahrungen machen. Manchmal hilft man eher, wenn man eben nicht alles vorkaut sondern nur nen Stubs in die richtige Richtung gibt.

    Ich frage mich wie du da drauf kommst....
    Das sind alles nur Tipps weil es nur so funktioniert. Ohne das Absenden einer Abfrage, wird es nicht funktionieren. Ohne SQL-Injection Schutz wird das zwar funktionieren, dann kann man aber eigentlich auch gleich die Datenbank und FTP Logins öffentlich auf der Website angeben.

    Beitrag zuletzt geändert: 2.2.2018 20:34:39 von horstexplorer
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!