Connor: Multieingaben via HTML/PHP an MySQL

Hallo zusammen,
habe wie wild gesucht und nichts gefunden was mir hilft bzw verstehe (Anfänger in PHP/MySQL)

Mein Problem:

Ich habe eine SQL-Tabelle mit allen "usern". Diese haben eine eindeutige ID
Nun möchte ich per HTML zb 18 unterschiedliche ID,s aus "user" in eine Tabelle (zb Liga1) zuordnen.

Mit einer ID aus "user" schaffe ich das. Aber mit mehreren IDs leider nicht.

Es wird ausschließlich nur die letzte eingetragene ID aus meinem HTML-Formular in die Tabelle "liga1" eingetragen.

Aufbau Tabelle "user":
ID,pname

Aufbau Tabelle "liga1";
ID, pname

PHP:
$ID = $_POST["id"]; // kommt aus HTML

INSERT INTO liga1 ID,pname FROM user WHRERE ID=§ID;

Danke schon mal an Euch

  1. Hallo Connor,

    $ID = $_POST["id"]; // kommt aus HTML

    Und wie sieht der HTML-Code dazu aus? Evtl. hilft dir der PHP-FAQ-Eintrag "Wie kann man Checkboxen verarbeiten?".

    INSERT INTO liga1 ID,pname FROM user WHRERE ID=§ID;

    Das ist kein gültiger INSERT-Syntax (mal abgesehen davon, dass $ != § ist).

    Gruß,
    Tobias

    1. Hallo Tobi

      klar das § falsch ist. Hatte mich vertippt :)

      Mein HTML Code ist:

      <form action="namen_eintragen.php" method="POST">

      <tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
      <tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
      <tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>

      // Es können bis zu 18 IDs drinne sein

      <tr></tr><td></td><td><input type="submit" name="submit" value="Namen eintragen ..."/></td></tr>

      Das übergebe ich an mein PHP Script das ich dann die IDs aus der "user" Tabelle suchen soll und dann die entsprechenden Namen in die Tabelle "liga1" schreiben soll.

      Mit einer ID geht es ja. Aber nicht mit mehreren

      1. Hallo Connor,

        <tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
        <tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
        <tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>

        Das ist ungünstig. Du könntest zwar alle IDs einzeln abfragen, einfacher wäre es aber wenn du die Methode aus dem ersten Link in meinem Posting von 14:05 Uhr verwenden würdest, da du dann die IDs mit einer Schleife durchlaufen kannst.

        Mit einer ID geht es ja. Aber nicht mit mehreren

        Wie sieht dein Code für eine ID aus? Der INSERT-Query aus deinem Ursprungsposting wird nicht funktionieren ...

        Gruß,
        Tobias

      2. hi,

        <tr></tr><td>Nr 1</td><td><input type="text" name="id1"/></td></tr>
        <tr></tr><td>Nr 2</td><td><input type="text" name="id2"/></td></tr>
        <tr></tr><td>Nr 3</td><td><input type="text" name="id3"/></td></tr>

        Hier könntest du mit arrays arbeiten, und dann die Einträge mit einer Schleife durchgehen.

        Erstmal testen, ob POST dir das liefert, was du erwartest:

        <!-- Value Leer lassen, nur User dürfen was rein schreiben -->  
        <input type="text" name="id[1]" value=""/>  
        <input type="text" name="id[2]" value=""/>  
        <input type="text" name="id[3]" value=""/>
        
        if(isset($_POST['id']))  
        {  
          foreach($_POST['id'] as $userid => $username)  
            if($username)  
              printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?  
        }
        

        Bei insert solltest du die Werte, die du per Variable übergibst, escapen.
        Sicherheitshalber alle Variablen mit "mysql_real_escape_string($user)" an das insert übergeben.

        mfg

        1. Hi Tobi

          leider geht bei mir dein Vorschlag nicht. Meine Code:

          <html>
            <head>
              <title>Liga 1 eintragen</title>
              <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
            </head>
            <body>
          <!-- Value Leer lassen, nur User dürfen was rein schreiben -->
          <input type="text" name="id[1]" value=""/>
          <input type="text" name="id[2]" value=""/>
          <input type="text" name="id[3]" value=""/>
          <tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>

          <?php
          if(isset($_POST['id']))
          {
            foreach($_POST['id'] as $userid => $username)
              if($username)
                echo ('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?
          }
           ?>

          </body>
          </html>

          1. Hi!

            leider geht bei mir dein Vorschlag nicht. Meine Code:

            Mach eine Kontrollausgabe vom gesamten $_POST-Inhalt, dann siehst du vielleicht auch worin das Nicht-Wollen des Scripts begründet liegt. Kontrollausgaben sind die wichtigsten Hilfsmittel zur Fehlersuche. Unter PHP eignet sich dafür meist am besten var_dump() (mit einem <pre> davor für eine lesbare Ausgabe).

            Lo!

          2. Hi,

            leider geht bei mir dein Vorschlag nicht.

            Der stellte keine fertige Lösung dar, sondern beschrieb nur einen kleinen Ausschnitt des HTML-Dokumentes - wohl in der Annahme/Hoffnung, dass du dich zumindest so weit mit HTML beschäftigt hast, dass du den Rest selber sinnvoll ergänzen kannst.

            <body>
            <!-- Value Leer lassen, nur User dürfen was rein schreiben -->
            <input type="text" name="id[1]" value=""/>
            <input type="text" name="id[2]" value=""/>
            <input type="text" name="id[3]" value=""/>
            <tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>

            Zum Übergeben von Nutzereingaben eignen sich Formulare hervorragend.

            Nicht vorhandene Formulare eignen sich dazu aber weniger.

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
          3. hi,

            <!-- Value Leer lassen, nur User dürfen was rein schreiben -->
            <input type="text" name="id[1]" value=""/>
            <input type="text" name="id[2]" value=""/>
            <input type="text" name="id[3]" value=""/>
            <tr></tr><td></td><td><input type="submit" name="submit" value="Absenden"/></td></tr>

            Wie Chris schon schrieb, ohne Formulareingaben kann PHP nicht arbeiten, und Formulardaten setzen ein Formular vorraus.

            mfg

          4. hi,

            es ist sicherlich im Interesse aller hier, dass du sauberen Code produzierst. Darum hier mal eine hilfe, was dein Formular angeht.
            Mit hilfe dieses Codes kannst du dich auf dein Insert konzentrieren, wo ich aber hoffe, dass du dich etwas bemühst, und es selbst versuchst, zu ende zu bringen, uns aber über den Aktuellen Verlauf auf dem laufenden hältst, um grobe patzer auszumerzen.

            Was liefert dir folgendes Konstrukt?

            <form method="post">  
            <!--  
                Value Leer lassen, nur User dürfen was rein schreiben  
                Mache einige Test-durchläufe, indem du unterschiedliche Felder ausfüllst und abschickst  
            -->  
            <input type="text" name="id[1]" value=""/>  
            <input type="text" name="id[2]" value=""/>  
            <input type="text" name="id[3]" value=""/>  
            <input type="submit" name="submit" value="Absenden"/>  
            </form>
            
            <?php  
            if(isset($_POST['id']))  
            {  
              foreach($_POST['id'] as $userid => $username)  
                if($username)  
                  printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?  
            }  
            ?>
            

            mfg

            1. hi,

              es ist sicherlich im Interesse aller hier, dass du sauberen Code produzierst. Darum hier mal eine hilfe, was dein Formular angeht.
              Mit hilfe dieses Codes kannst du dich auf dein Insert konzentrieren, wo ich aber hoffe, dass du dich etwas bemühst, und es selbst versuchst, zu ende zu bringen, uns aber über den Aktuellen Verlauf auf dem laufenden hältst, um grobe patzer auszumerzen.

              Was liefert dir folgendes Konstrukt?

              <form method="post">

              <!--
                  Value Leer lassen, nur User dürfen was rein schreiben
                  Mache einige Test-durchläufe, indem du unterschiedliche Felder ausfüllst und abschickst
              -->
              <input type="text" name="id[1]" value=""/>
              <input type="text" name="id[2]" value=""/>
              <input type="text" name="id[3]" value=""/>
              <input type="submit" name="submit" value="Absenden"/>
              </form>

              
              >   
              > ~~~php
              
              <?php  
              
              > if(isset($_POST['id']))  
              > {  
              >   foreach($_POST['id'] as $userid => $username)  
              >     if($username)  
              >       printf('%s = %s<br/>', $userid, $username); // Kommen hier alle Felder an, die ausgefüllt wurden?  
              > }  
              > ?>
              
              

              Lieben Dank für diesen Code. Liefert mir genau die Nummern die ich eingegeben habe.
              Werde nun an der INSERT Weitergabe per PHP an meiner Tabelle arbeiten.

              Danke für diesen Denkanstoß

  2. Hi,

    Mit einer ID aus "user" schaffe ich das. Aber mit mehreren IDs leider nicht.

    Dazu eignet sich bspw. der IN-Operator.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Hallo Chris,
      danke auch dir.

      Aber ich verstehe den IN Operator nicht. :(

      Wäre es möglich mir dazu ein Bespiel zu geben ?

      Danke sehr

      Dazu eignet sich bspw. der IN-Operator.

      MfG ChrisB

      1. Hi,

        Aber ich verstehe den IN Operator nicht. :(

        *Was* verstehst du daran nicht?

        Wäre es möglich mir dazu ein Bespiel zu geben ?

        Auf der verlinkten Seite ist ein Beispiel.

        Und bitte vermeide TOFU, Danke.

        MfG ChrisB

        --
        “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  3. Ich hoffe diese Nachricht ist kein TOFU. Obwohl ich nicht weis was das ist ;(

    Zurück zu meinem Problem:

    Chris,
    ich versuche echt schon seit einigen Wochen Multieingaben per HTML hinzu bekommen.
    Ich bin ehr ein Autididakt und Frage echt erst wenn ich kurz vor dem Aufgeben bin.

    Habe mir selber aus anderen Snippets einige PHP Sachen zusammen gebaut. Auch das hat ech lange gedauert. Aber ich bin stolz das ich es geschafft hatte.

    Leider muss ich in diesem Forum die Erfahrung machen, das es zwar Antworten gibt aber leider keine echte Hilfe

    1. Hi,

      Ich hoffe diese Nachricht ist kein TOFU. Obwohl ich nicht weis was das ist ;(

      Du bist doch wohl in der Lage, dem Link zu folgen, um die Erklärung nachzulesen?

      ich versuche echt schon seit einigen Wochen Multieingaben per HTML hinzu bekommen.

      Was du unter „Multieingaben” verstehst, ist bei deiner Problembeschreibung höchstens zu erahnen.
      Ein geläufiger Begriff ist das nicht.

      Je exakter du selber dein Problem formulierst, desto näher kommst du dabei auch selber der Lösung.

      Leider muss ich in diesem Forum die Erfahrung machen, das es zwar Antworten gibt aber leider keine echte Hilfe

      Das kommt darauf an, wie man „Hilfe” definiert.

      Ich tue es so, dass ich *konkrete* Fragen gerne nach bestem Wissen beantworte.
      „Ich versteh das nicht” ist aber keine konkrete Frage. So lange du mir nicht erklärst, was genau du nicht verstehst, kann ich dir nicht weiterhelfen.

      MfG ChrisB

      --
      “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
      1. Ich werde morgen die vorgeschlagenen Lösungen ausprobieren und dann berichten :)

        Chris, tut mir leid wenn ich mein Problem formuliert habe wie ein Anfänger. Aber .... ich bin auch Einer.

  4. Hi Chris,

    habs mit dem IN Befahl hinbekommen danke.

    Mein Code ist aber recht grausam. Aber es geht.

    Code in PHP:

    <?php

    include("db_connect.php");

    // In Liga1 eintragen Post kommt aus HTML
    $id1 = $_POST["id1"];
    $id2 = $_POST["id2"];
    $id3 = $_POST["id3"];
    $id4 = $_POST["id4"];
    $id5 = $_POST["id5"];
    $id6 = $_POST["id6"];
    $id7 = $_POST["id7"];
    $id8 = $_POST["id8"];
    $id9 = $_POST["id9"];
    $id10 = $_POST["id10"];
    $id11 = $_POST["id11"];
    $id12 = $_POST["id12"];
    $id13 = $_POST["id13"];
    $id14 = $_POST["id14"];
    $id15 = $_POST["id15"];
    $id16 = $_POST["id16"];
    $id17 = $_POST["id17"];
    $id18 = $_POST["id18"];

    $sql="select * from user";
    $sql= "select * from liga_1";
    $nachliga1 = mysql_query(" INSERT INTO liga_1 (ID,pname) SELECT ID,pname FROM user WHERE ID IN ('$id1','$id2','$id3','$id4','$id5','$id6','$id7','$id8','$id9','$id10','$id11','$id12','$id13','$id14','$id15','$id16','$id17','$id18') ");

    ?>

    1. Hi!

      Mein Code ist aber recht grausam. Aber es geht.

      Allerdings. Es geht sogar noch viel mehr als du dir wünschst. Bitte beachte die Kontextwechsel-Problematik, wenn dir deine Daten lieb sind.

      $id1 = $_POST["id1"];
      $id2 = $_POST["id2"];
      ...

      Warum machst du dir diese Mühe des Umkopierens? Verwende die Werte direkt aber sicher.

      Lo!

      1. Hi Lo und danke für deine Antwort,
        Wie kann ich die Daten direkt verwenden?

        Bitte bedenke ich bin ein Noob :) Aber ich versuche besser zu werden

        1. Hi!

          Wie kann ich die Daten direkt verwenden?

          Im verlinkten Artikel sind Beispiele angegeben (im Abschnitt Verhindernde Maßnahmen). Beachte aber auch, dass das PHP-Feature Magic Quotes angeschaltet sein kann. Dazu findest du ebenfalls Informationen im Artikel, im PHP-Handbuch und an anderen Stellen.

          Die dem Script zur Verfügung gestellten Eingabedaten sind bereits von PHP entgegengenommen und im $_POST-Array abgelegt worden. Array-Elemente sind Variablen wie alle anderen auch, nur die Syntax des Zugriffs ist etwas anders. Es ist nicht notwendig, sie "abzuholen" oder dergleichen. Mit den zusätzlichen Variablen holt man sich nur mehr potentielle Fehlerquellen ins Script.

          Bitte bedenke ich bin ein Noob :) Aber ich versuche besser zu werden

          Das (Besserwerden) ist löblich. Jemandem, der deine Fehler ausnutzt, ist es jedoch egal, welchen Wissensstand du hast. Und mir im Prinzip auch. Anhand des Wortes "Noob" kann ich nämlich nicht erkennen, wo du Nachholebedarf hast. Konkretisiere deine Fragen. Das hilft dir, weil du dann darüber nachdenken und dich mit dem Thema beschäftigen musst und mir als Antwortendem, weil ich effizienter antworten kann.

          Lo!