PHP Funktion Mysql Hilfe

  • Hallo,

    Ich bin gerade dabei mir eine Abfrage Funktion zu basteln für ein kleines Script, aber irgendwie kriege ich es nicht hin.
    Im Prinzip funktioniert es soweit aber ich stelle mich gerade zu dumm an die Variable zu übergeben $field->name das wird nämlich nicht angezeigt.

    PHP Function

    Code
    function global_query($string, $variable_name, $html_code) {
    $variable_name = mysql_query($string); 
    while($field = mysql_fetch_object($variable_name))
    { 
    print("$html_code"); 
    } 
    }

    Function Benutzen

    Code
    global_query("SELECT name FROM bbxx1_boards WHERE id = '1'", custom, "
    <table class='tableb'>
    <tr>
    <td width='100%'>$field->name</td> 
    </tr>
    </table>
    ");


    Wie bekomme ich es hin das mir das $field->name angezeigt wird?
    Ist nehme ich an ganz einfach aber ich bekomme es gerade einfach nicht hin.

    Hoffe mir kann jemand helfen.

    lg
    Michael

  • Beitrag von Alpha (29. März 2016 um 16:33)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • öffnest du die Datenbank vorher an einer stelle? ansonsten nutze ich variablen im string lieber klassisch, also "sadas".$blurb."adssa"
    ich weiß ghet auch so, aber meist ist der code sonst eh schlechter lessbar.


    Einmal editiert, zuletzt von Dirk (29. März 2016 um 17:44)

  • $field->name ist das ergebnis von dein sql statement, ergo kann es nicht im aufruf der funktion selber nutzen. das ist dann einfach NULL.
    Versuch am besten in die funktion die ganze ausgabe zu packen. ich weiß auch nicht ob das alles einzelne tabellen werdne sollen, oder nur eine. daher hier kein code.

  • Den HTML Code kann ich nicht in die Funktion packen da ich sonst gleich keine Funktion machen brauche.

    So

    Code
    function global_query($string, $variable_name) {
    $variable_name = mysql_query($string);
    return $variable_name;     
    }

    plus

    Wäre natürlich möglich aber das will ich eigentlich nicht.
    Grund ist das somit mehr code in der eigentlichen Datei anfällt und das nicht so Wartungsfreundlich ist wenn man z.b. mal auf mysqli umstellt muss man mehr zeilen anpassen da dies öfter benötigt wird.

    Es werden unter umständen mehrere Ergebnisse abgefragt also mehrere Tabellen erstellt.

    Gibt es keine schönere und schlanke Möglichkeit das umzusetzen?

    lg
    Michael

  • Hi, also nochmal damit alle verstehen warum ich das so machen möchte.
    Ich möchte diese Funktion möglichst kompakt und schnell upgradbar auf mysqli halten.

    Außerdem möchte ich damit verschiedene Abfragen ausführen und auch verschiedenen HTML Code einbinden.
    Wenn ich das nun so machen würde wie in meinem letzten Posting vorgeschlagen hätte ich unnötige Zeilen Code und müsste viel Anpassen um es mal mysqli fähig zu machen.

    Es muss ja nicht 1:1 wie meine Version aussehen aber hat vielleicht jemand eine bessere Möglichkeit auf lager?
    Ich wäre echt sehr dankbar, ich kann nun zwar noch ein paar PHP Datein derweil abfertigen aber ich bin bald soweit das ich diese Funktion unbedingt brauche.

    Hoffe ihr könnt mir da nochmal helfen.
    Ist scheinbar echt nicht so ganz einfach. :) :) :) ^^

    lg
    Michael

  • Ich schreibe im Prinzip gerade an einer ganz einfachen Forensoftware.
    Das Problem ist ohne diese Funktion komme ich jetzt erstmal nicht mehr weiter.

    Das einzige was ich noch machen könnte ist das User System aber das will ich eigentlich erst machen wenn alle Funktionen soweit funktionieren.

    - Editpost
    - Addreply
    - Newthread
    - Signup

    Läuft erstmal sowie das komplett Html gerüst mit CSS und Design steht.
    Aber ich brauche nun diese Funktion oder etwas ähnliches um weiterzukommen.

    Muss noch die Forenauflistung, Themenauflistung, Threadauflistung der Postings und dann im folgenden Postings Löschen sowie User Bannen funktionen schreiben.
    Einen Forenmanager benötige ich ebenfalls noch aber das ist alles nicht so wild wenn ich endlich die Funktion hätte. :P

    Wäre cool wenn ich da heute noch eine Lösung finde
    damit ich morgen vielleicht schon "fertig" werde grundsätzlich.

    lg
    Michael

  • Auch wenn du hier drei mal postet, wird dir keiner helfen können, wenn keiner die Lösung weiß bzw. sich mit PHP auskennt.
    Denn PHP ist scheiße

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • Die zweitbeste Software die ich kenne wurde in PHP geschrieben, also so schlecht ist es nicht.
    Die beste ist in Delphi glaube ich ^^ Aber das hilft mir jetzt auch nicht weiter, wenn dann ist es scheiße schwer.

    Wobei es nicht schwer ist wenn man es mal drauf hat.
    Ich schreibe jedoch normalerweise nur Addons für ne Forensoftware und keine eigene. ^^

    lg
    Michael

    Einmal editiert, zuletzt von Michael_ (30. März 2016 um 00:16)

  • Komisch das mir dies hier noch nicht in den Sinn gekommen ist.
    Es ist zwar auch etwas mehr code aber dafür trotzdem Wartungsfreundlicher wegen mysql 2 mysqli wenn es mal sein soll:

    Funktion 1

    Code
    function global_query($string, $variable_name) {
    $variable_name = mysql_query($string);
    return $variable_name;    
    }

    Funktion 2

    Code
    function global_query_fetch_object($herewego) {
    mysql_fetch_object($herewego); 
    }

    Lets Rock


    Ich werde das morgen ausprobieren, sollte aber denke ich funktionieren.
    Was haltet ihr von dieser Lösung? Falls es noch etwas besseres gibt gerne her damit.

    Aber ich denke damit kann man sich zufrieden geben.

    lg
    Michael

    Einmal editiert, zuletzt von Michael_ (30. März 2016 um 01:20)

  • Ich habe auch ein kleines nebenprojekt mit PHP und Mysql am laufen. Anfangs habe ich auch sehr viel in funktionen gekapselt, später weniger. Anfangs habe ich auch nur versucht alles in eine Seite mit Parameter zu Packen, später lieber eigene Seite mit viel Copy & Paste. Beides nicht einfach. Kein Ansatz scheint so richtig übersichtlich. Vor allem schafft man es nie so ganz Redudanzenfrei. Wenn man zu viele Ifs braucht oder zu viele Funktionen nimmt, ist das auch nicht übersichtlicher als riesige minimal unterschiedliche Varianten. PHP hat auch soviel organisch gewachsenes und viele Lösungsmöglichkeiten und fiesheiten.

    ich kann nur sagen, das wenn ich funktionen schreibe, die meist größer mache. Eher so als komplette Sinnabschnitte. mysqli kenn ich nicht, aber die abfragen in sql sind weitestgehend bei allen die selben. Das heißt im idealfall muss man da nicht ran und die Datenbankart bleibt transparent.

  • Habe im Moment keine Zeit mir das genauer anzuschauen, aber wenn ich mal dazu komme Schau ich mal.

    Ich würde erst mal empfehlen gleich auf PDO umzustellen.

    Der Doktor: es gibt fast immer nur schlechte Entwickler und keine schlechten sprachen (klar, manche Sprachen sind besser für manches als andere und jede Sprache hat so ihre Tücken und Murks, aber das ist noch mal was anderes). Gerade das aktuelle PHP ist doch sehr angenehm und gut nutzbar.

    CHRiSNEW: kannte ich selber noch nicht, danke. Hätte ich so was früher gehabt hätte mir das einiges erspart.

    Einmal editiert, zuletzt von winfreak (30. März 2016 um 10:53)

  • Das erste Beispiel hat nicht funktioniert, da die doppelten Anführungszeichen nicht rekursiv Variablen ersetzen. "$html_code" gibt dir nur einen String, der den Inhalt der Variable $html_code enthält, aber nicht Platzhalter in diesem ersetzt. Einziger Hack an dieser Stelle wäre eval, von dem ich aber dringend abrate.

    Nicht nur fällt dieser Code schon auseinander, wenn man Parameter nicht korrekt ausklammert (zudem müssen durch die doppelte Auswertung z. B. Anführungsstriche als \\\" geschrieben werden), sondern man müsste auch erheblichen Aufwand betreiben, um seinen Vorlage-String sauber zu bekommen, wenn dieser bereits zum Teil aus Benutzerinhalt besteht, da man ansonsten leicht Opfer des Äquivalents einer SQL-Injection wird, bei der beliebiger PHP-Code ausgeführt werden kann.
    Außerdem hast du noch das Problem, dass deine Datenbank-Inhalte u. U. keine gültigen HTML-Textliterale sind (wenn sie z. B. spitze Klammern oder Entitäten enthalten).

  • Korrektur, es muss heißen

    Code
    function global_query_fetch_object($herewego) {
    return mysql_fetch_object($herewego); 
    }


    So funktioniert es.
    Kann mir vielleicht noch jemand helfen eine Blätterfunktion einzubauen?


    lg
    Michael

  • Hab den Rest vom Thread nicht gelesen, aber wenn du die SQL-Ergebnisliste einschränken willst, um Unterseiten zu kriegen, kannst du in der Query einfach LIMIT nutzen.

  • Und genau dafür kannst du LIMIT einsetzen in der Query.

    Beispiel:
    LIMIT 0, 10 -> Zeilen 0 bis 10
    LIMIT 5, 5 -> Zeilen 5 bis 10

    Als erster Parameter wird immer der Startwert gesetzt und als zweiter dann, wie viele von dort aus.

  • Dabei ist es sinnvoll immer eine bestimmte Sortierung per ORDER BY zu bestimmen, damit die Reihenfolge der Ergebniszeilen vorhersagbar bleibt.

    Das MyBB fragt zum Beispiel die Posts für die erste Seite dieses Threads wie folgt ab, wenn man 50 Posts pro Seite in den Benutzereinstellungen konfiguriert hat:

    SQL
    SELECT pid
    FROM mybb_posts
    WHERE tid = '14391'
    AND visible = '1'
    ORDER BY dateline
    LIMIT 0, 50

    dateline ist dabei das Datum des Posts. Deine Boards willst du vermutlich eher nach ID oder einem dafür bestimmten Sortierschlüssel sortieren.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!