• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[PHP] Fehler im Code

Garasch

Neu angemeldet

Registriert
16 Dez. 2014
Beiträge
52
Servus,

ich habe für ein Kunden einen Code erstellt, für eine Suchabfrage über ein einfaches System.
Es soll nach X in einer Tabelle gesucht werden und dann soll Y & Z ausgegeben werden.
Anleitung hatte ich von Youtube.

Leider komme ich nicht weiter er Zeigt mir Errors an daher benötige ich eure Hilfe.


Wäre nett wenn ein Profi mal darüberschaut. Bekomme es nicht zum laufen.


[src=php]
<html>
<head>
<title>bfrage</title>
</head>
<body>
<form action='' method='POST'>
<input type='text' name='suchfeld' /> <input type='submit' name='suche_enter' value='Suchen'/>
</form>
<hr /><br />
<?php

if(isset($_POST['suche_enter']));
{
$host = "localhost";
$user = "test";
$pass = "+1";
$con = mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db("test_sw",$con) or die (mysql_error());
$suchbegriff = trim(htmlentities(stripslashes(mysql_escape_string($_POST['suchfeld']))));

$sql ="
SELECT
v_brandbreite,strasse,hausnummer,vorwahl,telefonnr
FROM
breitband
WHERE
vorwahl LIKE '%$suchbegriff%'
OR
telefonnr LIKE '%$suchbegriff%'
OR
strasse LIKE '%$suchbegriff%'
OR
hausnummer LIKE '%$suchbegriff%'

ORDER BY
strasse,hausnummer,vorwahl,telefonnr

";
$query = mysql_query($sql);

echo "<ul>";
WHILE($row = mysql_fetch_assoc($query));
{
$strasse = $row['strasse'];
$hausnummer = $row['hausnummer'];
$vorwahl = $row['vorwahl'];
$telefonnr = $row['telefonnr'];
$v_brandbreite = $row['v_brandbreite'];

echo "<li>$strasse $hausnummer $vorwahl $telefonnr <b>$v_brandbreite</b> </li>";

}
echo "</ul>";

}
?>
</body>
</html>

[/src]
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Hi,

also es wäre hilfreich wenn du den Fehler den PHP/mySQL dir ausgibt posten kannst, zum Beispiel PHP Error Log (Auszug) oder das mySQL Error Log, ich gehe einfach davon aus das du XAMMP oder MAMP benutzt um zu entwickeln?

In den Programmordnern findest du ein "log" bzw. "logs" Verzeichnis in denen die jeweiligen Fehlerprotokolle abgelegt werden. Wenn du das postest kann man dir auch leichter helfen ohne sich den Code genauer anschauen zu müssen.

Oder am besten auch das Debugging in PHP anstellen, dann wird der Fehler auch im Browser angezeigt wenn du die PHP Seite aufrufst.
 

Garasch

Neu angemeldet

Registriert
16 Dez. 2014
Beiträge
52
  • Thread Starter Thread Starter
  • #3
Sorry, ganz vergessen.

Zeile:
42 WHILE: unexpected 'while', expecting ',' or ';'
50 echo: unexpected 'echo'

Das sind die beiden Fehler die ausgegeben werden. Leider komm ich da nicht weiter, da hört mein PHP auf.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Die Zeilen 41 und 44 bis 50, da fehlen die Semikolons am Ende der Zeile - das sagt auch die Log zu: 42 WHILE: unexpected 'while', expecting ',' or ';'

Das meint die Zeile darüber...

[src=php]echo "<ul>"[/src]

sollten wohl sein:

[src=php]echo "<ul>";[/src]

Und das auch für die Zeilen 44 bis 50 ;)
 

Garasch

Neu angemeldet

Registriert
16 Dez. 2014
Beiträge
52
  • Thread Starter Thread Starter
  • #5
So Verbindung etc. klappt allerdings funktioniert die Ausgabe noch nicht.

Was mache ich falsch?
 
Zuletzt bearbeitet:

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.573
Was bekommst du denn angezeigt und was erwartest du?

Du solltest auch dein Query Objekt freigeben:

http://php.net/manual/de/function.mysql-fetch-assoc.php

Aus dem Manual (Beispiel 1):

[src=php]while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}

mysql_free_result($result);
[/src]
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Nur um das gleich zu erwähnen: Dein Programm hat eine Sicherheitslücke, ein Angreifer kann damit die komplette Datenbank übernehmen.
Das Problem ist, dass du Nutzereingaben ungefiltert in deinen SQL-Code einbaust. Gibt ein Nutzer bspw sowas als Suchbegriff ein:[src=sql]'; DROP TABLE breitband; -- [/src]dann sind deine Daten weg.

Das kannst du bspw. verhindern, indem du mysql_real_escape_string() auf den Suchbegriff anwendest, bevor du ihn in dein SQL einbaust, oder indem du gleich Prepared Statements verwendest.

Außerdem könntest du deine Variablen vor der Ausgabe noch durch die Funktion htmlentities() schicken, damit auch Sonderzeichen in den Feldern korrekt dargestellt werden.
 

