Margit Brnoviak: php mysql

Hallo zusammen, ich finde den eintrag von zuerst leider nicht mehr

mein erstes problem ion php mysql

ich hab eine tabelle in der die ID automatisch logischerweise bestückt wird.

jetzt möchte ich in einer select (php) die id aus der ersten tabelle in eine zweite tabelle per while aus dem html select automatisch eintragen lassen.

heist die id besteht schon und soll sich automatisch wenn ich aus dem options fehlt auswählte eintragen in die neue tabelle.

und ich habe echt keinen plan mehr

ps.: rechtschreibfehler bitte überlesen. pss.: bin nicht blond dennoch zuviel im kopf

  1. aso ja ich kann am server kein mysqli verwenden. der lasst das nicht zu

    1. Hallo Margit,

      aso ja ich kann am server kein mysqli verwenden. der lasst das nicht zu

      Sicher, dass das wirklich der Fall ist? Führe einmal folgendes aus und schaue, ob sich unter „Configuration“ nicht eine Infobox zu mysqli befindet.

      <?php
      phpinfo();
      ?>
      

      Selbst wenn dem so wäre, PHP5.6 ist die letzte noch unterstützte PHP-Version, die noch die mysql-Erweiterung unterstützt. Angenommen, dein Hoster stellt auf PHP7 um, dann musst du alle deine Skripte anpassen.

      Gruß
      Julius

      --

      Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Freiheit der Meinungsäußerung brauchen, weil Sie nichts zu sagen haben.

      Edward Snowden

      1. Hallo Julius,

        ja sogar extra bei anbieter damals schon in anfänger kurs 2013 angefragt.

        doch seit dem nichts mehr an scripten geschrieben, leider

        //// server auszug Erweiterte Informationen

        PHP Version

        5.5.38

        /// php info

        Configuration ADOdb Info Extension requires ADOdb classes Download http://adodb.sourceforge.net/ API Version 5.04

        MySQL Version

        5.5.52

        1. Hallo Margit,

          PHP Version
          5.5.38

          Die 5.5er-Reihe ist bereits seit Mitte 2016 aus dem Support raus.

          /// php info

          Configuration
          ADOdb
          Info Extension requires ADOdb classes
          Download http://adodb.sourceforge.net/
          API Version 5.04
          MySQL Version

          5.5.52

          Das dürfte die MySQL-Version sein.

          Ich glaube, du verstehst da etwas falsch:

          • MySQL ist die Server-Software (bei dir anscheinend Version 5.5.52)
          • mysql und mysqli („i“ für improved) sind beides Schnittstellen (APIs), mit denen du mit PHP auf eine MySQL-Datenbank zugreifen kannst:
            Ein Haus (MySQL) kann mehrere Türen (mysql, pdo, ADOdb und mysqli) haben, durch die du hineingelangen kannst – nur hat man mysql (den Vorgänger von mysqli) halt wegen Baufälligkeit beseitigt.

          Suche mal nach mysqli, wenn diese Zeichenkette wirklich nicht zu finden ist, dann musst du tatsächlich das veraltete mysql benutzen oder den Anbieter wechseln.

          Aber nun zu deiner eigentlichen Frage:
          Du könntest die ID des eben eingefügten Eintrags mittels mysql_insert_id herausfinden und diese dann in die Datenbank eintragen.

          Gruß
          Julius

          --

          Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Freiheit der Meinungsäußerung brauchen, weil Sie nichts zu sagen haben.

          Edward Snowden

        2. Mach mal das, was Julius empfohlen hat. Den Test mit der Ausgabe von phpinfo.

          Wenn der Hosting-Anbieter wirklich kein mysqli bereitstellt (was ich für unwahrscheinlich halte), würde ich einen Wechsel vorschlagen. Bei so grundlegenden Aspekten bringt es nichts, sich selbst künstlich alles zu erschweren, weil die Umgebung eine Standardfunktionalität nicht anbietet.

          mysql ist zwar grundsätzlich ähnlich genug zu mysqli, dass ich jetzt nicht sagen würde, dass es völlig verkehrt ist, zum Lernen noch mit mysql einzusteigen. Vieles lässt sich später fast 1:1 umstellen. Aber dennoch gilt grundsätzlich der vorherige Absatz.

          Edit: Nicht mehr Thread aktualisiert vor Absenden.

  2. Hallo Margit,

    ich finde den eintrag von zuerst leider nicht mehr

    Ich aber :-)

    Dieses Forum besteht aus zwei Foren, dem Meta-Forum und dem SELFHTML-Forum, in dem du gerade gepostet hast, falls dich der Aufbau des Forums verwirrt. Es exitiert auch eine Gesamtübersicht über beide Foren.

    Gruß
    Julius

    --
    > Zu argumentieren, dass Sie keine Privatsphäre brauchen, weil Sie nichts zu verbergen haben, ist so, als würden Sie sagen, dass Sie keine Freiheit der Meinungsäußerung brauchen, weil Sie nichts zu sagen haben. – Edward Snowden
    1. verwirren ist gut

      weiß eg grade keinen ausweg, und will weiter kommen

  3. Tag,

    heist die id besteht schon und soll sich automatisch wenn ich aus dem options fehlt auswählte eintragen in die neue tabelle.

    "wenn ich aus dem options fehlt auswählte eintragen"? Das ist kein Deutsch, tut mir leid.

    ps.: rechtschreibfehler bitte überlesen.

    Rechtschreibung hat einen tieferen Sinn und Zweck. Möchtest du eine Antwort von jemandem, dann schreibe so, dass du auch verstanden wirst. Das da oben ist nur, Verzeihung, zusammenhangloses Gestammel.

    1. VERZEIHUNG,

      <select name="mga_bezeichnung">
      <?php
      //mitgliedschaftsart
      $result_ma=mysql_query("SELECT * FROM mitgliedschaftsart ORDER BY mga_id Limit 2, 999999");	
      while($row_ma=mysql_fetch_array($result_ma))
      {
      //abfrageergebinss
      $mga_id=$row_ma[0];
      $mga_bezeichnung=$row_ma[1];
      echo '<option value="' . $row_ma[0] . ' ' . $row_ma[1] . ' ">' . $row_ma[0] . ' ' . $row_ma[1] . ' </option>';
      } // ende while
      ?>
      </select>	
      

      ich hätte gerne das er die $row_ma in eine extra tabelle/zelle schreibt und nicht alles zusammen. da ich ja sonst keine erneute abfrage per id erstellen könnte

      er merkt sich die ID wenn ich es in einen input feld eintage/habe

      wie bekomm ich das jetzt hin das er aus dieser select/while die id in das entsprechende feld schreibt

      BITTE

      1. Gut, dass ich grad eine Weile nicht am PC war, dein Codebeispiel macht schonmal teilweise klar, was Du möchtest.

        Du erzeugst also eine <select> Element und bestückst die <option>s dazu aus deiner Tabelle der Mitgliedschaftsarten.

        In deinem Beispiel zeigst Du dem Anwender in der Dropdownliste in jeder Zeile die ID und die Art an, willst Du das wirklich? Ich hätte es vermutlich so gemacht (ohne Kommentare)

        while ($row_ma = mysql_fetch_array($result_ma))
        {
           $mga_id = $row_ma[0];
           $mga_bezeichnung = htmlspecialchars($row_ma[1]);
           echo '<option value="$mga_id">$mga_bezeichnung</option>';
        }
        

        Erklärung:

        • die IDs ins Value-Feld, und nur die IDs. Ob Du die ID auch im Optionstext haben willst, ist Deine Entscheidung. Kannst jederzeit ein $mga_id vor die Bezeichnung schreiben
        • Die Bezeichnung mit htmlspecialchars aufbereiten, falls darin zufällig eine spitze Klammer steht oder ein & Zeichen
        • Die ID musst Du nicht aufbereiten. Es ist ein auto-inkrement Feld, also numerisch.
        • Ich verwende das PHP Feature "string parsing", um die Akrobatik mit der Stringverketterei zu vermeiden

        Wenn aus diesem HTML jetzt die Antwort zurückkommt, solltest Du in der $_POST Variablen mga_bezeichnung die ausgewählte ID finden (oder nix wenn der Anwender nichts ausgewählt hat).

        Eins noch: mysql(i)_fetch_array liefert Dir nicht nur die Spalten nach Spaltennummer, sondern auch noch nach Name. Wenn deine Tabelle also die Spalten mga_id und mga_bezeichnung enthält, dann findest Du in einer mga_row vier Einträge:

        mga_row[0] = ID
        mga_row[1] = Bezeichnung
        mga_row['mga_id'] = ID
        mga_row['mga_bezeichnung'] = Bezeichnung
        

        Wenn Du nur die Einträge mit 0 und 1 als Schlüssel haben willst, kannst Du mysql(i)_fetch_row verwenden, oder mysql(i)_fetch_array($result_ma, MYSQL_NUM). Mit mysql(i)_fetch_assoc bzw. mysql(i)_fetch_array($result_ma, MYSQL_ASSOC) bekommst Du nur die Einträge mit den Spaltennamen als Schlüssel.

        Und wo ich das gerade schon erwähne: Die Kombination von SELECT * und Zugriff auf die Row mit Spaltennummern ist ein Lottospiel. Entweder schreibst Du SELECT mga_id, mga_bezeichnung FROM ..., dann weißt Du, an welcher Position welches Feld ist, oder du nimmst zum SELECT * die namentlichen Schlüssel für den Zugriff in der Row. Es ist aber eigentlich gute Praxis, SELECT * nicht in Programmen zu verwenden, sondern immer explizit hinzuschreiben, welche Spalten man haben will.

        Rolf

        1. Tach!

          • Ich verwende das PHP Feature "string parsing", um die Akrobatik mit der Stringverketterei zu vermeiden

          Nimm mal lieber sprintf() (oder in dem Fall printf), um die Akrobatik mit den zusätzlichen Variablen zu vermeiden.

          printf('<option value="%s">%s</option>', 
              htmlspecialchars($row_ma[0], htmlspecialchars($row_ma[1]));
          

          dedlfix.

          1. Die waren eh da ;-)

            Aber wie gesagt - die ID ist numerisch, da braucht man kein htmlspecialchars. Nicht bei den üblichen arabischen Zahlen...

            Margit, wenn Du sprintf nehmen willst und die ID in den value UND in den Klartext setzen willst, dann guck Dir hier das Beispiel 4 an, das zeigt, wie man einen sprintf-Parameter mehrfach verwendet.

            Rolf

        2. guten abend Rolf,

          das von angegebene beispiel

          while ($row_ma = mysql_fetch_array($result_ma)) { $mga_id = $row_ma[0]; $mga_bezeichnung = htmlspecialchars($row_ma[1]); echo '<option value="$mga_id">$mga_bezeichnung</option>'; }

          funkt mit $mga_bezeichnung eben nicht bei mir am server

          1. ich lass nur zur zeit die ID im value anzeigen weil er sie mir in die spalte mga_bezeichnung mit reinschreiben soll, das ich seh ok er behaltet die id

          den wenn ich ihm sage schreib mir die $row_ma[0] in die spalte $mga_id kommt immer die 1

          also nicht die passende mga_id zur mga_bezeichnung. und logischer weise brauche ich um weiter arbeitn zu können die passende id auch im der db. in der spalte mga_id. dort schreibt er immer nur die 1

          und in der mga_bezeichnung logischerweise die richtige weil er sie ja in value drin hat


          so und wie bekomm ich das jetzt hin das er sich das so wei merkt, das er die mga_id die aus dem <option value .... auch im insert in die spalte mga_id schreibt

          ps.: es lasst mir halt keine ruhe, udn ich will das wenigstens fertig bekommen

          1. Hm, ich sehe gerade einen dummen Fehler von mir:

            echo '<option value="$mga_id">$mga_id $mga_bezeichnung</option>';

            Kann nicht funktionieren, weil PHP Variablen nur in Strings mit doppelten Anführungszeichen ersetzt. Es muss natürlich

            echo "<option value='$mga_id'>$mga_bezeichnung</option>";
            

            heißen. Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):

            printf('<option value="1$%s">1$%s 2$%s</option>', $row_ma[0], htmlspecialchars($row_ma[1]));
            

            Die Frage mit der ID 1 zu klären ist schwierig. Zunächst mal muss ich erraten, was Du eigentlich tust, weil deine Beschreibung sehr, nun, kontextfrei und unsortiert ist. Aber ich probiere es mal mit dem, was ich erraten zu haben glaube :)

            Den INSERT machst Du ja sicherlich erst, nachdem der Anwender was ausgewählt und das Form abgeschickt hat. D.h. zwischen Erzeugen des SELECT Elements und dem INSERT gibt es einen Roundtrip Server -> Browser -> Server. Den müssten wir schrittweise überprüfen.

            1. Sieht das Select Element im Browser richtig aus? Wie sieht das erzeugte HTML für das Formular aus, in dem der <select> steht? Kannst Du das mal rauskopieren? Oder - falls die Seite, an der du baust, öffentlich zugänglich ist, einen Link dahin posten?

            2. Was sagt der Netzwerktrace des Browsers über die Daten, die abgeschickt werden? Den findest Du in den Entwicklerwerkzeugen deines Browsers (hat eigentlich jeder moderne Desktop-Browser an Bord).

            3. Wie sieht der Code aus, mit dem Du die Antwort auf das Form verarbeitest?

            Wenn diese Fragen nicht zu dem passen, was Du tust - ok. Was tust Du statt dessen?

            Rolf

            1. Tach!

              Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):

              Nö, ob %s oder der Platzhalter für Zahlen verwendet wird, spielt unter PHP keine große Rolle. Notfalls nimmt PHP selbständig eine Typumwandlung vor. Ich nehme immer %s, wenn ich keine Formatierungszusätze für Zahlen brauche.

              dedlfix.

              1. Hello,

                Oder die Variante von dedlfix, leicht variiert (ich unterstelle, dass deine ID in der Datenbank ein integer-Wert ist; trotzdem muss sie als %s formatiert werden weil mysql/mysqli die Ergebnisse als strings liefert):

                Nö, ob %s oder der Platzhalter für Zahlen verwendet wird, spielt unter PHP keine große Rolle. Notfalls nimmt PHP selbständig eine Typumwandlung vor. Ich nehme immer %s, wenn ich keine Formatierungszusätze für Zahlen brauche.

                Das liegt jetzt aber an der Eigenart von PHP, ohne Spezialfunktionen {z. B. pack()} sowieso nur String-Literale (ist das jetzt der richtige Ausdruck?) zu erzeugen, auch wenn man in Dateien schreibt. Binäre Werte kommen dabei nicht heraus. Und die SQL-Schnittstellen der DBMS erwarten als Daten ja ebensolche "String-Literale", warum man ja Binärdaten und Steuerzeichen innerhalb von Datenwerten escapen muss.

                Wie ist das bei C? Wenn ich da %d anstelle von %s schreibe, wird doch tatsächlich eien binäre Darstellung erzeugt, oder?

                Liebe Grüße
                Tom S.

                --
                Die Krawatte ist das Kopftuch des Westens
                1. Hallo TS,

                  Wie ist das bei C? Wenn ich da %d anstelle von %s schreibe, wird doch tatsächlich eien binäre Darstellung erzeugt, oder?

                  Nein. Dann wird der Pointer auf das erste Byte der Zeichenkette in Dezimalschreibweise formatiert.

                  LG,
                  CK

            2. Hallo und Mahlzeit Rolf,

              nein ich kann die seite nicht öffentlich machen. tut leid.

              HTML Select usw alles okay.

              ich denke es habert das er es sich bis zum insert nicht mehr merkt

              1. "Er" merkt sich gar nichts. DEIN Programm speichert etwas und reicht es angemessen weiter, oder DEIN Programm tut es eben nicht. Wenn die ID beim INSERT nicht ankommt, dann hat DEIN Programm unterwegs etwas verschlampt. Dafür kann es vielfältige Gründe geben, und wir müssen den richtigen finden.

                • Ist meine skizzenhafte Beschreibung der Abläufe in deiner Seite überhaupt richtig?
                • Hast Du überhaupt ein <form> um den <select> herumgelegt?
                  • Welche Methode verwendet es, GET oder POST?
                  • Wenn GET: Erscheint die ausgewählte ID in der URL, die nach dem Submit es Form abgerufen wird?
                  • Wenn POST: Erscheint die ausgewählte ID in den Formulardaten des POST Requests?
                • Wie liest Du beim Empfang des Submit die ausgewählte ID aus? Hast Du eine Kontrollausgabe per ECHO gemacht, kommt der richtige Wert an?

                Rolf