Ankündigung

Einklappen
Keine Ankündigung bisher.

Vorhandenes Script mit Listendarstellung ersetzen durch Direktaufruf

Einklappen

Neue Werbung 2019

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

  • Vorhandenes Script mit Listendarstellung ersetzen durch Direktaufruf

    Hallo Leute,
    ich habe keine PHP-Kenntnisse außer denen, die ich ab und zu brauche, um bestehende Scripte ganz leicht anzupassen.
    Für einen aktuellen Bedarf habe ich aber nach einer Stunde rumprobieren aufgegeben und bräuchte etwas Hilfe - ist für Kenner wahrscheinlich ein Sekundending.
    Mit untigen Zeilen wird normaler Weise eine Liste von Namen erstellt und wenn man dann auf das Wort URKUNDE vor einem Namen klickt, dann wird mit dem Script "urkunde.php" die passende Urkunde erstellt (mit FPDF).
    Jetzt habe ich aber einen Anwendungsfall, wo die Liste keinen Sinn macht, weil es nur genau einen Treffer geben kann.
    Es soll also keine Liste dargestellt werden, sondern direkt die Urkunde aufgerufen werden - also durch was muss die echo-Zeile ersetzt werden?
    Schön, aber nicht zwingend wäre auch noch eine Meldung "Nicht gefunden", wenn der Suchbegriff gar nicht gefunden wurde.

    Code:
        $result = $mysqli->query($query);
        $count = 1;
        while ($row = mysqli_fetch_array($result)){
            // eine Zeile der Trefferliste ausgeben
            echo "\n\n<tr>\n<td><a href=\"urkunde.php?inr=",$row['inr'],"\" target=\"_blank\">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>";
            $count++;
        }

  • #2
    Zitat von vkr Beitrag anzeigen
    Es soll also keine Liste dargestellt werden, sondern direkt die Urkunde aufgerufen werden - also durch was muss die echo-Zeile ersetzt werden?
    Am einfachsten wahrscheinlich durch eine Weiterleitung auf die urkunde.php (mit angehängtem Parameter) - das geht aber nur wenn du vorher noch nichts ausgegeben hast (EVA-Prinzip!).

    Schön, aber nicht zwingend wäre auch noch eine Meldung "Nicht gefunden", wenn der Suchbegriff gar nicht gefunden wurde.
    Einfach nachschauen ob es ein Ergebnis gibt und entsprechend reagieren.

    PHP-Code:
    echo "\n\n<tr>\n<td><a href="urkunde.php?inr=",$row['inr'],"" target="_blank">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>"
    Hier fehlt die Behandlung des Kontextwechsels!

    Kommentar


    • #3
      Ich hatte experimentiert mit dem Befehl "form action", aber diese Zeile funktioniert auch nicht - vielleicht meinst Du das mit "Weiterleitung".
      Vielleicht kann ja jemand sagen, was hier falsch ist:
      PHP-Code:
      echo '<form action="urkunde.php?inr=",$row['inr']></form>'

      Kommentar


      • #4
        Zitat von vkr Beitrag anzeigen
        Ich hatte experimentiert mit dem Befehl "form action", aber diese Zeile funktioniert auch nicht - vielleicht meinst Du das mit "Weiterleitung".
        HTML ist keine Programmiersprache und kennt deswegen auch keine Befehle. Mal abgesehen davon dass "funktioniert nicht" keine Fehlerbeschreibung ist: bist du dem Link überhaupt gefolgt? Du sollst einfach per header() auf urkunde.php weiterleiten …

        Vielleicht kann ja jemand sagen, was hier falsch ist:
        PHP-Code:
        echo '<form action="urkunde.php?inr=",$row['inr']></form>'
        Das ist ein Syntaxfehler - und selbst ohne Syntaxfehler ist das ein leeres Formular was recht wenig Sinn ergibt …

        Kommentar


        • #5

          PHP-Code:
          echo "\n\n<tr>\n<td><a href="urkunde.php?inr=",$row['inr'],"" target="_blank">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>"
          Was genau soll das sein? Das ist syntaktischer Müll. Wenn Du es einfach haben willst, starte den Link dann mit einem Javascript nach dem Laden der Seite.
          PHP-Code:
           <?php $counter 0;  while ($row mysqli_fetch_array($result)){   // eine Zeile der Trefferliste ausgeben   echo "<div id='startLink{$counter}' onclick="urkunde.php?inr={$row['inr']"></div>";   $counter++;   } ?> <script type="text/javascript">window.cocument.getElementById('startLink0').click();</script>
          Ist jetzt ungetestet, sollte aber funktionieren. Um auf JS Fehler beim Userrechner zu reagieren, kannst Du Deinen normalen Link noch in den Div als Ausgabe setzen. So kann der User den wenigstens doch noch anklicken, falls das JS nciht funzt. Also so:
          PHP-Code:
          <?php $counter 0;  while ($row mysqli_fetch_array($result)){    // eine Zeile der Trefferliste ausgeben    echo "<div class='deine_Klasse' id='startLink{$counter}' onclick="urkunde.php?inr={$row['inr']">";   echo "<table><tr>\n<td><a href="urkunde.php?inr={$row['inr']}" target="_blank">URKUNDE</a></td>\n<td>{$row['name']}</td><td>{$row['vorname']}</td></tr></table>";   echo "</div>";   $counter++;   }  ?> <script type="text/javascript">window.cocument.getElementById('startLink0').click();</script>
          Das musst Du dann nur noch mit ein paar css anpassen. Ach ja. Die while Schleife kannst Du auch komplett wegelaasen, wenn wirklich sicher immer nur ein Ergebnis kommt. Ich habe hier die Schleife gelassen und somit auch den Fall abgedeckt, dass doch mehr kommen. Gestarte wird dann aber immer nur der erste.

          PS Das Forum schluckt die Formatierungen. Zeilenumbrüche musst Du bitte wieder anpassen.

          Kommentar


          • #6
            1. Es ist Unsinn das mit JavaScript zu lösen wenn es relativ simpel mit PHP und header() geht.
            2. Das was du da produzierst ist erstens unschön (JavaScript gehört in separate Dateien) und zweitens funktioniert es auch nicht. Man kann nicht mit onclick einen Link "imitieren". Dazu bräuchtest du schon window.location.href
            3. Es passt auch nicht zur Beschreibung des TE, weil, wenn ich es richtig verstanden habe, manchmal mehrere Einträge ausgegeben werden und halt manchmal nur einer. Mit Deiner Lösung würde (wenn es denn funktionieren würde) immer automatisch der erste Link ausgeführt. Das soll aber natürlich nur passieren wenn genau ein Eintrag vorhanden ist.

            Kommentar


            • #7
              Zitat von psygonis Beitrag anzeigen
              PHP-Code:
              echo "\n\n<tr>\n<td><a href="urkunde.php?inr=",$row['inr'],"" target="_blank">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>"
              Was genau soll das sein? Das ist syntaktischer Müll.
              Kann ich nicht beurteilen - wie schon gesagt, bin ich kein Programmierer im heutigen Sinne - meine sebstgeschriebenen Programme aus den 80ern sind mit Turbo-Pascal entstanden und als E-Techniker war das auch nur nebenbei - aber die Zeile, die ich von irgendjemand vor ewigen Zeiten übernommen habe, funktioniert seit Jahren einwandfrei (z.B.: https://www.ergebnisliste.de/88 ; hier wird mit "like" gesucht und es kann viele Treffer geben).

              Zitat von jonas3344 Beitrag anzeigen
              ...
              3. Es passt auch nicht zur Beschreibung des TE, weil, wenn ich es richtig verstanden habe, manchmal mehrere Einträge ausgegeben werden und halt manchmal nur einer. Mit Deiner Lösung würde (wenn es denn funktionieren würde) immer automatisch der erste Link ausgeführt.
              Hast Du falsch verstanden, ich suche eine Lösung für eine neue Anwendung wo es immer nur genau einen (oder keinen) Treffer gibt (Beispiel: es muss jemand seine Email-Adresse eingeben und die muss exakt stimmen und die kommt in der Datenbank auch nur einmalig vor). Es soll also gar keine Liste erscheinen, wie in meinem Linkbeispiel, sondern direkt ein PDF.

              Zitat von tk1234 Beitrag anzeigen
              ... bist du dem Link überhaupt gefolgt? Du sollst einfach per header() auf urkunde.php weiterleiten …
              Ich kann ja verstehen, dass Du mich dazu bringen willst, mich intensiver mit php zu beschäftigen, aber dafür fehlt mir die Zeit und es würde auch nichts bringen, da ich bis zur nächsten Änderung in - vielleicht - Jahren wieder alles vergessen hätte.
              Ich habe mir den Link ja angesehen, aber ich habe zu wenig Kenntnisse um das "einfach" zu machen.
              Das Script sucht ja zuerst nach dem Suchbegriff in der Datenbank und ruft dann urkunde.php auf mit der Übergabe des Indexes der Datenbank. Diese Übergabe muss ja dann irgendwie über header() erfolgen.

              Denke ich denn wirklich zu kompliziert:
              PHP-Code:
              echo "\n\n<tr>\n<td><a href="urkunde.php?inr=",$row['inr'],"" target="_blank">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>"
              Diese Zeile erzeugt einen Link, den ich bis jetzt anklicken muss und es wird das passende PDF erzeugt.
              Es sollte doch eine einfache Möglichkeit geben, dass dieser Link ohne Anklicken des Wortes URKUNDE automatisch aufgerufen wird?

              Kommentar


              • #8
                Zitat von vkr Beitrag anzeigen
                Kann ich nicht beurteilen
                Dein Code ist an der Stelle vielleicht etwas umständlich und unüblich, aber vom Syntax her schon korrekt. Im Posting von psygonis stimmt der Code nicht mehr aber auch nur weil die Forensoftware die Backslashs gefressen hat.

                Ich kann ja verstehen, dass Du mich dazu bringen willst, mich intensiver mit php zu beschäftigen, aber dafür fehlt mir die Zeit und es würde auch nichts bringen, da ich bis zur nächsten Änderung in - vielleicht - Jahren wieder alles vergessen hätte.
                Dann bist du hier falsch. Dieses Board ist für Hilfe zur Selbsthilfe, nicht für Leute die eine fertige Lösung suchen - dafür gibt es weiter unten die Scriptbörse.

                Ich habe mir den Link ja angesehen, aber ich habe zu wenig Kenntnisse um das "einfach" zu machen.
                Das Script sucht ja zuerst nach dem Suchbegriff in der Datenbank und ruft dann urkunde.php auf mit der Übergabe des Indexes der Datenbank. Diese Übergabe muss ja dann irgendwie über header() erfolgen.
                Ja, du denkst zu kompliziert, lös dich von der Tabelle die du aktuell ausgeben willst Wie der Code für einen Location-Header aussehen muss steht ja in der Doku, das einzige was du an dem Beispiel noch austauschen muss ist die URL (in der Doku: »http://www.example.com/«). Die URL die du gerne hättest ist das was bei dir im href-Attribut des Links steht, also das »urkunde.php?inr…« - das auszutauschen sollte doch machbar sein, mehr als ein bischen Strings verketten braucht man da nicht.
                Wobei ich fürchte dass bei dir noch das Problem besteht dass du das EVA-Prinzip nicht ein hältst und schon vor dem Ende der Verarbeitung der Daten anfängst etwas auszugeben - dann funktioniert header() nicht mehr. Dafür müsstest du entweder den Code umbauen oder den Code mit der Suche nach oben schieben.

                Kommentar


                • #9
                  Zitat von jonas3344 Beitrag anzeigen
                  1. Es ist Unsinn das mit JavaScript zu lösen wenn es relativ simpel mit PHP und header() geht.
                  Nun ja, JS ist in dem Fall auch simpel. header() bedeutet in dem Fall eine Referenz auf die absendende Seite und eine if Abfrage an deren Anfang. Das der TE davon sprach, sich mit PHP nicht auszukennen, habe ich JS genommen.
                  2. Das was du da produzierst ist erstens unschön (JavaScript gehört in separate Dateien) und zweitens funktioniert es auch nicht. Man kann nicht mit onclick einen Link "imitieren". Dazu bräuchtest du schon window.location.href
                  Wo das JS steht, ist ja egal, solange es funktioniert. Natürlich sollte das in eine extra Datei. Aber das hier ist ein Hinweis, keine fertige Lohnarbeit. Mit dem location.href hast Du natürlich Recht. Ich hab ja geschrieben, ungetestet. Ist mir einfach so durchgerutscht.
                  3. Es passt auch nicht zur Beschreibung des TE, weil, wenn ich es richtig verstanden habe, manchmal mehrere Einträge ausgegeben werden und halt manchmal nur einer. Mit Deiner Lösung würde (wenn es denn funktionieren würde) immer automatisch der erste Link ausgeführt. Das soll aber natürlich nur passieren wenn genau ein Eintrag vorhanden ist.
                  So wie ich das verstanden habe, soll immer nur ein Eintrag ausgegeben werden. Damit würde das passen. Kommen doch mehere Einträge, warum auch immer, dann ist eben der erste dran. Damit würden die Anpassungen am Code minimiert weil das meiste einfach so bleiben kann.

                  Kommentar


                  • #10
                    [QUOTE=tk1234;n1578337]
                    Dein Code ist an der Stelle vielleicht etwas umständlich und unüblich, aber vom Syntax her schon korrekt. Im Posting von psygonis stimmt der Code nicht mehr aber auch nur weil die Forensoftware die Backslashs gefressen hat.

                    Das ist der Ursprunbg vom TE
                    PHP-Code:
                       $result $mysqli->query($query);     $count 1;     while ($row mysqli_fetch_array($result)){         // eine Zeile der Trefferliste ausgeben         echo "\n\n<tr>\n<td><a href="urkunde.php?inr=",$row['inr'],"" target="_blank">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>";         $count++;     } 
                    Also die Forensoftware frisst die Formatierungen. Zu was hat man denn dann überhaupt die [CODE] oder [PHP] Tags?
                    Nun aber zu der relevanten Zeile.
                    echo "\n\n<tr>\n<td><a href=\"urkunde.php?inr=",$row['inr'],"\" target=\"_blank\">URKUNDE</a>","</td>\n<td>",$row['name'],"</td><td>",$row['vorname'],"</td>\n</tr>";
                    Wie kann das in Ordnung sein? Der Parser will das ausführen was nach echo in den "" steht. Das geht bis zum " bei inr=", dann kommt ein Komma. Seit wann verbindet man zwei Strings mit einem Komma? Also bei mir gibt das einen Syntaxfehler.

                    Kommentar


                    • #11
                      So gehts aber. JS kann in extra Datei.
                      PHP-Code:
                      <body onload="window.document.getElementById('startLink0').click();">
                       <?php
                        $counter 
                      0;
                        while (
                      $row mysqli_fetch_array($result)){
                          
                      // eine Zeile der Trefferliste ausgeben
                          
                      echo "<div class='deine_Klasse' id='startLink{$counter}' onclick='sendLink("urkunde.php?inr={$row['inr']}")'>";
                          echo 
                      "<table><tr>\n<td><a href='urkunde.php?inr={$row['inr']}' target='_blank'>URKUNDE</a></td>\n<td>{$row['name']}</td><td>{$row['vorname']}</td></tr></table>";
                          echo 
                      "</div>";
                          
                      $counter++;
                          }
                      ?>

                      <script type="text/javascript">
                      function sendLink(link){
                        location.href = link;
                        }
                      </script>

                      Kommentar


                      • #12
                        Zitat von psygonis Beitrag anzeigen
                        Zu was hat man denn dann überhaupt die [CODE] oder [PHP] Tags?
                        Das darfst du nicht mich fragen …

                        Wie kann das in Ordnung sein? Der Parser will das ausführen was nach echo in den "" steht. Das geht bis zum " bei inr=", dann kommt ein Komma. Seit wann verbindet man zwei Strings mit einem Komma? Also bei mir gibt das einen Syntaxfehler.
                        Nein, das ist kein Syntaxfehler, hast du den Code mal ausgeführt? Man kann an echo auch mehrere Strings übergeben (mit Komma getrennt) - steht aber alles im Handbuch

                        Kommentar


                        • #13
                          Zitat von tk1234 Beitrag anzeigen
                          Nein, das ist kein Syntaxfehler, hast du den Code mal ausgeführt? Man kann an echo auch mehrere Strings übergeben (mit Komma getrennt) - steht aber alles im Handbuch
                          OK. Das hatte ich so noch nie auf dem Schirm. Immer mal wieder was neues

                          Kommentar


                          • #14
                            Zitat von psygonis Beitrag anzeigen
                            Zu was hat man denn dann überhaupt die [CODE] oder [PHP] Tags?
                            ...
                            Schön, dass ich auch mal was besser kann als ihr

                            Code aus notepad2 - win10 - firefox kopiert in php-code-tags oder normale code-tags funktioniert bei mir problemlos - da gehen keine Zeilenumbrüche verloren:
                            PHP-Code:
                            <script type="text/javascript">
                            function 
                            sendLink(link){
                              
                            location.href link;
                              }
                            </script> 
                            Code:
                            <script type="text/javascript">
                            function sendLink(link){
                              location.href = link;
                              }
                            </script>
                            ---------------------------------------------
                            Zitat von psygonis Beitrag anzeigen
                            So gehts aber. JS kann in extra Datei.
                            ...
                            Da passiert bei mir gar nix mit dem Inhalt - ich glaube, ich gebe hier auf...

                            Kommentar


                            • #15
                              Bei mir gehts aus jedem Editor, den ich bis jetzt probiert habe. Verwende auch Windows 10 und Firefox.

                              Kommentar

                              Lädt...
                              X