virtus

Gehasst

Registriert
24 Apr. 2015
Beiträge
1.689
Ort
AUF DEM MOND
Zunächst einmal ganz allgemein:
Ich halte absolut nichts davon, dass jemand, der überhaupt keine Ahnung von Webentwicklung hat, glaub professionelle Projekte realisieren zu können. Mir ist klar, dass PHP sehr schnell und einfach erlernt werden kann und dass man auch ohne tiefgreifende Kenntnisse sehr schnell erste lauffähige Projekte auf die Beine stellen kann. Auch aufgrund der Vielzahl an Tutorials und Code-Snippets ist es sehr einfach sich Code zusammen zu kopieren, um schnell "Erfolge" vorweisen zu können.
PHP Anfängern möchte ich das auch in keinster Weise madig machen, aber ich kann auch nicht akzeptieren, dass man sich als blutiger Anfänger an Projekte wagt, die den eigenen Horizont bei weitem überschreiten. Das ist nicht nur ärgerlich für den "Kunden", der die Projekte in Auftrag gibt, sondern kann auch schnell größere finanzielle Schäden im 5-stelligen Euro-Bereich verursachen, zum Beispiel wenn dein PHP Script einen Email-Gateway offen legt oder über deine Anwendung sensible Daten leaken.
Auch künftigen professionellen Entwicklern wird damit das Leben schwer gemacht, weil diese den Mist ihrer Vorgänger ausbügeln müssen.
Ohne solide Kenntnisse von PHP und (My)SQL eine B2C-Anwendung zu erstellen ist einfach nur scheiße.

Mein Rat wäre, dem Kunden einen andere Entwickler zu empfehlen, mit dem Hinweis, dass dir die nötigen Kompetenzen für dieses Projekt fehlen.

tl;dr / "Ich will die ungeschönte Version"

Wieso zur Hölle nimmst du einen Auftrag an, wenn du nicht die nötige Qualifikation hast, den Auftrag fachgerecht zu bearbeiten? Bietest du auch deine Dienste als Chirurg an, nur weil du ein paar Folgen Scrubs geschaut hast?



Im Folgenden will ich speziell auf deine Arbeit eingehen.

Zunächst jedoch noch zwei prinzipielle Gedanken:

- sicherheitstechnischer Natur
ich habe für ein Kunden einen Code erstellt, für eine Suchabfrage über ein einfaches System. (...) Anleitung hatte ich von Youtube.
Bei sicherheitskritischen Anwendungen wird dir auch kein Youtube-Tutorial weiter helfen, denn änderst du nur ein einziges Detail in deiner Programmlogik oder in deiner Systemkonfiguration - ja, PHP hat eine riesige Konfiguration -, kann das gesamte Sicherheitskonzept für den Arsch.

- sicherheitstechnischer Natur/ Fähigkeiten und Kenntnisse betreffend:
ext/mysql ist schon seit längerem in Verruf und sollte schon seit Jahren nicht mehr verwendet werden. Spätestens seit PHP 5.5.0, welches am am 20 Juni 2013 veröffentlicht wurde, sind die allermeisten mysql_-Funktionen als deprecated markiert und mit PHP 7.0.0 steht die Extension nicht mehr zur Verfügung. PHP 7.0.0 wurde am 03 Dezember 2015 veröffentlicht. Aktuell ist PHP 7.0.7. Früher oder später, eher früher, wird deine Anwendung auf aktuellen Systemen nicht mehr lauffähig sein. Vielleicht ist das aber auch ganz gut so.


Beides bringt mich zu der Überzeugung, dass du wirklich keine Ahnung von dem hast, was du tust, daher auch die harschen Worte.
Nun möchte ich das aber noch an konkreten Beispielen in deinem Code durchgehen. Dabei will ich gar nicht auf die Feinheiten und Details eingehen. Ich beschränke mich auf wenige aber sehr grobe Fehler, die du in deinem Code begangen hast. Das gibt dir einerseits die Möglichkeit zu diesen konkreten Fehlern zu recherchieren, zeigt dir aber auch, dass es noch ein langer Weg bis zur professionellen Webanwendung ist.

[src=php]$con = mysql_connect($host,$user,$pass) or die(mysql_error());
mysql_select_db("test_sw",$con) or die (mysql_error());[/src]
Damit schmeißt du einem Kunden u.U. die Datenbank-Fehler direkt um die Ohren.
Natürlich erfüllt das seinen Zweck und die Scriptausführung wird mit einer Fehlerausgabe beendet, für den Kunden ist diese aber nicht mehr als eine kryptische Ausgabe und der Kunde ist auf nimmer-wiedersehen verloren. Statt wild mit Fehlermeldungen um sich zu werfen, sollte man Fehler behandeln und aus dem Fehlerfall heraus eine saubere Situation schaffen. Eine derartige Entwicklung würde sich fast schon von selbst mit Objektorientierter Programmierung einstellen, ist aber auch so möglich.

