Verständnisfrage

kosovafan

Erfahrenes Mitglied
Hallo,

ich brauche einmal wieder die Hilfe von euch. Doch vorher möchte ich mich einmal bedanken. Ich weiß das von mir meistens Anfängerfragen kommen, ich finde es aber schön das Ihr mich so durch diese Lernzeit gebracht habt und vielleicht noch bringt. Ich habe einen Nachbar, der für die Elektroindustrie programmiert, der mich sehr davor gewarnt hat, in Foren etwas so leichtes zu fragen (obwohl er es selber nicht wusste) den Programmierer sollen wohl arrogant sein. Ich finde aber schön das er sich geirrt hat, im Gegenteil ich fühle mich hier sehr wohl und hoffe das ich weiter lerne und auch einmal Erfahrung in die Hilfe einbringen kann. Besonderen Dank möchte ich hier "Maniac und tombe" aussprechen die sehr viel Geduld mit mir leicht verwirrten Menschen hatten.

Zu meinen Anliegen jetzt:
Ich bin gerade dabei meine Website vom CMS auf „Hand“ zu schreiben. Die Website läuft aktuell zu meiner Zufriedenheit, ich beschäftige mich jetzt mit der Optimierung und dem Thema Sicherheit.

Ich habe einen Blog, der eine Übersicht hat und denn detaillierten Artikel dann auf der gelinkten Seite darstellt. Hier ist die große Baustelle, in denen es die drei Bereiche, Artikel, Kommentare und das speichern der Kommentare gibt. Ich habe das aktuell in die Bereiche Artikel und Kommentare/Kommentare schreiben unterteilt, was sich aber nach der Prüfung auf die ID, numerische ID als schlecht herausstellte, denn wenn PHP ein false bei den Prüfungen gibt, wird der Kommentar Bereich trotzdem geladen. Ich wollte deshalb den Code zusammenfassen, was aber nicht so klappt.

Deshalb wollte ich einmal fragen, wie geht man so eine Website an. Gibt es in PHP Regeln, wie man, ich weiß nicht wie ich das nennen soll, Bereiche unterteilt? Wir haben ja SELECT und INSERT, kommen zum Beispiel Insert vor allen SELECT Befehlen? Ich habe mich mit Mysql Union beschäftigt um die Abfragen für den Artikel und Kommentare zu vereinen, was anscheinend auch läuft zumindest bemängelt PHP zurzeit nur den Befehl mysqli_num_rows, was man ja versteht, den durch die UNION Anweisung in der SELECT Abfrage weiß mysqli_num_rows sicher nicht welche Abfrage es nutzen soll. Oder ist es sinnvoll die Abfrage für die Kommentare schon mit in der Abfrage zur Kontrolle des Artikels mit einzubauen. Wie sollte ich das aufbauen? Welche Funktionen der riesigen PHP Referenz sollten genutzt werden?

Ich hoffe ich habe mich ein wenig verständlich erklärt, wenn nicht einfach fragen. So jetzt hoffe ich einmal auf Tipps und Anregungen.

Gruß
Silvio
 
Hallo,


vielen Dank für den Link. Das klingt ein wenig umständlich, aber nach ein paar mal Lesen wird es sicher verständlich werden.

Ich habe es soweit fertig bekommen jetzt, die IF Abfragen laufen, die Fehlermeldungen werden auch ausgegeben, das einzige was nicht passiert, die geschrieben Comments werden nicht in die Datenbank geschrieben. Ich habe mit var_dump die $_Post getestet, diesmal sind diese korrekt. Aber er schreibt es nicht. Vielleicht kann sich das mal jemand unter http://www.silviosiefke.de/blog.txt anschauen. Sind ein paar Codezeilen, deshalb externer Link.

Würde mich freuen!


Silvio
 
Was kommt denn für eine Fehlermeldung? Du benutzt ja korrekterweise mysql_error() udn prüfst Rückgabewerte, was sehr löblich ist ;-)

Im Prinzip möchte ich Napofis beipflichten. Wenn du dich dazu bereit fühlst, solltest du dir ein Framework suchen/selbst schreiben, was MVC beherrscht. Damit fallen ein paar der Probleme weg, die du versuchst, zu umschiffen. Wenn du des Englischen einigermaßen mächtig bist, kannst du hier mal einen Blick drauf werfen, da wird ziemlich schön erklärt, wie man eine Web-Applikation mit Zend Framework baut, mit Schwerpunkt MVC:

http://www.killerphp.com/zend-framework/videos/
 
SQL:
INSERT INTO
`comments`
(`inhalt`, `date`, `blogid`, `email`, `name`)
VALUES ('{$_POST['inhalt']}', NOW(), '{$id}', '{$_POST['email']}', '{$_POST['name']}')

Es ist ziemlich Mutig von dir die Benutzereingeben ohne Überprüfung direkt an die Datenbank zu schicken. Der Inhalt der Variablen kann den Fehler Verursachen zB nenne ich mich mal O'Neil und schon gehts nicht mehr.

Welche Fehlermeldung kommt den von der Datenbank?
 
Hallo,


