Ankündigung

Einklappen
Keine Ankündigung bisher.

Anfägerfrage / Formularaktionen / Kann man das so machen?

Einklappen

Neue Werbung 2019

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

  • Anfägerfrage / Formularaktionen / Kann man das so machen?

    Moin zusammen.
    Ich gehe grade meine ersten PHP Schritte und bastel grade an einfachen Tabellenaktionen mit MySQL. (Datensätze ändern, löschen...)

    Jetzt mal eine Frage dazu:
    Ich lese in vielen Beispielen dazu immer die Variante, mit 2 versteckten Formularfeldern (teilweise mit Javascript) wobei in den Feldern jeweils die auszuführende Aktion und der auszuwählende Datensatz gesendet werden. z.B. so in der Art:
    PHP-Code:
    echo "<input name='action' type='hidden'>"
    echo "<input name='id' type='hidden'>" 
    ich habe mir jetzt, bevor ich auf diese Beispiele gestoßen bin, aus einem anderen Beispiel ein "Variante" zusammenbebastelt, wo ich alles nur mit dem Submit-Button übertrage....
    PHP-Code:
    echo "<input class='...' type='submit' name='change' value='".$dsatz["ID"]."''>"
    echo "<input class='...' type='submit' name='del' value='".$dsatz["ID"]."'>" 
    Dabei hätte der Submit-Button zwar die Aufschrift von $dsatz, da ich den aber sowieso per CSS umstyle, und ihm eine Bild verpasse, ist das ja wurscht.

    Ich werte das dann aus mit:
    PHP-Code:
    if (isset($_POST["change"]))
    ...
    oder

    if (isset($_POST["del"])) 
    das funktioniert echt super, aber da ich diese Variante bisher sonst nirgendwo gesehen habe, frage ich mich natürlich, ob es vielleicht Gründe gibt, die gegen diese Variante sprechen?

    Ich finde es als Anfänger einfacher, als die Variante mit den versteckten Feldern.

    Was meint ihr?
    Sollte ich das schnell wieder vergessen und stoße damit irgendwann auf Probleme oder ist das in Ordnung und vielleicht nur nicht so üblich?


  • #2
    Hallo Supermicha

    Könntest du bitte kurz schildern, was du erreichen möchtest? Ich verstehe denn Sinn dahinter noch nicht.

    Mögliche Antwort:
    Wenn du den Code offline lässt (also um deine Tabellen zu sortieren o.ä.) sollte es ausreichen. Online würde ich es aber anders machen.

    Schöne Grüße,
    Marlon

    Kommentar


    • #3
      Zitat von Supermicha Beitrag anzeigen

      das funktioniert echt super, aber da ich diese Variante bisher sonst nirgendwo gesehen habe, frage ich mich natürlich, ob es vielleicht Gründe gibt, die gegen diese Variante sprechen?
      na, das liegt aber nur daran dass du eventuell nicht so viel PHP Code gesehen hast

      generell ist es aber einfacher wenn eine Form nur eine Sache macht, weil du sonst später ganz viele if issets drin hast.

      übrigens wirst du später probleme mit input haben wenn du ein icon in dein Button einbauen willst, generell sollte man button nutzen und nicht input für Knöpfe.

      auch solltest du mit deinen echos nicht mit doppelpunkt anfangen sondern eher mit hochkomma.

      also

      echo '<input type="hidden" name="action">';

      und wieso schreibst du "del" statt delete? du eignest dir hier schon schlechte Gewohnheiten an.


      ich würde auch nicht mit PHP ein HTML Code ausgebene

      PHP-Code:
      //hier php abschließen
      ?>
      <button class=".." name="change"><?= $dsatz['ID'?></button>
      <button class=".." name="delete"><?= $dsatz['ID'?></button>
      sieht doch gleich besser aus
      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

      Kommentar


      • #4
        Zitat von MS13 Beitrag anzeigen
        Könntest du bitte kurz schildern, was du erreichen möchtest? Ich verstehe denn Sinn dahinter noch nicht.
        Ein Formular mehrere Actions, macht man zum Beispiel wenn man eine Liste an Datensätzen hat
        Zitat von MS13 Beitrag anzeigen
        Wenn du den Code offline lässt (also um deine Tabellen zu sortieren o.ä.) sollte es ausreichen. Online würde ich es aber anders machen.
        Wie denn? "Ich würde es anders machen" ist genau das gleiche wie jemand zu dir sagt "Kann ich dir eine Frage stellen?" statt mal direkt zu fragen
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

        Kommentar


        • #5
          BlackScorp vielen Dank für deine Anregungen und Hinweise.

          das mit den vielen if issets finde ich jetzt nicht so tragisch... Bei der Methode mit den versteckten Feldern, muss ich die doch auch if .. else if... else if... auswerten....
          (zumindest kenn ich derzeit noch keine andere Möglichkeit )

          zu meinem HTML-PHP-Mischmasch....
          ich finde das auch sehr unübersichtlich und ich lese auch überall, das man das trennen sollte, das krieg ich aber noch nicht hin...
          das ganze steckt bei mir in einer while Schleife.... da muss ich doch in PHP bleiben?
          (Die Buttons sind in jeder Spalte hinter den eingefügten Datensätzen)

          hier mal die ganze Schleife
          PHP-Code:
           echo "<table>";
          echo 
          "<tr><th>IP</th><th>Typ</th><th>Name</th><th>Testgerät</th></tr>";
          while (
          $dsatz mysqli_fetch_assoc($res))
          {
            echo 
          "<tr>";
            echo 
          "<td width='180px'><span class='bluetext'>" $dsatz["ip"] . "</span></td>";echo "<td width='100px'><span class='bluetext'>" $dsatz["typ"] . "</span></td>";
            echo 
          "<td width='100px'><span class='bluetext'>" $dsatz["gname"] . "</span></td>";
            echo (
          $dsatz["test"] == "0") ? "<td width='80px'><input title='kein Testgerät' type='checkbox' disabled></td>" "<td width='80px'><input title='Testgerät' type='checkbox' checked disabled></td>";
            echo 
          "<td width='40px'><input title='ändern' class='button change' type='submit' name='change' value='".$dsatz["ID"]."'></td>";
            echo 
          "<td width='40px'><input title='löschen' class='button del' type='submit' name='del' value='".$dsatz["ID"]."'></td>";
            echo 
          "</tr>";
          };
            echo 
          "</table><br>";
          mysqli_close($con);
          ?> 

          Kommentar


          • #6
            Zitat von Supermicha Beitrag anzeigen
            BlackScorp vielen Dank für deine Anregungen und Hinweise.

            das mit den vielen if issets finde ich jetzt nicht so tragisch... Bei der Methode mit den versteckten Feldern, muss ich die doch auch if .. else if... else if... auswerten....
            (zumindest kenn ich derzeit noch keine andere Möglichkeit )
            und so fängt der Code Horror an wart mal ab wenn du ein script mit über 2000 zeilen code mit if else if else if hast..

            ich mache das so, dass ich zunächst schaue ob ein else überhaupt notwending ist. Ich programmiere ohne elses

            Ich habe mal ein Video dazu erstellt (schamlose Eigenwerbung) https://www.youtube.com/watch?v=YbYJQvBI1sY
            Zitat von Supermicha Beitrag anzeigen
            zu meinem HTML-PHP-Mischmasch....
            ich finde das auch sehr unübersichtlich und ich lese auch überall, das man das trennen sollte, das krieg ich aber noch nicht hin...
            das ganze steckt bei mir in einer while Schleife.... da muss ich doch in PHP bleiben?
            (Die Buttons sind in jeder Spalte hinter den eingefügten Datensätzen)

            hier mal die ganze Schleife
            PHP-Code:
             echo "<table>";
            echo 
            "<tr><th>IP</th><th>Typ</th><th>Name</th><th>Testgerät</th></tr>";
            while (
            $dsatz mysqli_fetch_assoc($res))
            {
            echo 
            "<tr>";
            echo 
            "<td width='180px'><span class='bluetext'>" $dsatz["ip"] . "</span></td>";echo "<td width='100px'><span class='bluetext'>" $dsatz["typ"] . "</span></td>";
            echo 
            "<td width='100px'><span class='bluetext'>" $dsatz["gname"] . "</span></td>";
            echo (
            $dsatz["test"] == "0") ? "<td width='80px'><input title='kein Testgerät' type='checkbox' disabled></td>" "<td width='80px'><input title='Testgerät' type='checkbox' checked disabled></td>";
            echo 
            "<td width='40px'><input title='ändern' class='button change' type='submit' name='change' value='".$dsatz["ID"]."'></td>";
            echo 
            "<td width='40px'><input title='löschen' class='button del' type='submit' name='del' value='".$dsatz["ID"]."'></td>";
            echo 
            "</tr>";
            };
            echo 
            "</table><br>";
            mysqli_close($con);
            ?> 
            ich zeig dir mal was PHP so kann

            PHP-Code:
            ?>
            <table>
            <tr><th>IP</th><th>Typ</th><th>Name</th><th>Testgerät</th></tr>
            <?php while ($dsatz mysqli_fetch_assoc($res)) :?>
            <tr>
            <td width='180px'><span class='bluetext'><?=$dsatz['ip']?></span></td>";echo "<td width='100px'><span class='bluetext'><?= $dsatz["typ"?></span></td>
            ...
            <?php endwhile;?>
            </table><br>
            und mysqli_close bruacht man nicht

            und natürlich habe ich auch dazu ein Video auf meinem kanal

            https://www.youtube.com/watch?v=Hx83NJDzbj4
            apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

            Kommentar


            • #7
              PHP-Code:
              <table>
                  <tr>
                      <th>IP</th>
                      <th>Typ</th>
                      <th>Name</th>
                      <th>Testgerät</th>
                  </tr>
                  <?php while ($row mysqli_fetch_assoc($result)): ?>
                  <tr>
                      <td>
                          <?= htmlspecialchars($row['ip'], ENT_COMPAT'UTF-8'?>
                      </td>
                      <td>
                          <?= htmlspecialchars($row['typ'], ENT_COMPAT'UTF-8'?>
                      </td>";
                      <td>
                          <?= htmlspecialchars($row['gname'], ENT_COMPAT'UTF-8'?>
                      </td>
                      <td>
                          <?php if ($row['test']): ?>
                              <input title="Testgerät" type="checkbox" checked disabled>
                          <?php else: ?>
                              <input title="kein Testgerät" type="checkbox" disabled>
                          <?php endif; ?>
                      </td>
                      <td>
                          <input
                              title="ändern" class="change" type="submit" name="change"
                              value="<?= htmlspecialchars($row['ID'], ENT_COMPAT'UTF-8'?>">
                      </td>
                      <td>
                          <input
                              title="löschen" class="delete" type="submit" name="delete"
                              value="<?= htmlspecialchars($row['ID'], ENT_COMPAT'UTF-8'?>">
                      </td>
                  </tr>
                  <?php endwhile; ?>
              </table>
              Spaltenbreiten und irgendwelche Farbangaben haben im HTML-Code nichts verloren. Das Aussehen sollte über CSS gesteuert werden.

              Es ist auch unnötig einem Submit-Button eine Klasse "button" zu geben. Was soll es denn sonst sein, wenn nicht ein Button?

              Und bitte gewöhn dir solche komischen Variabelnamen wie $res und $dsatz ab. Wo kommt das überhaupt her? Ich seh das in deutschen Foren immer wieder. Schreibt da jeder Anfänger vom andern Anfänger ab? Oder lesen alle das selbe schlechte Tutorial?

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Es ist auch unnötig einem Submit-Button eine Klasse "button" zu geben. Was soll es denn sonst sein, wenn nicht ein Button?
                *hust* bootstrap *hust*

                Zitat von hellbringer Beitrag anzeigen
                Und bitte gewöhn dir solche komischen Variabelnamen wie $res und $dsatz ab. Wo kommt das überhaupt her? Ich seh das in deutschen Foren immer wieder. Schreibt der jeder Anfänger vom andern Anfänger ab? Oder lesen alle das selbe schlechte Tutorial?
                habe mich auch gefragt, steht das vielleicht in alten Tutorials?

                apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                Kommentar


                • #9
                  Zitat von BlackScorp Beitrag anzeigen
                  ich zeig dir mal was PHP so kann

                  PHP-Code:
                  ?>
                  <table>
                  <tr><th>IP</th><th>Typ</th><th>Name</th><th>Testgerät</th></tr>
                  <?php while ($dsatz mysqli_fetch_assoc($res)) :?>
                  <tr>
                  <td width='180px'><span class='bluetext'><?=$dsatz['ip']?></span></td>";echo "<td width='100px'><span class='bluetext'><?= $dsatz["typ"?></span></td>
                  ...
                  <?php endwhile;?>
                  </table><br>
                  Da fehlt aber die Behandlung des Kontextwechsels
                  Eine Mannschaft aus Granit! So wie einst Real Madrid!
                  Und so zogen wir in die Bundesliga ein und wir werden wieder Deutscher Meister sein!

                  Kommentar


                  • #10
                    BlackScorp WOW.. krasse Sache.... das funktioniert ja genauso wie mein Code nur vieeeeeeeeel übersichtlicher.... ich muss mir das mal in Ruhe anschauen.... so weit bin ich in meinem PHP-Buch wohl noch nicht gekommen....
                    vielen Dank auch für deine Youtube-Links.... ich werd mir die bei Gelegenheit mal angucken... heut abend isses zu spät

                    hellbringer das aussehen wird über CSS gesteuert... sowohl die Farbangeben (wo siehst du die?) als auch die class="button" verweisen nur auf das CSS.... die Klasse heißt einfach nur "Button" damit es übersichtlicher wird. (ich benutz die gleiche Klasse auch im Links zu stylen, damit die wie Buttons aussehen.)

                    falls interessant... das CSS dazu.
                    Code:
                     .button {
                          display: flex;
                          float: left;
                          margin-right: 20px;
                          border: 0px;
                          height: 30px;
                          width: 30px;
                          border-radius: 15px;
                          background-repeat: no-repeat;
                          background-size: contain;
                          font-size: 0px;
                          cursor: pointer;
                      }
                      .del {
                          background-color: transparent;
                          background-image: url("../icons/delete_forever-24px.svg");
                      }
                      .del:hover {
                          background-color: var(--Achtung);
                          box-shadow: 0px 0px 10px 0px var(--Achtung);
                          transition: ease 0.8s;
                        }
                      .change {
                          background-color: transparent;
                          background-image: url("../icons/create-24px.svg");
                      }
                      .change:hover {
                          background-color: var(--Okay);
                          box-shadow: 0px 0px 10px 0px var(--Okay);
                          transition: ease 0.8s;
                      }

                    Kommentar


                    • #11
                      Zitat von Meister1900 Beitrag anzeigen

                      Da fehlt aber die Behandlung des Kontextwechsels
                      hellbringer hat es ja gemacht
                      apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp | Mein Youtube PHP Kanal: https://www.youtube.com/c/VitalijMik

                      Kommentar


                      • #12
                        BlackScorp nix bootstrap :P

                        und die komischen Variablen-Namen stammen von Thomas Theis - Einstieg in PHP 7 und MySQL

                        Kommentar


                        • #13
                          Zitat von Supermicha Beitrag anzeigen
                          das aussehen wird über CSS gesteuert... sowohl die Farbangeben (wo siehst du die?)
                          Code:
                          <span class='bluetext'>
                          class="bluetext" ist ca. so sinnvoll wie style="color: blue". Und wenn du das Design mal auf rot oder grün ändern willst, benennst du dann die Klasse um und tauschst alle vorkommen im HTML-Code aus? Genau sowas will man durch die Verwendung von CSS vermeiden.

                          Kommentar


                          • #14
                            okay mit dem 'bluetext' geb ich dir recht.... ist etwas unglücklich gewählt... war in dem Moment nicht kreativ genug... habs in 'texthighlight' geändert

                            (wobei das ändern mit Visual Studio Code mit 3 klicks erledigt ist... )

                            Kommentar


                            • #15
                              mit
                              Code:
                              td:nth-child
                              kannst Du Dir diese "Spannerei" sparen.

                              Gib der Tabelle eine Klasse mit auf den Weg
                              Code:
                              table class=myclass...
                              , den Rest kannst Du über CSS erledigen.

                              Außerdem befinden wir uns im Jahre 2020,eine valide Tabelle kann auch wie folgt aussehen:

                              Code:
                              <table class=mytable>
                                  <thead>
                                      <tr>
                                        <th>Kopf
                                        <th>Kopf
                              
                              
                                  <tbody>
                                      <tr>
                                        <td>Inhalt
                                        <td>Inhalt
                              
                              
                                  <tfoot>
                                      <tr>
                                        <td>Fuß
                                        <td>Fuß
                              
                              </table>

                              Ob dieses
                              Code:
                              <?php php-code while etc. ?>
                              html
                              <?php.......... ... ?>
                              html
                              <?php php-code endwhile etc. ?>
                              schön und praktisch ist, muss jeder für sich selber entscheiden

                              ich persönlich bevorzuge es etwas klarer.

                              Code:
                              html
                              <?=tableout($mydata, myClass,..)?>
                              html

                              Kommentar

                              Lädt...
                              X