Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
kostenloses Branchenbuch - Brainstorming [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
kostenloses Branchenbuch - Brainstorming


 
gruenspan
28-06-2006, 16:52 
 
Hi@All

Ich habe ein kleines Internetprojekt und möchte darin unter anderem ein Branchenbuch integrieren.
Da ich kein für mich passendes, fertiges Script finden konnte, habe ich mich entschlossen, die ganze Sache selbst zu schreiben.
Aus diesem Grund bitte ich Euch alle um ein bisschen Unterstützung. Folgende Fragen stellen sich vorerst:
[list=1]
Wie sollte die Tabellenstruktur (MySQL) gestaltet sein?
Welche Sicherheitsaspekte gilt es zu beachten?
[/list=1]
Vielen Dank schon mal im Voraus, für Eure Tipps. :)

 
wahsaga
28-06-2006, 16:58 
 
Und zu welchen Antworten auf diese Fragen bist du erst mal selber gekommen?
Wenn du welche lieferst, kann man diese ggf. diskutieren.
Aber die eigentliche Denkarbeit gleich von vornherein auf andere abschieben zu wollen, finde ich "doof".

 
gruenspan
28-06-2006, 19:01 
 
Natürlich hast Du recht wahsaga. Ich habe mir deshalb mal folgende Liste (sicher noch unvollständig) zusammengestellt:

1. Tabellenstruktur

Tabelle Eintrag:

id | eintragtitel | plz | ort | beschreibung | status (on/off)

Tabelle Benutzer:

id | benutzer | passwort


2. Sicherheit
[list=a]
HTML- und PHP-Tags ausschließen (strip_tags)
Benutzereingaben auf Ihre Länge überprüfen (substr)
Sonderzeichen entfernen (mysql_escape_string)
Passwörter verschlüsselt in der Datenbank eintragen (md5)
mySQL-Injection
Benutzerregistrierung mit Email-Bestätigung
[/list=a]

 
TobiaZ
28-06-2006, 21:38 
 
Sonderzeichen entfernen (mysql_escape_string) erklär' mal. oder sollte ich sagen "erklaer' mal" :D

 
gruenspan
28-06-2006, 22:35 
 
Ich meinte 'maskieren'. Zur Benutzung in mysql_query.
aus...
erklär' mal.
wird...
erklär\\' mal.

 
gruenspan
30-06-2006, 18:17 
 
Im Zuge meiner Arbeit bin ich unweigerlich über reguläre Ausdrücke gestolpert. Das Formular zum eintragen ins Branchenbuch soll natürlich überprüft werden. Ich hab mich eingearbeitet und unter anderem folgende Links zu Rate gezogen:

