Kann nich in einen String convertirt werden

  • PHP

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Chrisber.

    Kann nich in einen String convertirt werden

    Hallo Leute,
    Da mir schon oft gesagt wurde ich solle mich mal mit OOP in sachen PHP beschäftigen habe ich mich heute mal hingesetzt und ein wenig gespielt. Derzeit versuche ist eine kleine "just4fun" übung zu schreiben.

    Ich habe folgenden Code:

    PHP-Quellcode

    1. <?php
    2. include ('config.php');
    3. if($_GET['action'] == "add") {
    4. sql::insert(); //<-- Funktion aufrufen
    5. }
    6. class sql {
    7. var $benutzername;
    8. var $passwort;
    9. function insert()
    10. {
    11. $name = "lol";
    12. $passwort1 = "lol1";
    13. $query = mysql_query("INSERT INTO login (Benutzername, Passwort) VALUES ('$name','$passwort1')");
    14. //$los = mysql_query($query);
    15. if ($query == true){
    16. echo "Erfolgreich eingetragen";
    17. }
    18. else {
    19. echo "Eintrag Fehlgeschlagen";
    20. }
    21. }
    22. function lesen()
    23. {
    24. $abfrage = mysql_query("SELECT * FROM `login`");
    25. while ($row = mysql_fetch_object($abfrage)){
    26. echo $row -> Benutzername . "<br>";
    27. }
    28. }
    29. }
    30. class name {
    31. var $benutzer;
    32. function eintragen()
    33. {
    34. $name->benutzer = "Patrick112";
    35. $query = mysql_query("INSERT INTO `login` (`Benutzername`) VALUES ('$name')");
    36. if ($query == true){
    37. echo "Erfolgreich eingetragen";
    38. }
    39. else {
    40. echo "Eintrag Fehlgeschlagen";
    41. }
    42. }
    43. }
    44. ?>


    Ich bekomme als Fehlermeldung das in Zeile 40 (Class name) etwas nicht zu einem String Convertiert werden kann doch ich finde dort nichts was nicht convertiert werden könnte da die Variable einen String als Wert hat der in die Datenbank geschrieben werden soll.

    Nur weil du Klassen nutzt, ist es noch lange kein OOP. Sondern OOP ist, wenn man bestimmte Abläuft in funktionen zusammenfasst um sie NICHT jedes Mal neu zu schreiben. Diese Funktionen werden dann in aussagekräftige Klassen gepackt.

    Du machst in jeder Funktion immer das gleiche

    PHP-Quellcode

    1. $query = mysql_query("INSERT INTO `login` (`Benutzername`) VALUES ('$name')");
    2. if ($query == true){
    3. echo "Erfolgreich eingetragen";
    4. }
    5. else {
    6. echo "Eintrag Fehlgeschlagen";
    7. }


    nur der SQL Querystring ändert sich.

    Wie z.B. eine SQL Klasse in PHP aussehen könnte wäre z.B. so

    PHP-Quellcode

    1. class sqldb {
    2. var $sqlObj;
    3. public function connect($host, $username, $password) {
    4. $this->sqlObj = mysql_connect($host, $username, $password) or die ($this->sqlError(mysql_error()));
    5. }
    6. public function selectDB($dbname) {
    7. mysql_select_db($dbname) or die ($this->sqlError(mysql_error()));
    8. }
    9. public function query($sqlString) {
    10. return mysql_query($sqlString) or die ($this->sqlError(mysql_error()));
    11. }
    12. private function sqlError($message) {
    13. echo $message;
    14. exit();
    15. }
    16. }


    Damit sparst du dir dann jedesmal das Error Management usw. genutzt wird sie einfach so

    PHP-Quellcode

    1. $db = new sqldb;
    2. $db->connect("localhost", "root", "");
    3. $db->selectDB("test");
    4. $res = $db->query("SELECT * FROM `tabelle` WHERE `id` = 1");
    5. while($row = mysql_fetch_object($res)) {
    6. echo $row->name;
    7. }


    Das kann man noch beliebig erweitern, ich habe z.b. in meiner Klasse noch Funktionen für letzte ID, Zeilen zählen vom Query usw.
    mit mysql_fetch_assoc kannst du (Wie der Name schon sagt) die Daten mit den Spaltennamen indizieren.

    z.B:

    PHP-Quellcode

    1. while ($row = mysql_fetch_assoc($result)) {
    2. echo $row["userid"];
    3. echo $row["fullname"];
    4. echo $row["userstatus"];
    5. }


    Macht das Ganze leserlicher.
    "I think Microsoft has abused the Windows brand so much that it has lost its cachet."
    Paul Thurrott
    ne, mysql_fetch_array benutzt man eig so:

    PHP-Quellcode

    1. while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    2. printf("ID: %s Name: %s", $row[0], $row[1]);
    3. }
    "I think Microsoft has abused the Windows brand so much that it has lost its cachet."
    Paul Thurrott

    BeefyX schrieb:

    Ich finde mysql_fetch_object unnötig.


    Was hat das mit den von den Benutzer erstellten Tabellen zu tun??

    Ich nutze diese Methode, weils das Result eben Objekt zurück kommt und ich normal ja auch in PHP nur mit Objekten Programmiere. Zudem wenn man ein Array in einem String angeben will wird das z.T. sehr eklig, denn

    PHP-Quellcode

    1. echo "Hallo dein Name ist $res['username'], willkommen!";


    funktioniert nicht, entweder müsste man es dann so

    PHP-Quellcode

    1. echo "Hallo dein Name ist ".$res['username'].", willkommen";


    oder so

    PHP-Quellcode

    1. echo "Hallo dein Name ist {$res['username']}";


    machen und da ist mir die Objektvariante doch deutlich lieber und auch übersichtlicher

    PHP-Quellcode

    1. echo "Hallo dein Name ist $res->username";



    Zu assoc und array. Wie der Name schon sagt ist fetch_assoc ein assoziatives Array welches als Index auch den Spaltennamen akzeptiert, fetch_array hat lediglich den Zahlen Index.
    Mir wurde pft printf empfohlen aber wenn Chrisber sagt es were Fehleranfällig bleibe ich bei meinem echo.
    Warum ist printf eigentlich fehler anfällig ?

    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.