Problem mit Php Klasse

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
  • Hey, ich habe ein Problem mit meiner PHP Klasse undzwar arbeite ich in dieser mit MySQL, allerdings werden die angegebenen Werte nicht an die Funktionen übergeben.



    Ich bekomme immer folgenden Fehler:



    Code
    Notice:  Undefined variable: mysql_host in C:\xampp\htdocs\changelog\mysql.class.php on line 9
    Notice:  Undefined variable: mysql_user in C:\xampp\htdocs\changelog\mysql.class.php on line 9
    Notice:  Undefined variable: mysql_pass in C:\xampp\htdocs\changelog\mysql.class.php on line 9
    Notice:  Undefined variable: mysql_data in C:\xampp\htdocs\changelog\mysql.class.php on line 10


    Ich hoffe, mir kann jemand helfen :S

    Einmal editiert, zuletzt von Nemesus Jr. ()

  • PHP
    class changelogs{
    		private $mysql_host = '127.0.0.1';
    		private $mysql_user = 'root';
    		private $mysql_pass = 'Edit: zensiert';
    		private $mysql_data = 'changelog';
            function __construct(){
                mysql_connect($this->mysql_host, $this->mysql_user, $this->mysql_pass);
                mysql_select_db($this->mysql_data);
            }

    Einmal editiert, zuletzt von NicoWiss ()

  • Von globalen Variablen raten wir mal besser ab, wenn nicht unumgänglich, also bitte nach vorgegebener Methode lösen.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Warum davon abraten?

    Weil auf globale Variablen alles und jeder zugreifen kann, ganz gleich wer und aus welchem Grund. Unkontrollierter Zugang ist immer ein Manko, dass es zu vermeiden gilt.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Bitte nicht so.
    Klassen haben aus gutem Grund einen Konstruktor, dem Parameter übergeben werden können.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Der Konstruktor einer Klasse wird immer ausgeführt wenn ansatzweisse die Klasse aufgerufen wird.


    Aber ich empfehle mit PDO zu arbeiten. Ich habe dazu mir auch eine PDO-Klasse geschrieben die du gerne verwenden darfst.


    Ich verwende allgemein meine DB-Klasse nur in anderen Datenbank Klassen. Allerdings kann man es auch in prozenduale Programmierung verwenden.

    PHP
    $db = new Database; 
    
    
    $db->Query(SQLBEFEHL);
    $db->execute(); //Gibt True zurück wenn SQL Befehl erfolgreich ausgeführt ansonsten false


    Aber wenn man einen SQL Befehl in einen derzeit ausgeführten SQL Befehl ausführen möchte. Dann muss man eine neue Datenbank Distanz erstellen sonst funktioert es nicht.


    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

    Einmal editiert, zuletzt von palwal () aus folgendem Grund: Korrektur

  • "Dann muss man eine neue Datenbank Distanz erstellen sonst funktioert es nicht." - alleine schon das ist grausam. Man stelle sich nur mal Relationen vor - das sind dann gerne mal 4, 5 oder auch mehr Verbindungen zur Datenbank.
    Deine Klasse ist im übrigen auch sonst wenig sinnvoll - enschuldige, dass ich das so direkt sage. Auch hier gilt: Konstruktor sinnvoll einsetzen.


    Ihr braucht nicht immer das Rad neu erfinden.

    Moderator der Bereiche: Coding, Vorstellungsrunde und Handelsecke. Über Verwarnungen, falls du zu den Wenigen gehörst, die eine Verwarnung von mir erhalten haben, kannst du jederzeit mit mir reden, sofern der Umgangston stimmt.


    expect us. / unkompetent. Das neue dynamisch. / easy-stripping.net - coming soon! / "9§. the entire website bestands out of english." / Vollprofi in allem, wo gibt und noch mehr; kann auch OOP.
    Kleine Coding-Frage? Schau doch in #dev im IRC vorbei, wir können dir sicher helfen.


    Ich bin für Aufträge im Bereich der Webentwicklung (z.B. User Control Panel) zu haben. Kontaktiere mich diesbezüglich einfach in einer privaten Nachricht mit deinen, möglichst konkreten, Vorstellungen.


    lesen.denken.posten. - [22:54:14] <Goldkiller2> früher gabs immer so coole user da stand in der signatur "lesen.denken.posten."


    Mafia 2 Multiplayer (m2mp.de) - Eine kostenlose Modifikation für Mafia 2, die es, ähnlich wie SAMP, erlaubt über das Internet oder LAN mit bis zu 1000 anderen Spielern zu spielen.

  • Nein das ist ganz praktisch trotz allem.


    Ist doch wohl logisch das wenn man in eine Distanze arbeitet diese nicht überschreiben kannst. Das musst du auch nur wenn du in einer Distanze einen anderen SQL Befehl ausführen willst.


    Wenn du ein SQL Befehl ausgeführt hast und ihn nicht weiter behandeln möchtest dann kannst du mit der gleichen Variable einen neuemn SQL Befehl ausführen.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • Nein das ist ganz praktisch trotz allem.


    Ist doch wohl logisch das wenn man in eine Distanze arbeitet diese nicht überschreiben kannst. Das musst du auch nur wenn du in einer Distanze einen anderen SQL Befehl ausführen willst.


    Wenn du ein SQL Befehl ausgeführt hast und ihn nicht weiter behandeln möchtest dann kannst du mit der gleichen Variable einen neuemn SQL Befehl ausführen.


    Wenn man davon noch nicht so die Ahnung hat wie der @TA: sollte man lieber bei mysqli bleiben, deine Klasse ist mit unnötigen Variablen bestückt und sieht auch nicht gerade schön verwendbar aus.


    Also ich sage dazu immer nur entweder man arbeitet sich da komplett von alleine rein oder lässt es bleiben. Deine Klasse hat nichtmal Erklärungen, "Beginner" in PDO wüssten somit nichtmal was du da machst

  • Nicowiss ich mag deine Art, seit ich dich kenne kritisierst du alles irgendwie.


    mysql_connect() Function ist nicht MySQLi! Das ist die standartbassierte function um eine Db Connection aufzubauen.


    Ich hab nur eine Empfehlung ausgesprochen. Abgesehen davon kannst du es auch verwenden, wie du magst. Vielleicht stelle ich meine Klasse ins Showroom mit einer Dokumentation.


    Auch von der Schreibweise her ist meines leicht handlebar. Ich habe Bekannten von mir die Klasse gegeben die auch etwas in der Webprogrammierung sind (Aber keine Profis) und von denen habe ich auch nur gutes Feedback gehört. In der Theorie sieht es komplizerter aus als es eigentlich ist.


    Ausserdem bietet PDO mehr Security. Einfach mit mysql_real_escape_string() ein String zu maskieren ist es nicht getan und hilft auch oftmals nicht. Einfache SQL-Injections können nicht ausgeführt werden aber erweiterte schon. Arbeite erstmal mit meiner Klasse in der Praxis und gebe bitte dann erst ein Feedback ab.

    Wer PALWAL-Sternchen vergibt, bekommt aus Prinzip ein Like 😏


    @palwal Donald Trump ist einer der besten Präsidenten welche die USA je hatte, meine Meinung.

  • naja die MySQL Extension ist immernoch veraltet. Ich empfehle dir mal deine PDO Klasse zu verbessern, die ist ja schrecklich, da kannste lieber direkt die Originale PDO Klasse bzw. deren Abwandlungen nutzen...


    Außerdem für Privat Anwender ist MySQLi vollkommen in Ordnung? Wozu braucht ein Privatanwender Transactions usw? Und Prepared Statements kriegst man ebenso easy auch mit mysqli hin...

    Mit freundlichen Grüßen
    Developer
    Go/Python Developer | ehm. Webdeveloper | Fachinformatiker Anwendungsentwicklung
    Arbeitet in einem cloudigen Umfeld bei einem der größten deutschen Rechenzentrumsbetreibern