Dähne: MySQL 5mal INSERT

Hallo,

könnt Ihr mir helfen, wie ich bis zu 10 INSERT's in eine MySQL Tabelle machen kann.

Ich möchte nicht 10mal mysql_query(insert into ...) schreiben.

Es ist so:

Ich habe auf einer Seite 10 Textfelder. Je nachdem, ob 1,2,3 oder 4,5,6 oder 10 Textfelder ausgefüllt sind, sollten die Inhalte der Textfelder in einer MySQL Datenbank eingetragen werden.

Die Datenbank hat nur ein Feld (titel).

Gruß
Dähne

  1. echo $begrüßung;

    könnt Ihr mir helfen, wie ich bis zu 10 INSERT's in eine MySQL Tabelle machen kann.

    Schau dir im MySQL-Handbuch die Syntax zum INSERT-Statement an. Es gibt eine Variante zum Einfügen von mehreren Zeilen.

    echo "$verabschiedung $name";

    1. Hello,

      könnt Ihr mir helfen, wie ich bis zu 10 INSERT's in eine MySQL Tabelle machen kann.

      Schau dir im MySQL-Handbuch die Syntax zum INSERT-Statement an. Es gibt eine Variante zum Einfügen von mehreren Zeilen.

      Das ist aber nicht unbedingt sinnvoll, weil man dann bei einem Fehler nicht weiß, bei welchem der Datensätze er aufgetreten ist.

      Liebe Grüße aus Syburg

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo,

        Das ist aber nicht unbedingt sinnvoll, weil man dann bei einem Fehler nicht weiß, bei welchem der Datensätze er aufgetreten ist.

        Aha, was schlagst Du dann vor?

        Dähne

        1. Hello,

          Das ist aber nicht unbedingt sinnvoll, weil man dann bei einem Fehler nicht weiß, bei welchem der Datensätze er aufgetreten ist.

          Aha, was schlagst Du dann vor?

          Jeden Datensatz einzeln einfügen. Warum gefällt Dir das nicht? Sind es die zehn Queries, die dich stören, oder aber die Arbeit, dafür eine vernünftige Funktion zu schreiben?

          Liebe Grüße aus Syburg

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallo,

            die querys sind nicht das problem, sondern, ich überlege gerade wie ich das am vernüftigesten mache...

            Zum Beispiel:
            Ich fülle nur 3 von den 10 Textfeldern aus. Wenn ich jetzt die 10 querys (INSERT) mache, würden ja in der Datenbank nach den 3 Zeilen 7 Zeilen nachfolgen wo garnichts steht, also sowas:

            NR  TITEL
            1   titel1
            2   titel2
            3   titel3
            4
            5
            6
            7
            8
            9
            10

            Wenn ich an einem anderen Tag nochmal 2 Zeilen ausfülle, sieht dann die Tabelle so aus:

            NR  TITEL
            1   titel1
            2   titel2
            3   titel3
            4
            5
            6
            7
            8
            9
            10
            11  titel1
            12  titel2
            13
            14
            15
            16
            17
            18
            19
            20

            sowas will ich ja verhindern. Eigentlich wollte ich mit strlen() die textlänge abfragen und so die querys ausführen. Das wären dann 10 if-Anweisingen. Das ist bestimmt nicht so der hit. Da habe ich mir gedacht ob es nicht vielleicht mit empty() besser wäre, damit ich nur eine if-Anweisung habe. Bin jetzt nun ratlos, wie ich es am besten mache. Der Code soll ja schließlich leserlich bleiben.

            Für Eure Vorschläge bin ich Euch sehr dankbar. Ich möchte ja von Euch gar kein fertiges Skript haben.

            Gruß
            Dähne

            1. Hello,

              sowas will ich ja verhindern. Eigentlich wollte ich mit strlen() die textlänge abfragen und so die querys ausführen. Das wären dann 10 if-Anweisingen. Das ist bestimmt nicht so der hit.

              Wie wäre es denn mit einer Schleife?

              <input name="titel[1]" />
                  <input name="titel[2]" />
                  <input name="titel[3]" />

              #----

              foreach ($_POST['titel'] as $key => $val)
                  {
                      $titel = trim($val);
                      if (strlen($titel) > 0 )
                      {
                          $sql = "insert into tabelle set titel = '". mysql_real_escape_string($titel, $con)."'";
                          $res = mysql_query($sql, $con);

              ## und hier noch die Fehler einsammeln, die von den Queries zurückgegeben wurden.

              }
                  }

              Liebe Grüße aus Syburg

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hallo,

                habe dein posting erst jetzt gelesen.

                danke für die hilfe.

                gruß
                dähne

            2. Hallo,

              ich habe vergessen zu fragen, ob es sinnvoll ist, einen Laufindex, z.B. i=1, in einer while-Schleife reinzusetzen, wo eine if-Anweisung ist, die prüft ob das Feld leer "empty()" ist oder die Textlänge strlen() größer als 0 ist. Da habe ich ja wegen der while-Schleife, quasi eine if-Anweisung.

              Nur weiß ich nicht wie ich es mit dem an den $_POST ranschreibe,

              etwa so: $_PSOT[textfeld]i ?? würde es gehen?

              Meine Textfelder sind durchnummeriert:
              textfeld1
              textfeld2
              textfeld3
              .
              .
              .

              Gruß
              Dähne

        2. echo $begrüßung;

          » Das ist aber nicht unbedingt sinnvoll, weil man dann bei einem Fehler nicht weiß, bei welchem der Datensätze er aufgetreten ist.
          Aha, was schlagst Du dann vor?

          Es kommt auf den Anwendungsfall an. Wenn du keinen Unique-Index auf der Spalte hast, dann wird ein Fehler eher bei generellen Problemen auftreten. In dem Fall kannst du ruhig das Multi-Insert verwenden. Hast du einen Unique-Index und dich interessiert es nicht, wenn Datensätze bereits vorhanden sind - es sollen dann einfach die restlichen Datensätze eingetragen werden - dann nimm den Zusatz INSERT IGNORE.

          echo "$verabschiedung $name";