Ankündigung

Einklappen
Keine Ankündigung bisher.

Daten in zwei Tabellen eintragen und ID von Autoincrement hole

Einklappen

Neue Werbung 2019

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

  • Daten in zwei Tabellen eintragen und ID von Autoincrement hole

    Servus ich habe das Problem, wenn ich Daten gleichzeitig in zwei Tabellen eintragen möchte, kommt diese Fehlermeldung :

    mysqli_query() expects parameter 3 to be long, string given in C:\xampplite\htdocs\db_projekt\daten_hinzufuegen.p hp on line 51

    Ich habe auch schon danach gegooglet, hab aber nichts gefunden was mir weitergeholfen hat.
    Außerdem würde ich gerne die ID rausfinden, die er über Autoincrement eingibt, damit diese auch in die zweite Tabelle eingefügt werden kann.
    Hier ist übrigens noch ein Teil meines Codes der zum hinzufügen von Daten relevant ist:

    PHP-Code:
    <?php

        
    echo'<link rel="stylesheet" type="text/css" href="styles.css">';

        include(
    'db_verbinden.php');
        
        echo
    '
        <form method="post" action="" name="eintragen"><label>URL:</label>
        <input type="text" name="url" id="url"></input>
        <label>Kategorie:</label>
        <select id="kategorie" name="kategorie" size="1">
            <option value="Suchmaschine" id="kategorie">Suchmaschine</option>
            <option value="Musik" id="kategorie">Musik</option>
            <option value="Foren" id="kategorie">Foren</option>
            <option value="Nachhilfe" id="kategorie">Nachhilfe</option>
            <option value="Spiele" id="kategorie">Spiele</option>
        </select>
        <label>Notiz:</label>
        <textarea name="notiz" cols="40" rows="10" id="notiz"></textarea>
        <input type="submit" name="btn5" id="btn5" value="bestätigen"></form>
        <form action="db_steuerung.php" method="post" name="zurueck"><button>zurück</button></form>
        '
    ;
        
        
    $id 
        
    $now time();
        
    $btn5 $POST["btn5"];
        
    $url $_POST["url"];
        
    $kategorie $_POST["kategorie"];
        
    $datum_eintrag date('y.m.d - H:s:i'$now);
        
    $notiz $_POST["notiz"];
        
        
        if (isset(
    $_POST["btn5"]))
        {
        
    $hinzufuegen 'INSERT INTO 
                            weblinks(url, kategorie, datum_des_eintrags, notiz)
                        VALUES 
                            ("'
    .mysqli_real_escape_string($db,$url).'"
                            ,"'
    .mysqli_real_escape_string($db,$kategorie).'")
                            , "'
    .mysqli_real_escape_string($db,$datum_eintrag).'"
                            , "'
    .mysqli_real_escape_string($db,$notiz).'"
                            )'
    ;  
                            
        
    $add 'INSERT INTO
                            kategorie(id, kategorie)
                        VALUES
                            ("'
    .mysqli_real_escape_string($db$id).'"
                            ,"'
    .mysqli_real_escape_string($db$kategorie).'"
                            )'
    ;
                            
        
    $einfuegen mysqli_query($db$hinzufuegen$add);
        }
    ?>
    Ich hoffe mir kann jemand weiterhelfen. Danke schonmal.

    Mit freundlichen Grüßen
    Stewie


  • #2
    Außerdem würde ich gerne die ID rausfinden, die er über Autoincrement eingibt, damit diese auch in die zweite Tabelle eingefügt werden kann.
    Du meinst diese hier? http://php.net/manual/de/mysqli.insert-id.php
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Lustig
      Erst drauf zugreifen
      PHP-Code:
      $btn5 $POST["btn5"]; 
      und dann überprüfen
      PHP-Code:
      if (isset($_POST["btn5"])) 
      Irgendwie die falsche Reihenfolge, oder?
      Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

      Kommentar


      • #4
        Schau auch mal hier:
        http://php.net/manual/de/mysqli.multi-query.php

        Kommentar


        • #5
          @HeinrichK
          danke für den Link aber was kommt den in die do-Schleife bei mir rein das versteh ich nicht? Ich meine da stehen dann sachen zum zwischenspeichern aber ich wills ja nur in die Datenbank eingeben. Müsste dann nicht einfach ein Insert Befehl stehen?.

          Kommentar


          • #6
            Na ja, das war nur ein Hinweis auf die Möglichkeit von Multi-Querys. Ich sehe jetzt, dass du die ID des ersten Eintrags beim zweiten verwenden willst. Ich würd's so machen:
            PHP-Code:
                $hinzufuegen 'INSERT INTO 
                                    weblinks(url, kategorie, datum_des_eintrags, notiz)
                                VALUES 
                                    ("'
            .mysqli_real_escape_string($db,$url).'"
                                    ,"'
            .mysqli_real_escape_string($db,$kategorie).'")
                                    , "'
            .mysqli_real_escape_string($db,$datum_eintrag).'"
                                    , "'
            .mysqli_real_escape_string($db,$notiz).'"
                                    )'
            ;
            $einfuegen mysqli_query($db$hinzufuegen);
            $id_neu mysqli_insert_id ($hinzufuegen); /* wenn ich den link von hausl richtig verstanden habe */
             
            $add 'INSERT INTO
                                    kategorie(id, kategorie)
                                VALUES
                                    ("'
            .mysqli_real_escape_string($db$id_neu).'"
                                    ,"'
            .mysqli_real_escape_string($db$kategorie).'"
                                    )'

            $einfuegen2 mysqli_query($db$add); 
            *Natürlich ungetestet*

            Kommentar


            • #7
              Zitat von HeinrichK Beitrag anzeigen
              PHP-Code:
                  $hinzufuegen 'INSERT INTO 
                                      weblinks(url, kategorie, datum_des_eintrags, notiz)
                                  VALUES 
                                      ("'
              .mysqli_real_escape_string($db,$url).'"
                                      ,"'
              .mysqli_real_escape_string($db,$kategorie).'")
                                      , "'
              .mysqli_real_escape_string($db,$datum_eintrag).'"
                                      , "'
              .mysqli_real_escape_string($db,$notiz).'"
                                      )'

              Wenn eine Spalte auf den aktuellen Wert gesetzt werden soll ist es sinnvoller einfach NOW() (ohne Anführungszeichen drumrum!) in den Query zu schreiben, das Datum selbst mit date() zusammenzubauen ist unnötig.

              $id_neu = mysqli_insert_id ($hinzufuegen); /* wenn ich den link von hausl richtig verstanden habe */
              Hast du nicht, richtig wäre als Parameter hier $db (also die Variable mit der Verbindung, nicht der Query). Ich bin mir aber auch nicht so sicher ob das ganze so gewollt ist, die ID des Weblinks als ID für die Kategorie zu verwenden ist etwas unsinnig …

              Kommentar


              • #8
                Zitat von HeinrichK Beitrag anzeigen
                Na ja, das war nur ein Hinweis auf die Möglichkeit von Multi-Querys. Ich sehe jetzt, dass du die ID des ersten Eintrags beim zweiten verwenden willst. Ich würd's so machen:
                PHP-Code:
                    $hinzufuegen 'INSERT INTO 
                                        weblinks(url, kategorie, datum_des_eintrags, notiz)
                                    VALUES 
                                        ("'
                .mysqli_real_escape_string($db,$url).'"
                                        ,"'
                .mysqli_real_escape_string($db,$kategorie).'")
                                        , "'
                .mysqli_real_escape_string($db,$datum_eintrag).'"
                                        , "'
                .mysqli_real_escape_string($db,$notiz).'"
                                        )'
                ;
                $einfuegen mysqli_query($db$hinzufuegen);
                $id_neu mysqli_insert_id ($hinzufuegen); /* wenn ich den link von hausl richtig verstanden habe */
                 
                $add 'INSERT INTO
                                        kategorie(id, kategorie)
                                    VALUES
                                        ("'
                .mysqli_real_escape_string($db$id_neu).'"
                                        ,"'
                .mysqli_real_escape_string($db$kategorie).'"
                                        )'

                $einfuegen2 mysqli_query($db$add); 
                Ich bin verwirrt, brauche ich jetzt doch keine multi_queries? Und falls nicht funktioniert das leider auch nicht. Als Fehler zeigt er mir an:
                Undefined variable: POST in C:\xampplite\htdocs\db_projekt\daten_hinzufuegen.p hp on line 28
                aber ich hab doch die variable definiert oder?

                Kommentar


                • #9
                  Welche Variable?

                  Hast du den Hinweis von TK1234 berücksichtigt?

                  Noch ein Tipp (das gewinnt keinen PHP-Schönheitspreis, aber müsste gehen):
                  Nach dem ersten INSERT machst du ein SELECT auf die gleiche Tabelle und fragst nach MAX(id) as id_neu
                  die fügst du dann beim zweiten INSERT mit ein.

                  Kommentar


                  • #10
                    Zitat von Stewie Beitrag anzeigen
                    Ich bin verwirrt, brauche ich jetzt doch keine multi_queries?
                    Wenn du den zweiten Query erst nach dem Absetzen des ersten zusammenbauen kannst brauchst du kein multi_query, nein - generell lassen sich Querys aber ohnehin immer nacheinander ausführen.

                    Undefined variable: POST in C:\xampplite\htdocs\db_projekt\daten_hinzufuegen.p hp on line 28
                    aber ich hab doch die variable definiert oder?
                    Meine Glaskugel verrät mir dass du statt der Variablen $POST die superglobale Variable $_POST meinst.

                    Zitat von HeinrichK Beitrag anzeigen
                    Noch ein Tipp (das gewinnt keinen PHP-Schönheitspreis, aber müsste gehen):
                    Nach dem ersten INSERT machst du ein SELECT auf die gleiche Tabelle und fragst nach MAX(id) as id_neu
                    die fügst du dann beim zweiten INSERT mit ein.
                    Nein! Mach. das. nicht. Das ist Schwachsinn². Um gerade angelegte IDs zu ermitteln *immer* mit mysqli_insert_id() (bzw. entsprechenden Methoden/Funktionen bei anderen Erweiterungen) arbeiten, nur so bekommst du garantiert die richtige ID (mit MAX(id) kannst du auch die ID eines Datensatzes bekommen den parallel ein anderer User angelegt hat).

                    Kommentar


                    • #11
                      @tk1234

                      Das ist Schwachsinn²
                      Bin aber immerhin noch so bei Sinnen, um meinen Denkfehler zu verstehen. Ich bin von einer Anwendung ausgegangen, an der ich alleine arbeite.

                      Du hast insoweit Recht, dass in den Millisekunden zwischen INSERT1, SELECT MAX(id) und INSERT2 ein anderer Eintrag kommen könnte.

                      Kommentar

                      Lädt...
                      X