Array an PHP übergeben

  • Leider habe ich keine richtige Anleitung gefunden, nur viele Forenbeiträge in englisch, die ich nicht wirklich verstanden habe.

    Ich habe ein eindimensionales Array ('a', 'b', 'c', 'd'). Wie kann ich das an PHP übergeben?

    Danke schon mal für die Antwort.

  • Oder liege ich da jetzt falsch ?

    Ich habe nicht die geringste Ahnung. Scheint aber irgendwie so zu sein. Hab immer wieder was von Ajax gelesen. Aber eine gute Einführung in Ajax habe ich bisher auch noch nicht gefunden.

    Irgendwie muss es auf jeden Fall mit POST und $_REQUEST funktionieren.

    Eine Möglichkeit Dateien nur mir jQuery umzubenennen gibt es ja nicht, oder?

  • Ganz soviel dazu sagen kann ich auch nicht,weil bin auch noch Php Lehrling und will nix falsches sagen.

    Aber wie meinst du das ?

    Eine Möglichkeit Dateien nur mir jQuery umzubenennen gibt es ja nicht, oder?

    Willst du eine Datei,die auf den Server liegt und Zb hallo.html in byebye.html unbenennen ?

    Also das geht mit Javascript nicht. Und was Datei unbenennen mit deinen Array zu tun hat weiß ich auch nicht.


    Vieleicht solltest du auch kurz erklären was du überhaupt vor hast ,dann kann man dir bestimmt auch besser helfen und vieleicht auch einen einfacheren Weg zeigen sobald die Profis Online kommen .

  • In PHP kenne ich mich deutlich besser aus als in jQuery, vielleicht können wir uns ja ergänzen ;)

    Es geht um das hier.

    Ich habe ein kleines Script zum sortieren von Fotos. Nach dem sortieren sollen aber die Dateien entsprechend umbenannt werdern (fu0010a in fu0010c).

    Das Ergebnis des Verschiebens wird in jQuery UI in einem Array gespeichert. Wenn ich das nun nach PHP schicke, sollte das Umbenennen eigentlich kein Problem mehr sein.

  • Das Skript scheint das Sortable von jQuery-UI zu benutzen? Habe ich selber gerade erst eingesetzt.

    Zitat

    Wenn ich das nun nach PHP schicke

    Ist mit Ajax kein Problem. Am besten kodierst Du das Array in JSON, dann kannst Du es leicht an das PHP-Skript schicken.


    Edit: Ich sehe gerade, in deiner Demo benutzt Du toString(), das würde genauso gut gehen, um das Array zu übertragen.

  • Von Ajax und JSON habe ich noch gar keine Ahnung. Eigentlich wollte ich nur schnell einen Uploader auf der Seite installieren, damit ich mit den entsprechenden Fotos weiter in jQuery einsteigen kann. Danach wollte ich mir dann in Ruhe die anderen Sprachen anschauen. Naja, wenn ich mir schon mal was vornehme... :)

    Das jQuery UI habe ich mir auch einfach nur kopiert, daher habe ich nicht wirklich eine Ahnung, wozu das toString() da dran hängt. Ich würde jetzt sogar mal vermuten, dass productOrder gar kein Array sondern ein String ist. Ist auch egal, ich kann mit beidem weiter arbeiten. Aber wie ich es nach PHP bekomme, weiß ich trotzdem nicht.

  • Ajax heilt wieder alle Wunden? Hat jemand mal die Frage gestellt, was überhaupt das Vorgehen und das Ziel ist?

    Evtl. wird eh ein gewöhnlicher Request verwendet, dann wäre Ajax überflüssig.


    Aber das weiß man bisher nicht... oder zumindest nur der TE

  • Ich bin mir nicht so ganz sicher was ich brauche, da ich noch nicht absolut sicher bin, wie das Script letztlich funktionieren würde/müsste. So was merke ich dann immer erst beim scripten.

    Ich habe mehrere Fotos ein einem Ordner (L_fu0010a, L_fu0010b, L_fu0010c...) für jedes L_-Foto gibt es auch noch ein M_ und ein XL_. Die Fotos mit dem a sind die Hauptfotos, also die, die immer zuerst angezeigt werden.

    Nun will ich, mit dem o.g. jQuery die Fotos umsortieren und umbenennen können, so dass sie in der Reihenfolge der neuen Sortierung umbenannt werden - wenn Euch das was sagt: genauso wie bei Ebay, wenn man dort einen Artikel zum verkaufen anbietet.

    Ich hatte jetzt auch schon den Gedanken, MySQL mit einzubinden, bin aber noch nicht dazu gekommen, den Gedanken weiter zu spinnen, ob das besser/möglich wäre.

  • Hi KATERchen,


    von der art des vorgehen kann es etwas kompliziert werden, das reine übertragen des arrays ist in deinem fall einfach (ohne ajax):


    Du machst in dein HTML ein Formular:

    HTML
    <form action='changeorder.php' method='POST'> 
    <input id='inputvalue' type='hidden' name='newsort' value='' />
    <input type='submit' value='Sortierung Speichern' />
    </form>


    Dann hast du einen Button um die Daten an PHP zu übertragen, die Werte müssen in den Value des <input name='newsort'...


    Das kannst du in deinem JS, an der stelle des console.log einbauen. Bsp (mit jquery):


    JavaScript
     $('input[name="newsort"]').val(productOrder);


    Beim Clicken auf "Sortierung Speichern" wird nun deine liste von Buchstaben "A,B,C,D,E" an php geschickt.


    In der PHP Datei muss du nun aus dem Text ein Array machen, den Inhalt bekommst du aus $_POST, mit explode, können wir einen string anhand eines zeichens in ein array umwandeln: http://php.net/manual/de/function.explode.php


    PHP
    <?php
    //php 7
    $sortArray = explode(",",$_POST['newsort']??"");
    
    //PHP 5
    $sortArray = isset($_POST['newsort'])?explode(",",$_POST['newsort']):array();
    
    var_dump($sortArray);


    Dann hättest du in $sortArray deine infos vom Formular.

    (Es gibt weit elegantere Wege das ganze zu lösen, aber mit den gegebenen Infos und dem bisher gezeigtem sollte das so am ehesten nachvollziehbar sein).


    Wenn du hier nun Ajax benutzen wolltest (ich sehe hier gerade keinen all zu großen nutzen, wenn man nicht vieles umbaut), dann kannst du dort ebenfalls einfach den wert des arrays per POST an das PHP-Skript schicken.


    Weist du denn wie du die Sortierung bzw. das umschreiben in PHP durchführen willst, anhand deines arrays?


    Der komplette code ist nicht getestet, tippfehler können enthalten sein.


    Grüße


    Timo

    Einmal editiert, zuletzt von timtim () aus folgendem Grund: PHP Version.. nicht alle nutzen 7

  • Mit dem Tipp von timtim war der Rest gar nicht so schwer. Lässt sich aber vielleicht noch etwas optimieren.


    Code
    $(function() {
                $('#sortable').sortable({
                   update: function(event, ui) {
                      var productOrder = $(this).sortable('toArray').toString();
                      $('input[name="newsort"]').val(productOrder);
                   }
                });
             });
  • Und keiner hat bemerkt, dass das ganze gar nicht richtig funktioniert??? Es wurde total falsch sortiert.

    Ich habe es jetzt noch mal neu gemacht, aber immer noch ein Problem, welches mir langsam den letzten Nerv kostet. Wenn ich das Formular abschicke wird die Seite anschließend wohl nicht neu geladen und mir wird wieder die ursprüngliche Sortierung angezeigt. Erst wenn ich manuell die Seite neu lade, bekomme ich die neue Sortierung zu sehen. Ich habe es mit headers versucht

    Code
    header("Cache-Control: post-check=0, pre-check=0", FALSE);
    header("Cache-Control: no-cache, must-revalidate");
    header("Refresh:0; url=sortieren.php?ArtNr=" . $ArtNr);

    und auch mit meta-tags

    Code
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">

    aber nichts funktioniert.

    Hier mal der Quellcode:

    sortieren.php

    Sieht in reinem HTML dann so aus:

    sort_psg.php

  • Mir erschließt sich ohnehin nicht wirklich, was der Vorteil sein soll, wenn man den Umweg über ein Formular und ein verborgenes Eingabefeld geht, gegenüber Ajax. Bei letzterem würde die Seite nicht neu geladen und die neue Sortierung würde bestehen bleiben.

  • Hi KATERchen,


    habe mir nur kurz angeschaut wie du die Sortierung gelöst hast und da du geschrieben hast das es Funktioniert, dann denke ich da erstmal nicht weiter drüber nach ;).


    Das du hier Caching-Probleme bekommst, daran habe ich gar nicht gedacht, insgesamt ist das System nicht sonderlich schön. Die Cache-Header solltest du aber wenn, in die Datei einbauen in der Du die Bilder anzeigen lässt. Also in der mit der Ausgabe.


    Wenn ich dich richtig verstehe, funktioniert eigentlich alles, nur der Browser Cached (natürlich) die Bilder und zeigt dir die alten Versionen an.. hilft nur cache leeren oder hoffen das dein Browser die Cache-Anweisung der Webseite befolgt :P


    Schöner wäre es natürlich gewesen, die Sortierung / Anzeige direkt losgelöst vom Bildernamen zu bauen. Also z.B. eine Datei zu erstellen in der alle Bildnamen in der richtigen Sortierung drinstehen, diese auszulesen und in der Reihenfolge in der Seite ausgeben (wäre auch viel einfacher zu schreiben). Und wenn du hierfür JSON nutzt und file_get bzw. file_put_contents ist das auch mit dem Lesen und schreiben einfach.


    Aber ein Tipp für dein Bilder-caching noch.


    Du könntest in der Datei in der du die Bilder ausgibst, jedesmal einen neuen namen für die Bilder erstellen, dann kann der Browser das nicht cachen und da können wir einen kleinen Trick verwenden (denke das geht noch):



    PHP
    <li id="<?php echo $letter ?>" class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span><img src="<?php echo $bilder_verzeichnis . $old_files_M[$i]."?".rand(1,99999) ?>"></li>

    Grüße


    Timo

  • Sempervivum

    Da ist kein vorteil außer das es einfacher verständlich ist. Aber das ganze Konstrukt ist umständlich und ein Async-Call macht das jetzt nicht besser. Der "nachteil" wäre bei deiner Idee ja, das man nicht weiß ob die Sortierung wirklich am Server korrekt durchgeführt wurde, denn was er sieht ist dann ja nicht die neue Sortierung sonder die im Browser durchgeführte. Also müsste man danach zumindest noch ein Feedback haben wie die neue Sortierung aussieht und diese direkt per JS Rendern.


    Dann wären wir aber an dem Punkt, das die Sortierung komplett über Calls stattfinden kann und jedesmal ein Update an den Server geschickt werden kann, wenn ein Bild umsortiert wurde. Und dann ist der schritt nicht weit, gleich die Bilder per Ajax request zu laden und per JS zu rendern. Nur dieses übertragen per Ajax zu senden, hat in dem fall, null vorteil und löst das eigentliche problem nicht.


    Grüße


    Timo

  • Das mit rand() funktioniert! Was ganz ähnliches hatte ich schon mit microtime() versucht, beim Zurückleiten auf die sortieren.php. An die Fotos habe ich gar nicht gedacht.

    Das andere hier mit Ajax und JS hört sich allerdings schon in sofern besser an, weil es mir bei der ganzen Seite darum geht, was mit jQuery etc, möglich ist. Eigentlich ist nicht wirklich geplant, die Seite jemals online zu stellen.

    Ich werde mich bei Zeiten noch mal mit JSON und Ajax usw. beschäftigen. Vielleicht hat ja jemand Lust und viel, viel Zeit um ein paar Code-Zeilen zu meinem Beispiel zu schreiben. Aber ich werde mir das dann, wie gesagt, auch erst später angucken.

    Auf jeden Fall Danke für Eure Hilfe und danke timtim :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!