Beiträge von Arne Drews

    Nicht eher umgekehrt?


    Wie würdet ihr das Problem angehen.

    Nur mit JS gar nicht.

    Mit PHP bliebe eine Hoffnung, dass man den Quelltext auslesen kann und verarbeitet, aber auch da bin ich adhoc nicht sicher, ob Dir das weiterhilft.


    Die werden schon einen Grund haben, warum man das in der API nicht anders einstellen kann, falls Du das überhaupt schon geprüft hast?!

    Jo, sowas meine ich. Allerdings ist das von Dir verlinkte ja nur eine PDO-Methode.

    Transactions werden von der Datenbank verwaltet. Ich frage deshalb nach, weil das die einzige halbwegs sinnvolle Erklärung für mich wäre.


    Was sagt denn phpmyAdmin, wenn Du dort in der SQL-Section mal direkt SELECT count(*) FROM deine_tabelle machst?

    Das Grundproblem ist immer noch der erste Aufruf der Seite.

    Du hast keine Ahnung, was isset() überhaupt macht, oder? Du musst Dich mit den Befehlen/Funktionen, die Du verwendest vertraut machen, sprich: Doku lesen!


    Beim ersten Aufruf der Seite, existieren keine POST-Daten, weil es eine reine GET-Anforderung ist.

    Da $sql im Wahrheitsblock von isset($_POST['user']) definiert wird, existiert es außerhalb des Scope nunmal nicht!

    Da der TE ja bereits die Lösung hat, gehe ich mal davon aus, dass ich das hier so posten darf. Falls nicht, einfach entfernen...


    Wer viel mit JavaScript zu tun hat, sollte sich mal mit prototype beschäftigen. Gerade dieser Fall, eine Tabelle mit bestimmten Anzahl an Zeilen und Spalten vorzudefinieren, wäre mit ein wenig Anpassungen über prototype auch in dieser Kürze zu erledigen:

    JavaScript
    var _laenge = 8;
    
    _table = document.createElement( 'table' );
    document.body.appendChild( _table.addRows(_laenge).addCols(_laenge, {'class':'foo'}) );

    Dahinter stecken einfach nur die zwei Erweiterungsmethoden addRows und addCols, die ich per prototype an das HTMLTableElement gebunden habe.

    Diese Erweiterungen verwende ich häufig in meinen Projekten, weil mein JavaScript dadurch wesentlich lesbarer wirkt. Ich bin zudem auch kein Freund vieler Schleifen im Hauptcode und lagere daher einiges in die Erweiterungen aus.


    Das macht natürlich nur bei häufiger Verwendung Sinn!

    Nutzt man das nur ein einziges Mal, ist das den Aufwand nicht wert, das ist klar.


    EDIT:

    Hier noch kurz die prototypes für die, die es interessiert

    Nach dem Absenden steht der eingegebene Name in $_POST['name']

    Nicht eher in $_POST['user'] ? ;)


    Grundsätzlich würde ich DevFlash erstmal fragen wollen, wie sein echter Versuch aussieht und was für Fehler auftreten.

    Allein die Kommentarzeilen deuten auf Fantasiecode hin.


    Ich weiß, dass INSERT eine große SQL Injection Gefahr ist

    Dann weißt Du mehr, wie ich! Das INSERT ist keine Injection-Gefahr, sondern die falsche Verwendung der Werte-Übergaben.

    Da kann aber die Funktion selbst nichts für. Mit SELECT ist bspw. auch Injection möglich.

    Du brauchst keine neue Tabelle!

    Wenn Du in der Lage bist eine Tabelle entsprechend dem gewünschten Ergebnis aufzubauen und zu füllen, basiert das ganze auf einer SQL-Query.

    Das Ergebnis der SQL-Query kannst Du auch gleich in eine CSV schreiben, anstatt in eine neue Tabelle.


    Die Query kann nur auf den Daten der bereits gegebenen Tabellen resultieren, vermutlich liegt Dein Problem bei der Query?

    Am einfachsten ist es dann wohl, wenn Du mal Deinen DB-Aufbau inkl. Beispiel-Daten zeist und was die CSV am Ende davon beinhalten soll.


    Ich denke es wird eine relativ einfache Lösung geben.

    Ist der Gedankengang richtig?

    Nein. Du erstellst doch aktuell auch schon eine CSV. Das machst Du doch nicht auf Basis einer fremden Tabelle, sondern der bestehenden.

    Das Erstellen der Datei musst Du einfach nur erst dann ausführen, wenn der User den Button klickt.


    Dann müsste ich ja nurnoch schauen wie ich die Funktion in den Button einbau, um das ganze erst beim Klick auszuführen.

    Der Button repräsentiert einfach nur einen Link zu einer PHP-Datei, die das ganze ausführt...

    Also wenn das so richtig ist, wie ich das verstanden habe, verstehe ich den Sinn der ausgeblendeten Tabelle weiterhin nicht!


    IST-Zustand:

    Du erstellst eine Datei test.csv und mit den Daten, die darin generiert wurden parallel dazu eine HTML-Tabelle, die Du aber ausblendest.

    Ein BUTTON soll dafür sorgen, dass die generierte Datei heruntergeladen werden kann ( was, um es nochmal zu erwähnen, keinen Bezug zur ausgeblendeten Tabelle hat ).


    WARUM-NICHT-SO#1-Zustand (mein Favorit):

    Lass das Erstellen der Datei an der Stelle sein und baue keine HTML-Tabelle, die eh nicht angezeigt wird.

    Bei Klick auf den BUTTON generierst Du zunächst die Datei entsprechend und forcierst den Download direkt.


    WARUM-NICHT-SO#2-Zustand:

    Wenn Du unbedingt erst die Datei erstellen und den BUTTON dann erst anbieten willst, kannst Du doch zumindest die ausgeblendete Tabelle ganz weglassen.

    Die hat keinerlei Wichtigkeit aus meiner Sicht.

    Nur damit wir uns nicht missverstehen.

    Welchen Bezug hat die ausgeblendete Tabelle zu den Modals oder dem Download?


    Bei Klick auf den Button lädst Du eine Datei runter. Ich vermute - korrigiere mich, wenn ich falsch liege -, dass dann auf SQL Seite eine CSV mit exakt den Daten der ausgeblendeten Tabelle erstellt wird?

    Aber eine CSV kannst Du doch auch direkt aus der Datenbank aufbauen und speichern.

    Wozu der Umweg über die HTML-Tabelle?


    Vielleicht habe ich Dich auch falsch verstanden, sollen die Ergebnisse erst angezeigt werden, bevor man sie runterladen kann?

    Du verwendest immer noch printf komplett aus dem Kontext gerissen.

    Hat mit Deinem Excel-Problem nichts zu tun, aber erschreckend, wie ahnungslos einige einfach irgendwelche Funktionen verwenden, ohne zu wissen, wozu die da sind...


    Aber zum Thema: Was hat Deine Lösung jetzt mit Excel zu tun?

    Wie du im ersten post siehst habe ich es ja so versucht ,nur er sagt mir das es not defined ist

    Nein, Du hast das versucht:

    document.user_trans.submit();


    das ist in manchen Browsern etwas anderes, wie

    document.forms.user_trans.submit();

    oder

    document.forms['user_trans'].submit();