[src=php]$suchbegriff = trim(htmlentities(stripslashes(mysql_escape_string($_POST['suchfeld']))));[/src]
Ist dir klar, warum du diese Funktionen anwendest und warum du sie in genau dieser Reihenfolge verwendest? - Um dir die Antwort vorweg zu nehmen: Offenbar hast du überhaupt keine Ahnung, was die Funktionen bewirken und warum du sie an dieser Stelle in dieser Reihenfolge anwendest.
Mir ist klar, welcher Ansatz mit diesem Funktionen-Spam verfolgt werden soll, aber das, was da steht, ist leider Mist. Ganz allgemein solltest du dir immer ganz genau dein Ziel vor Augen halten und dann nachprüfen, wie du es erreichen kannst und bei einer Lösung, die du vermutlich(?) irgendwo gefunden hast, solltest du dich immer fragen, ob sie auch wirklich das tut, was dir versprochen wird.
Hättest du dich informiert, wüsstest du zum Beispiel, dass die Funktion mysql_escape_string() schon lange als veraltet gekennzeichnet ist. Ich zitiere php.net: "Diese Funktion wurde in PHP 4.3.0 als veraltet gekennzeichnet". PHP 4.3.0 wurde am 27 Dezember 2002 veröffentlicht. Die von dir verwendete Funktion ist demnach bereits seit gut 14 Jahren(!) veraltet.

[src=php]$query = mysql_query($sql);[/src]
Wenn dein Query einen Fehler erzeugt, zum Beispiel weil es zum timeout während dem laufenden Query kommt, fliegt dir das Script um die Ohren. Hier fehlt eine Fehlerbehandlung vollkommen.
Abgesehen davon, wie ich bereits sagte, wird ext/mysql nicht länger zur Verfügung stehen. Deine Anwendung baut auf einer völlig veralteten Technik auf.
Natürlich kannst du deinen Kunden bestimmt davon überzeugen, weiterhin veraltete und möglicherweise (bald) unsichere PHP-Versionen einzusetzen. Dazu muss er sich dann ggf. noch einen eigenen Server anmieten, weil einfache Webhosting-Pakete in der Regel nicht den Einsatz völlig veralteter PHP-Versionen erlauben.



Dazu noch die Hinweise von Rakorium-M, die aus sogar noch deutlich gewichtiger (sicherheitstechnische Aspekte) sind, als die von mir aufgezählten Probleme/ Risiken.
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
virtus hat im Prinzip Recht. Aber trotzdem: Lass dir nicht den Spaß am Programmieren nehmen! Wenn du erstmal etwas mit PHP vertraut bist, kannst du dich auch an professionellere Projekte wagen.

Wenn du etwas mehr Erfahrung mit PHP gesammelt hast, kann ich dir übrigens ein gutes Framework empfehlen, ich verwende mittlerweile für alle PHP-Projekte "CakePHP". Damit erschlägst du fast alle von Virtus genannten Probleme fast automatisch. Fehlerbehandlung? Erledigt CakePHP für dich. Datenbank-Verbindung? Bequem per ORM, unabhängig von irgendwelchen Extensions oder verwendeten Datenbank:
[src=php]$this->Breitband->find('all', ['conditions' => ['vorwahl LIKE' => $suchbegriff]])[/src]
Sicherheit? Eingebaute Komponenten, die du in 5min konfiguriert hast. Und SQL Injection verhindert das ORM ohnehin.
Sauberer Code? Ergibt sich zwangsläufig aus der Framework-Struktur (MVC).

Ob sich CakePHP allerdings für PHP-Neulinge eignet, kann ich nicht beurteilen.
 

KingJamez

Aktiver NGBler

Registriert
18 Juli 2013
Beiträge
505
Mit Frameworks ist das so eine Sache. Ja sie vereinfachen und man muss sich um bestimmt dinge nicht kümmern, das verspricht das Framework zumindest. Man sollte aber, wie ich finde, eine gewisse Erfahrung in der Sprache haben bevor man mit Frameworks anfängt.

Ein Framework sichert auch nie zu 100% ab, wenn man bestimmte features nicht kennt, nicht nutzt oder falsch nutzt, ist die Sicherheit auch dahin. Der TS hat sich ein Youtube Video angesehen, anscheinend ein sehr altes um den Code zu erstellen. Ich denke kaum das er eine Doku eines Frameworks von vorne bis hinten lesen würden. Er würde irgendwelche Schnipsel zusammen kopieren, Hauptsache es funktioniert.

Besser ist immer noch der Fall "jQuery".. jeder denkt er kann es. Viele basteln sich mittels Google irgendwas zusammen, laden dann noch 4-5 verschiede Plugins dazu, die teilweise auf zusätzlichen dependencies basieren. Hauptsache es funktioniert. Wenn man sich den Code dann mal genauer anschaut, wäre es entweder mit nur ein bisschen jQuery oder teilweise sogar eleganter und schneller in vanillas JS.
 
Oben