es kommt gar keine Fehlermeldung das ist es ja. Ich komme ja wirklich zurecht, den mit Fehlermeldungen und Google lässt sich vieles klären. Nur eben hier am Beispiel kommt keine Fehlermeldung. Wenn ich auf absenden klicke, wird das Formular nur geleert, ich sehe nur an var_dump das zumindest die POST Werte korrekt übergeben werden. Das ist mein großes Problem, ich weiß dann nie wo ich den Fehler suchen soll. Ihr könnt das gerne probieren,
http://www.silviosiefke.de/ss/bloggen.html -> dort einfach ein Eintrag wählen und probieren, ich lade das eben hoch.

@napofis
Du hast recht, ich bringe das ganze immer erst am laufen, danach wird es auf Sicherheit getrimmt. Ich hatte schon mit mit escape versucht, bekomme hier aber nur Fehlermeldungen.

@saftmeister
Ja das wollte ich später machen. Ich stehe irgendwo am Anfang und jeden Tag den das was ich mit PHP versuche um zu setzen auch klappt mir Vertrauen gibt. Nur scheitere ich schon, wenn PHP keine Fehlermeldungen liefert. Ich weiß dann nie wo ich suchen muss. Das Zend Framework nutze ich lange, zumindest für Feeds.

Jetzt liefert PHP keine Werte zurück, wenn ich die Bereiche getrennt lasse funktioniert es, den Code dazu findet Ihr unter http://www.silviosiefke.de/blogdetail.txt, wenn ich es zusammen führe dann geht nichts mehr.


Würde mich freuen, wenn Ihr da helfen könnt.


MFG
Silvio
 
Hallo,

ich habe es jetzt hinbekommen. Ich habe einfach das Captcha rausgenommen, was das Captcha mit Mysql Insert zu tun hat, möchte ich auch mal wissen. Naja dann muss die Date Kontrolle wegen Spam reichen. Ich hatte gestern in einem Blog gelesen, das die Ihre Benutzer zu einer Vorschau zwingen. Was haltet Ihr davon?

Ich habe jetzt mysqli_real_escape_string mit eingearbeitet, könnt Ihr euch den aktuellen Code noch einmal unter http://www.silviosiefke.de/blog.txt anschauen. Für Tipps zur weiteren Sicherheit bin ich dankbar.

MFG
Silvio
 
Hätte ja gern getestet, aber bei mir kommt das:

Code:
Warning: require(inc/include.html): failed to open stream: No such file or directory in /usr/local/www/vserver/silviosiefke.de/data/ss/blogdetail.html on line 52 Fatal error: require(): Failed opening required 'inc/include.html' (include_path='/usr/local/www/vserver/silviosiefke.de/includes:/usr/local/share/pear:/usr/local/share/jpgraph:/usr/local/share/Zend/library') in /usr/local/www/vserver/silviosiefke.de/data/ss/blogdetail.html on line 52

wenn ich auf "Weiterlesen" klicke...

Desweiteren habe ich einen prima Vorschlag: Achte auf Code-Formatting. Mit welchem Editor/welcher IDE arbeitest du? Ich empfehle Eclipse. Datei öffnen, kompletten Code mit STRG+A markieren, und STRG+i drücken für automatische Code-Formatierung. So kann man das echt schlecht lesen.
 
Hallo,

habe ich geändert, jetzt kannst du das testen. Ich teste lokal auf den Rechner hier, aber auf dem Server sind alle Dateien im include Path, deshalb kam der Fehler.

Ich nutze Webbuilder von Blumentals, Eclipse habe ich zwar installiert, ist mir aber zu wuchtig. Dein Tipp mit der Formatierung habe ich aber gemacht, hat sich aber nicht sehr viel geändert.

Würde mich freuen, wenn du dir das mal anschaust. Wie gesagt, Kommentare können geschrieben werden, warum das mit Captcha nicht geht, bleibt wohl ein Geheimniss von PHP. Zum Thema von Napofis "ungeprüft" habe ich jetzt mysqli_real_escape_string genutzt, gibt es noch etwas zu beachten?

Darf ich mal eine Frage stellen, was ist der Vorteil von Preperad Method in Mysql? Ich habe hier zwei PHP Training Videos, wobei mir das von Video2Brain besser gefällt. Er hat eigentlich nur gesagt, das gerade bei Benutzereingaben die ganzen Prüfungen wegfallen können, aber so den wirklichen Vorteil der prepared Method lies er im dunkeln. Stimmt das den? Gibt es den noch mehr Vorteile?


Silvio
 
Die eigentliche Intention von Prepared Statements ist, SQL zu parametrisieren. Da du noch Anfänger bist, möchte ich nicht zu sehr ins Detail gehen. Aber hier mal ein Link zu einem meiner Tutorials:

http://www.tutorials.de/content/434-sichere-datenbankzugriffe-durch-prepared-statements.html

Darin wird die Theorie hinter PS angesprochen. Es gibt diverse Vorteile, hier ein Abriss:

- Bessere Code-Lesbarkeit durch parametrisierte SQL-Statements
- Implizite (wenn es der Treiber unterstützt) oder explizite Typ-Prüfung (dadurch robuster gegen SQL-Injection)
- Bessere Performance, da der Query am Server vorgehalten wird, und bei Schleifen nicht jedes mal neu kompiliert wird (einmaliges Query-Compiling durch Preparation)
- Macht mehr Spaß ;-)
 
Zurück