php-resource.de/tutorials (http://www.php-resource.de/tutorials/read/10/1/)
http://www.php-resource.de/forum/ (http://www.php-resource.de/forum/showthread.php?s=&threadid=63083&highlight=pregmatch+www)

Überprüfen möchte ich die eingegebene URL. Ich hab mich dabei an den Vorschlag von Benny-one gehalten und diesen noch etwas erweitert, um z.B. www.-domain.de zu vermeiden.

$string = "http://www.meinedomain.org";
$pattern = "/^(http:\/\/www|http:\/\/)\.[^-][a-z0-9-]+\.(de|com|org|net|gov|eu|info|tv|it|at|hu|ch)$/i";

if(preg_match($pattern,$string)){
echo $string." <b>TRUE</b>";
}else{ echo $string." <b>FALSE</b>";}

Meine Tests verliefen bisher alle erfolgreich. Ist das Pattern so korrekt oder enthält es noch Fehler oder Möglichkeiten zur Verbesserung?

PS: Die Liste mit den TLD's ist natürlich nicht vollständig.

 
derHund
30-06-2006, 19:08 
 
Mach lieber eine Anfrage an die jeweilige Seite, ob sie existiert. Das finde ich persönlich besser als die RegExp-Variante. Schreib eben dazu, dass die Seite bei Eintragung existieren muss.

Ich habe mich neulich auch mit gültigen Domain-Namen beschäftigt - offenbar ist ein führender - durchaus erlaubt, obwohl ich das weder glauben noch abschließend klären konnte :dontknow:

Entferne bitte die RefID aus Deiner Signatur.

 
gruenspan
30-06-2006, 19:35 
 
Kannst Du mir einen Tipp geben , wie man das angeht? Hab mir gerade mal gethostbyname() angeschaut. scheint mir aber nicht das richtige zu sein. :dontknow:
Signatur ist jetzt korrekt.

 
jmc
30-06-2006, 19:59 
 
fsockopen (http://ch2.php.net/fsockopen)

 
derHund
30-06-2006, 20:01 
 
Ich hab das immer mit fsockopen() in Verbindung mit socket_set_timeout() gemacht, schau mal in den User Comments ... vielleicht findest Du gleich was passendes.

Ich glaube, es reicht, dort auf 200 oder nicht zu prüfen :dontknow:

 
gruenspan
30-06-2006, 21:29 
 
Vielen Dank derHund. Ist es ausreichend nur mit folgendem Script zu prüfen?

$web = "www.meinedomain.de";
$fp = @fsockopen($web,80);
if(!$fp){
tu dies;
}else
{
tu das;
}

Ich habe so bereits einige Domains erfolgreich getestet, oder muß man socket_set_timeout() zusätzlich verwenden?

 
derHund
01-07-2006, 10:08 
 
Ich hatte es irgendwann mal zusätzlich eingebaut, um zu verhindern, dass ... ich denke mal, die Überprüfung zu lange dauert - ich weiß es aber nicht mehr :( Daher weiß ich auch nicht, ob das Nonsense oder notwendig war ...

 
gruenspan
02-07-2006, 19:57 
 
Ich hab jetzt meine Datenbankstruktur folgendermaßen überarbeitet:

Tabelle Eintrag:
id | eintrag | autoren_id
------------------------------

Tabelle Autor:
id | name
------------

Tabelle Daten:
id | daten | autoren_id
----------------------------

Tabelle Kategorien:
id | name
------------

Tabelle Lookup:
eintrag_id | kategorie_id
-------------------------------

In der Tabelle Eintrag befindet sich - ganz klar - der Eintrag ins Branchenbuch. Die ist über autoren_id mit der Tabelle Autor verknüpft. Ebenso die Tabelle Daten für die daten des Autors (email, plz ect.)
Ausserdem verknüpft die Tabelle lookup die beiden Tabellen Kategorien und Eintrag miteinander.

Unterstützung und Hilfestellung hab ich mir übrigens aus dem Buch PHP und MySQL von Kevin Yank geholt, (hatte es schon ne weile im Regal rumstehen) und natürlich hier im Forum. :D

 
TobiaZ
02-07-2006, 20:22 
 
Warums sind eigentlich im Moment alle an einem Branchenbuch dran?

Wenn pro Eintrag nur ein Autor vorhanden ist, kannst du die Tabellen Autor und Daten zusammenlegen.

 
gruenspan
02-07-2006, 21:25 
 
Original geschrieben von TobiaZ
Warums sind eigentlich im Moment alle an einem Branchenbuch dran?
Ist das so? Ich kenn keinen! :D


Wenn pro Eintrag nur ein Autor vorhanden ist, kannst du die Tabellen Autor und Daten zusammenlegen.
Ich dachte mir, das ein Autor auch mehrere Einträge schreiben kann. Zum Beispiel der Friseur, der im anderen Stadtteil eine Filiale eröffnet hat.

 
TobiaZ
02-07-2006, 21:44 
 
Ich kenn keinen! Such ma. ;)

Ich dachte mir, das ein Autor auch mehrere Einträge schreiben kann. Zum Beispiel der Friseur, der im anderen Stadtteil eine Filiale eröffnet hat. Klar, ich sagte Pro Eintrag ein Autor, nicht pro Autor ein Eintrag.

 
gruenspan
02-07-2006, 21:48 
 
1:1 ,1:n ,n:1 ,n:m :goth:
Bin schon ganz Gagga. Hast natürlich recht. Werd ich die Tabellen ma schnell zusammenlegen.

 
gruenspan
08-07-2006, 16:17 
 
Mir stehe momentan vor folgendem Problem:

Der Eintrag ins Branchenbuch, soll natürlich nur registrierten Benutzern gestattet sein und erst durch mich als Admin freigeschaltet werden können.
Wenn der Benutzer jetzt einen Beitrag schreibt und einträgt, stellt sich mir die Frage, wie dieser eingetragen werden soll.

Die erste Möglichkeit wäre, den Eintrag direkt in die Tabelle Eintrag zu schreiben, mit der dazugehörigen autoren_id und gleichzeitig eine neue Zeile in die Tabelle Lookup einzufügen die den Eintrag mit der Kategorie verknüpft.

Ich möchte aber nicht, das andere Benutzer in meiner Tabelle Lookup Einträge machen können. Was ist zum Beispiel, wenn der Benutzer die falsche Kategorie gewählt hat. Zwar ist dann der Beitrag noch nicht freigeschaltet, ich muß dann aber die richtige Kategorie von Hand zuordnen und hab noch zusätzlich eine Datenleiche in der Tabelle Lookup, die ich löschen muß.

Die Zweite Möglichkeit wäre, das nur der Beitrag mit der dazugehörigen autoren_id eingetragen wird. Zusätzlich würde ich eine Spalte in die Tabelle eintrag einfügen (Wunschkategorie). So könnte ich später von Hand den Eintrag freischalten und entsprechen der gewünschten Kategorie zuordnen.

Wie würdet Ihr vorgehen?

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:03 Uhr.