PHP - Hilfe Gesuch

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP - Hilfe Gesuch

    Moin zusammen,

    ich habe gestern versucht in meiner index.php als Pfas zu einer Datei den Rückgabewert einer PHP methode (in einer anderen Datei zu laden.

    PHP-Quellcode

    1. <?php
    2. class DataSource
    3. {
    4. public static function getPath()
    5. {
    6. return "test/var/www/..."
    7. }
    8. }
    9. ?>
    Alles anzeigen


    Aufgrufen habe ich das Script dann wie folgt.

    HTML-Quellcode

    1. // include DataSource.php (s. oben)
    2. <img src=" + <? echo DataSource::getPath() ?> + " alt=""/>

    Allerdings bricht da irgendwetwas ab, sodass mein HTML File bei "...src=" aufhört.

    Wenn ich aber folgenden Code verwende, wird als Pfad "test" ausgegeben.


    Quellcode

    1. <img src=" + <? echo "test" ?> + " alt=""/>
    Was genau stimmt an meinem Aufruf nicht? :(
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • macmoonshine schrieb:

    Wie sieht den genau Dein require-Befehl aus?

    BTW: Die Pluszeichen in den Listings sind zu viel.
    'require'... da war doch was... also mein Befehl sieht aus wie im Kommentar. Ein 'include'... aber wenn ich dich richtig verstehe scheint es falsch zu sein? Teste ich nach Feierabend mal. Danke :) Die + fliegen dann direkt mit raus.

    gritsch schrieb:

    return ist noch lange keine ausgabe.

    du kannst natürlich auch <?= verwenden!
    Ich war davon ausgegangen dass ich die Rückgabe über echo ausgeben könnte. Ich versuchs mal mit <?=, danke :)
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DataSource.php

    PHP-Quellcode

    1. <?php
    2. class DataSource
    3. {
    4. public function printTest() {
    5. return "test";
    6. }
    7. }
    8. ?>
    9. <?php
    Alles anzeigen

    index.php

    PHP-Quellcode

    1. <?php
    2. require '/service/DataSource.php'
    3. ?>
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    5. <html xmlns="http://www.w3.org/1999/xhtml" lang="de">
    6. <head profile="http://gmpg.org/xfn/11">
    7. <!-- wird noch ausgefüllt -->
    8. </head>
    9. <body>
    10. <p><?= DataSource::printTest() ?></p>
    11. </body>
    12. </html>
    Alles anzeigen
    Wenn ich per Safari in den Seitenquelltext schaue habe ich eine völlig leere Seite... Die einzige sichtbare Fehlermeldung ist

    Bildschirmfoto 2015-10-28 um 08.02.02.png
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Wozu soll denn das "=" hinter dem "<?" sein?

    Übrigens ein Grund warum ich PHP immer noch prozedual programmiere. Das Objektorientierte ist dermassen oben drauf geklatscht das es einfach nur häßlich ist.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Noch mal was...

    Und zwar habe ich zusätzlich noch ein Script, welches ich per HTTP ansprechen möchte.

    Ich muss ehrlich gestehen, das sich mir das gestern eben kurz aus dem Netz kopiert habe, aber die MySQL Operationen selber implementiert habe.


    PHP-Quellcode

    1. <?php
    2. header('Access-Control-Allow-Origin: *');
    3. header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
    4. header('Access-Control-Allow-Headers: Content-Type');
    5. if(isset($_POST['timeLapsePath'])))
    6. {
    7. echo 'Response from server: ' . $_POST['timeLapsePath'];
    8. $givenPath = $_POST['timeLapsePath'];
    9. $servername = "localhost";
    10. $username = "user";
    11. $password = "password";
    12. $dbname = "db";
    13. // Create connection
    14. $conn = new mysqli($servername, $username, $password, $dbname);
    15. // Check connection
    16. if ($conn->connect_error) {
    17. die("Connection failed: " . $conn->connect_error);
    18. }
    19. $sql = "INSERT INTO TimeLapse (path) VALUES ('" + $givenPath + "')";
    20. if ($conn->query($sql) === TRUE) {
    21. echo "New record created successfully";
    22. } else {
    23. echo "Error: " . $sql . "<br>" . $conn->error;
    24. }
    25. $conn->close();
    26. }
    27. else {
    28. echo "failed...";
    29. }
    30. ?>
    Alles anzeigen
    Ich war davon ausgegangen, dass beim Aufruf von wetter-goch.de/service/saveTimeLapse.php?timeLapsePath=test eine Ausgabe auf der Seite landen würde?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • DanielBocksteger95 schrieb:

    Und zwar habe ich zusätzlich noch ein Script, welches ich per HTTP ansprechen möchte.

    Ich muss ehrlich gestehen, das sich mir das gestern eben kurz aus dem Netz kopiert habe, aber die MySQL Operationen selber implementiert habe.


    PHP-Quellcode

    1. <?php
    2. header('Access-Control-Allow-Origin: *');
    3. header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
    4. header('Access-Control-Allow-Headers: Content-Type');
    5. if(isset($_POST['timeLapsePath'])))
    6. {
    7. echo 'Response from server: ' . $_POST['timeLapsePath'];
    8. $givenPath = $_POST['timeLapsePath'];
    9. $servername = "localhost";
    10. $username = "user";
    11. $password = "password";
    12. $dbname = "db";
    13. // Create connection
    14. $conn = new mysqli($servername, $username, $password, $dbname);
    15. // Check connection
    16. if ($conn->connect_error) {
    17. die("Connection failed: " . $conn->connect_error);
    18. }
    19. $sql = "INSERT INTO TimeLapse (path) VALUES ('" + $givenPath + "')";
    20. if ($conn->query($sql) === TRUE) {
    21. echo "New record created successfully";
    22. } else {
    23. echo "Error: " . $sql . "<br>" . $conn->error;
    24. }
    25. $conn->close();
    26. }
    27. else {
    28. echo "failed...";
    29. }
    30. ?>
    Alles anzeigen
    Ich war davon ausgegangen, dass beim Aufruf von wetter-goch.de/service/saveTimeLapse.php?timeLapsePath=test eine Ausgabe auf der Seite landen würde?
    ja, "failed..." sollte ausgegeben werden weil du einen GET sendest, aber nach POST fragst.
  • gritsch schrieb:

    DanielBocksteger95 schrieb:

    Und zwar habe ich zusätzlich noch ein Script, welches ich per HTTP ansprechen möchte.

    Ich muss ehrlich gestehen, das sich mir das gestern eben kurz aus dem Netz kopiert habe, aber die MySQL Operationen selber implementiert habe.


    PHP-Quellcode

    1. <?php
    2. header('Access-Control-Allow-Origin: *');
    3. header('Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS');
    4. header('Access-Control-Allow-Headers: Content-Type');
    5. if(isset($_POST['timeLapsePath'])))
    6. {
    7. echo 'Response from server: ' . $_POST['timeLapsePath'];
    8. $givenPath = $_POST['timeLapsePath'];
    9. $servername = "localhost";
    10. $username = "user";
    11. $password = "password";
    12. $dbname = "db";
    13. // Create connection
    14. $conn = new mysqli($servername, $username, $password, $dbname);
    15. // Check connection
    16. if ($conn->connect_error) {
    17. die("Connection failed: " . $conn->connect_error);
    18. }
    19. $sql = "INSERT INTO TimeLapse (path) VALUES ('" + $givenPath + "')";
    20. if ($conn->query($sql) === TRUE) {
    21. echo "New record created successfully";
    22. } else {
    23. echo "Error: " . $sql . "<br>" . $conn->error;
    24. }
    25. $conn->close();
    26. }
    27. else {
    28. echo "failed...";
    29. }
    30. ?>
    Alles anzeigen
    Ich war davon ausgegangen, dass beim Aufruf von wetter-goch.de/service/saveTimeLapse.php?timeLapsePath=test eine Ausgabe auf der Seite landen würde?
    ja, "failed..." sollte ausgegeben werden weil du einen GET sendest, aber nach POST fragst.
    Kommt aber auch nicht... wie ließe sich denn über den Browser ein Post durchführen? gar nicht? ....

    ich merk schon, ich sollte mich mal wieder mehr damit beschäftigen...
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • Sicherlich nicht, da timeLapsePath in dem Fall nur ein $_GET Parameter ist und kein $_POST. Dementsprechendwird dein Script nicht viel machen.

    Weiterhin solltest du unbedingt preparedStatements benutzen bei dem sql query.

    Gruß

    Claus

    P.S. boah ihr seit zu schnell für mich am frühen morgen....
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • btw.

    es ist sehr nervenschonend sich erstmal einen MAMP zu installieren und die komplette Entwicklung lokal zu machen. Ist deutlich schneller wenn man nicht für jede kleine Änderung einen FTP put machen muss und vereinfacht vor allem das Debuggen der SQL Datenbank, da man dann mit NAvicat o.ä. arbeiten kann und nicht mit mysqladmin oder was auch immer der Provider zur Verfügung stellt.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    btw.

    es ist sehr nervendschonend sich erstmal einen MAMP zu installieren und die komplette Entwicklung lokal zu machen. Vereinfacht vor allem das Debuggen der SQL Datenbank, da man dann mit NAvicat o.ä. arbeiten kann und nicht mit mysqladmin oder was auch immer der Provider zur Verfügung stellt.

    Gruß

    Claus


    für MySQL kann ich auch Sequel Pro (kostenlos) empfehlen.

    ob die DB nun lokal liegt oder irgendwo gehostet wird, kannst du doch immer mit den tools die daten verwalten (du kannst die DB meist für deine IP freischalten, über SSL absichern).
  • Gritsch meint wahrscheinlich sowas:

    Quellcode

    1. $debug=true;
    2. if(isset($debug))
    3. {
    4. //set off all error for security purposes
    5. ini_set('display_errors', true);
    6. error_reporting(E_ALL | E_STRICT);
    7. }
    8. else
    9. {
    10. ini_set('display_errors', false);
    11. error_reporting(0);
    12. }
    Alles anzeigen
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gritsch schrieb:

    Thallius schrieb:

    btw.

    es ist sehr nervendschonend sich erstmal einen MAMP zu installieren und die komplette Entwicklung lokal zu machen. Vereinfacht vor allem das Debuggen der SQL Datenbank, da man dann mit NAvicat o.ä. arbeiten kann und nicht mit mysqladmin oder was auch immer der Provider zur Verfügung stellt.

    Gruß

    Claus
    für MySQL kann ich auch Sequel Pro (kostenlos) empfehlen.

    ob die DB nun lokal liegt oder irgendwo gehostet wird, kannst du doch immer mit den tools die daten verwalten (du kannst die DB meist für deine IP freischalten, über SSL absichern).

    Ka ob große Provider wie Strato das machen. Ich habe noch nie nachgefragt da ich es lokal einfacher finde.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)