kostenloser Webspace werbefrei: lima-city


sql "insert into geht nicht"

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Hallo zusammen,

    ich bin es wieder. Leider funktioniert mein Code bzw. mein Befehl (ein INSERT INTO) überhaupt nicht.

    Hier der Code:

    <?php
    
    switch ($billtype) {
            case ('4'):
            $bon_id = $config['letzte_rechnung'] + 1;
            $pay = "1";
            $bon_type = "4";
            $kunde = $config['aktueller_kunde'];
            $bediener = $config['aktueller_bediener'];
            $delete = "0";
            $copy = "0";
            $gegeben = "0";
            $posten = "0";
            echo "posten: $posten und id: $bon_id";
            $eintragen = mysqli_query($link, "INSERT INTO fins_rechnungen ('bon_id', 'pay', 'bon_type', 'kunde', 'bediener', 'delete', 'copy', 'gegeben', 'posten') VALUES ('$bon_id', '$pay', '$bon_type', '$kunde', '$bediener', '$delete', '$copy', '$gegeben', '$posten')");
            $aendern = mysqli_query($link, "UPDATE fins_config SET config_value = '" . $bon_id . "' WHERE config_id = '6'");
            echo "eintr $eintragen und aend $aendern";
            break;
            }
    
     ?>


    Der Befehl "UPDATE" funktioniert ohne Probleme. Der Wert wird immer brav um 1 erhöht. Jedoch funktioniert der INSERT INTO nicht.

    Die Variablen zeigen an:

    $posten: 0
    $bon_id: 7 (je nach dem, ändert sich ja immer pro Abfrage um +1)
    $eintragen zeigt nichts
    $aendern zeigt 1


    Ich habe schon den Code 100 mal angeschaut, Bug Fixes gemacht, Variablen geprüft und und und... Doch nichts hilft.

    Vielen Dank für eure Hilfe schon einmal im Voraus.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. burgi

    Co-Admin Kostenloser Webspace von burgi

    burgi hat kostenlosen Webspace.

    Hast du dir schon mal den SQL-Querystring als Text komplett zusammengesetzt angeschaut, ob da evt. ein Fehler erkennbar ist? Wenn kein Fehler erkennbar ist: ist der Query-String direkt in PhpMyAdmin ausführbar?
  4. mpsftp schrieb:
    Hallo zusammen,

    ich bin es wieder. Leider funktioniert mein Code bzw. mein Befehl (ein INSERT INTO) überhaupt nicht.

    Hier der Code:

    <?php
    
    switch ($billtype) {
            case ('4'):
            $bon_id = $config['letzte_rechnung'] + 1;
            $pay = "1";
            $bon_type = "4";
            $kunde = $config['aktueller_kunde'];
            $bediener = $config['aktueller_bediener'];
            $delete = "0";
            $copy = "0";
            $gegeben = "0";
            $posten = "0";
            echo "posten: $posten und id: $bon_id";
            $eintragen = mysqli_query($link, "INSERT INTO fins_rechnungen ('bon_id', 'pay', 'bon_type', 'kunde', 'bediener', 'delete', 'copy', 'gegeben', 'posten') VALUES ('$bon_id', '$pay', '$bon_type', '$kunde', '$bediener', '$delete', '$copy', '$gegeben', '$posten')");
            $aendern = mysqli_query($link, "UPDATE fins_config SET config_value = '" . $bon_id . "' WHERE config_id = '6'");
            echo "eintr $eintragen und aend $aendern";
            break;
            }
    
     ?>


    Der Befehl "UPDATE" funktioniert ohne Probleme. Der Wert wird immer brav um 1 erhöht. Jedoch funktioniert der INSERT INTO nicht.

    Die Variablen zeigen an:

    $posten: 0
    $bon_id: 7 (je nach dem, ändert sich ja immer pro Abfrage um +1)
    $eintragen zeigt nichts
    $aendern zeigt 1


    Ich habe schon den Code 100 mal angeschaut, Bug Fixes gemacht, Variablen geprüft und und und... Doch nichts hilft.

    Vielen Dank für eure Hilfe schon einmal im Voraus.




    es gibt wörter, die mysql reserviert hat und nicht (z.b. als spaltennamen) benutzt werden sollen. alle wörter (darunter z.b. auch 'delete') hier: http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-5.html
  5. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Hallo ihr beiden,

    ich bedanke mich sehr bei euch. Euch schickt der Himmel :biggrin:

    Sowohl delete war verkehrt, als auch die Abfrage selber. Ich habe nämlich bei den Spalten-Namen '-Zeichen verwendet. Das ist verkehrt.

    Danke nochmals.

    Gruß,
    mps
  6. Eine Sache seh ich da noch etwas kritisch: wenn einer der verwendeten Werte vom Kunden bestimmt werden kann (z.B. $kunde) ist deine Anwendung anfällig für SQL Injection (Google das am besten mal). Im schlimmsten Fall heißt das, dass ein Kunde beliebig in deiner Datenbank herumfuhrweken kann.
    Abhilfe schafft da z.B. PDO mit prepared statements oder mysqli_real_escape_string.
  7. Autor dieses Themas

    mpsftp

    mpsftp hat kostenlosen Webspace.

    Keine Sorge - Auf die Datei habe nur ich Zugriff. Diese ist per PHP geschützt.
  8. Merke dir für die Zukunft einfach eins. Wenn du SQL-Statements schreibst kannst du egal welche Wörter verwenden. Es ist egal ob das Reserved Words sind oder eben nicht. Aber eben auch nur dann wenn du einfach deine Statements ein wenig sauberer schreibst.

    Verwende immer Backticks und du wirst nie wieder solche Probleme haben!

    Beispiel:
    INSERT INTO `table` (`delete`, `before`, `from`, `in`, `desc`) VALUES ("abc", 1, 5, "2.0334", 32);


    Eine Spalte die from heißt wäre nicht undenkbar für beispielsweise ein Nachrichtensystem, natürlich kann man das verhindern indem man die Spalte dann "msg_from" oder dergleichen nennt aber musst du eben nicht, insofern du einfach Backticks verwendest. Der phpMyAdmin macht dir doch das auch schon immer vor und allgemein ist es jetzt auch nicht so viel mehr Aufwand:wink:.
  9. 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!