Flashhilfe.de - Flash Community

Professionelle und rationellste art der Datenspeicherung/Datenauslesung

 


AntwortenRegistrieren Seite1 2  

Enigma_X#1
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

21.06.2010, 23:18

jemand im php forum meinte zu mir das ich http_build_query benutzen soll und vorher die daten wenn ich sie reinschreibe ins mysql nicht vorher umcodieren oder verändern soll...

nun habe ich das problem das http_build_query ja & zeichen mit hinzufügt...

Ich habe folgende scripte die auch funktionieren... was mache ich denn nun mit denen, laut vielen leuten ist mein script schlecht und unsicher, das mit dme unsicher weiss ich da ich erst am mittwoch das thema sicherheit bei meinem datenbanken lehrer habe und danach werde ichs chon mysql_real_escape_string verwenden, jedoch will ich wissen was ichd a tuhe deswegen ist das erstmal irrelevant solange e skeine projekte für andere außer mich sind....

Hier erstmal meine 2 scripte...

1. Speichern.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

$sending 
$_POST['sending'];

if (
$sending == "Yes") {

include 
"dbconnect.php";


$uname      $_POST['uname'];
$ename      $_POST['ename'];
$thedate $_POST['thedate'];
$thetext $_POST['thetext'];


$arr = array("+" => "%2B","%" => "%25","<" => "%26lt;",">" => "%3e","&" => "%26""\'" => "%27"";" => "%3b""," => "%2c""\"" => "%22""\\\"" => "%22");
$thetext strtr($thetext,$arr);

$thetext utf8_decode($thetext);



$sql="INSERT INTO events (ID ,ename ,uname ,thedate , thetext)
VALUES (NULL , '$ename', '$uname', '$thedate', '$thetext');"
;



if (
mysql_query($sql))
     echo 
"&imsg=SUCCESS";
else echo 
"&imsg=ERROR: $sql";

}

?>


2. Laden.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

include "dbconnect.php";

echo 
"&finished=no";


$sql=" SELECT * FROM events ORDER BY `ID` ASC";

$i=0;

$result mysql_query($sql);
$maxi mysql_num_rows($result);

echo 
"$maxi Rows";

$content="&maxi=$maxi";

$ergebnis mysql_query($sql);
while (
$zeile mysql_fetch_assoc($ergebnis))
{
   
$i++;
   
$content="".$content."&SQLID$i=".$zeile['ID']."&&date$i=".$zeile['thedate']."&&uname$i=".$zeile['uname']."&&ename$i=".$zeile['ename']."&&text$i=".$zeile['thetext']."&&people$i=".$zeile['people']."&";

}

echo 
utf8_encode("$content&finished=yes&");

?>


jetzt meinte man zu mir das ich die zeichen nicht selbst übersetzten soll... und wenn ich

html_entities oder http_build_query benutze dann funktionieren meine flashseiten nicht..

Soll ich meine alten scripte einfach mit mysql_real_escape_string versehen und gut ist, denn mit den eselsbrücken klappt ja alles...

Wie macht ihr das ? Gibt es eine bekannte vorgehensweise für flash anwendungen im web die mit php und mysql arbeiten, oder habt ihr das ähnlich wie ich gemacht...

evtl geht es ja noch einfacher als ich denke... ich weiss nicht, mich haben einfach viele dige sehr verunsichert und ich würde gerne eure meinung dazu hören, es hat sich ja schließlich nach 6 jahren ein maaß an vertrauen hier aufgebaut, und eure meinung währe mir wichtig...
mhm in entwiklung
Werbung
Beiträge: 0
Registriert: Feb 2016


jomac#2
Benutzerbild von jomac
Beiträge: 89
Wohnort: CH
Registriert: Jun 2010

22.06.2010, 18:43

mysql_real_escape_string solltest du sicher benutzen, denn das stellt eine ziemlich happige Sicherheitslücke dar. Damit kann man auch beliebig Tabellen erstellen, verändern etc. siehe SQL_injection Dazu solltest du ausserdem einfach ' benutzen.

"jedoch will ich wissen, was ich da tuhe" <-- Was meinst du damit? Eine bessere Duku als die von PHP gibts kaum... mysql_real_escape_string

Du solltest wenn möglich nicht erst in PHP die Zeichen konvertieren, sondern bereits im Formular den richtigen Zeichensatz verwenden (Entlastung des Servers).

http_build_query funktioniert genauso, wie wenn du alle Teile des Arrays aneinanderreihst, wenn das nicht dasselbe ist, wie wenn du es von Hand machst, dann Vergleiche die Ausgaben var_dump. Damit wird es übersichtlicher und du brauchst weniger Zeichen und, da es nativ ist mag es möglicherweise ein kleines bisschen weniger Aufwändig sein.

"Gibt es eine bekannte Vorgehensweise für Flash" -> Da kapiere ich auch nicht, was du meinst. Ausser die Ein- und Ausgabe hat PHP und Flash nichts miteinander zu tun.

Wenn du noch andere Fragen hast, dann formuliere deine Frage bitte noch einmal etwas genauer.
springer#3
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

22.06.2010, 21:04

Hi,
zu deiner Frage "Professionelle und rationellste art der Datenspeicherung/Datenauslesung":
für PHP gibts auch gute ORM systeme wie zb. Doctrine oder Propel welche beide mit code-generatoren ausgestattet sind und dir gerade was auch datenvalidierung angeht sehr viel arbeit abnehmen....

du kannst dir auch gleich die datenbank generieren lassen, oder du kannst dir die benötigten php-klassen auch anhand einer bestehenden datenbank erstellen lassen... ist wirklich sehr durchdacht und effizient. braucht allerdings etwas einlesearbeit und ist für kleine sachen auch etwas oversized...
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Enigma_X#4
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

22.06.2010, 22:59

Cool danke, ich schreib mir das mal auf und befrage morgen mal meinen datenbanken lehrer dazu!

merci springer !

p.s. i love ur avatar
mhm in entwiklung
Werbung
Beiträge: 0
Registriert: Feb 2016


Enigma_X#5
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

23.06.2010, 14:12

na super, haben heute nur eine olap db gemacht, und sicherheit damit nur angefangen...

also ich habe keine lust wieder eine woche auf das komplette thema sicherheit zu warten..

wird mysql_real_escape_string  so benutzt ?

PHP:
1
2
3
4
5
6
$string = mysql_real_escape_string($string)

$sql=" INSERT INTO tabelle (name) VALUES ('$string');";

dann query ect...
mhm in entwiklung
Geändert von Enigma_X am 23.06.10 um 14:15 Uhr
jomac#6
Benutzerbild von jomac
Beiträge: 89
Wohnort: CH
Registriert: Jun 2010

23.06.2010, 14:17

Ja, genau, auch wenn "INSERT INTO tabelle (name) VALUES ('" . $string . "');"; schöner wäre :p, aber darüber wird ja anderswo schon genügend gestritten ;)
Enigma_X#7
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

23.06.2010, 16:02

Super !, mein lehrer meitne heute folgendes:


"Die leute meinen das mit mysql_real_escape_string die Injection schon vergebeugt währe, aber es gibt mehr als nur diesen weg code einzuschleusen..."


Gibt es wirklich eine andere methode code einzuschleusen ?? ich glaube er wollte darauf hinaus dasn man was an der DB einstellen muss... das glaube ich weil ich him seit wochen mit dem thema sicherheit auf die nerven gehe (da ich im i-net sofort zugeflamed werde sobald ich einen php code samt sql inhalt poste), darauf sagte er mir mal


"man kann einstellen das nur eine bestimmte php auf eine bestimmte stelle in der DB mit bestimmten rechten zugreifen kann...."

Was denkt ihr ?

Und ne andere frage nun, es heißt immer "den string IMMER so eintragne wie er ankommt", beim ausgeben für flash, muss ich da var_dump(); benutzen oder url_encode(); ? mein lehrer meinte das bei var_dump die & zeichen wie beim escapen für mysql einfach als zeichen und als irrelevanter inhalt für die sprache gesehen werden, solange sie zum inhalt des stringes gehören.."

worauf muss man da denn achten, ich muss nämlich meine liste der einträge schon in php komplett erstellen dann erst kann ichs ausgeben da ich in flash direkt die ganze liste ausgeben will...
mhm in entwiklung
jomac#8
Benutzerbild von jomac
Beiträge: 89
Wohnort: CH
Registriert: Jun 2010

23.06.2010, 16:20

Wie eine SQL-injection mit einem richtig angewendeten mysql_real_escape_string immer noch möglich ist möchte ich gerne wissen, wenn das möglich ist. Damit meine ich bei der aktuellen Version bei den alten sind Bugs bekannt, z.B. SQL-injection
Zugriffsrechte auf PHP-Dateien beschränken hört sich nach ziemlichem Unsinn an, aber ich muss zugeben ich wusste nicht, dass das möglich ist, wenn es das ist und ich kann mir nicht ganz vorstellen, wie die Rechte da verteilt werden sollen (bei include u.ä. etc.). Nur Zugriff auf bestimmte Teile ist natürlich sinnvoll, aber über die Datei?!...

Wie willst du etwas an Flash übergeben? Denn wie gesagt es sollte eigentlich keine Rolle spielen, ob du es an Flash, an den Browser oder was weiss ich was übergibst. var_dump ist eigentlich für das Debuggen und nicht für die Textausgabe gedacht und was hat var_dump mit url_encode zu tun?
Was willst du genau übertragen, von wo, wohin, in welcher Form?
Enigma_X#9
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

23.06.2010, 16:37

von sql, über php, nach flash..

wenn du dir meinen code oben anschaust.. genau diesen teil:

PHP:
1
2
3
4
5
6
7
$i++;
    $content="".$content."&SQLID$i=".$zeile['ID']."&&date$i=".$zeile['thedate']."&&uname$i=".$zeile['uname']."&&ename$i=".$zeile['ename']."&&text$i=".$zeile['thetext']."&&people$i=".$zeile['people']."&";

}

echo ("$content&finished=yes&");


dann siehst du das ich erst nach dem gesammten fetch_assoc, den fertigen kompletten inhalt schicke...

ich arbeite via dublicatemovieclip und die inhalte müssen ja in einen array, dachte das es so schon optimal ist, ich muss an dieser stelle sagen das es auch funktioniert...

Jedoch sagt man mir das es eine "professionellere" methode gibt was diesebesagte methode anders oder besser macht ist mir leide rnoch nicht klar...

wie würdest du denn wenn du in flahs eine liste aus movieclips machst, vorgehen ? so wie ich oder ganz anders ?
mhm in entwiklung
Geändert von Enigma_X am 23.06.10 um 16:50 Uhr
springer#10
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

23.06.2010, 16:54

ich würde dafür amf verwenden, da kannst du auch komplexe datentypen hin- und herschicken... du kannst dann zb. direkt das result einer query zurückgeben und in flash hast du direkt ein array wenn du mit netconnection arbeitest, oder direkt eine ArrayCollection wenn du mit flex und remoteObject arbeitest....
du brauchst dann nicht mühselig irgendwelche strings zusammenzusetzen und diese in flash wieder zu splitten... zudem überträgt amf die daten binär und spart dadurch auch noch traffic bzw. ist schneller ....

AMF kann man sich hier downloaden
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Enigma_X#11
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

23.06.2010, 17:04

hmm sieht interessant aus springer, ich würde aber schon lieber alles so unabhängig und portabel wie möglich halten...

ist denn etwas generell falsch an meiner corgehensweise ?


*Edit* AMF währe doch ne gute einsetzmöglichkeite für browsergames oder ?? vor allem wenn sie sehr shcnell reagieren sollen usw ?
mhm in entwiklung
Geändert von Enigma_X am 23.06.10 um 17:05 Uhr
springer#12
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

23.06.2010, 18:21

ich würde aber schon lieber alles so unabhängig und portabel wie möglich halten
hmm, das hat aber nix damit zu tun ob du nun amf verwendest oder nicht...
wenn du zb. für ein newssystem noch mit einem zusammengesetzten string arbeitest, machst du dir doch nur selbst das leben schwer... zb( &header0=headline 1&content0=das ist der inhalt&header1=headline 2&content1=das ist der inhalt 2&.........). das result von der query musst du dann ja in einer for schleife durchlaufen... ansonsten kannst du einfach:
PHP:
1
2
3
4
$query = "SELECT * FROM news ORDER BY date asc";
$result = mysql_query( $query );
return $result;

zudem kriegst du in flash direkt ein array:
ActionScript:
1
2
3
4
5
function newsResult( news:Array ):void{
      for( var i:uint = 0; i < news.length; i++){
           // clips erstellen oder so...
    }
}


unabhängig bist du damit bestimmt, und portabel ist es auch noch ;-) zb kannst du ein newssystem auch für mehrere kunden nutzen ohne irgendwas zu ergänzen. du packst einfach die NewsService.php ins services-verzeichnis und fertig... :-)
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Enigma_X#13
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

23.06.2010, 18:50

hmm..

irgendwie gibt es auf der seite keine vernünftige doku, bzw die wiki ist irgendwie nicht zu erreichen...

Was ist denn nun mit deinem mysql, wie funktioniert das dnen ohne mysql_fetch_assoc ?

also alles was der aus der news tabelle bekommt, schickt er direkt an flash als $result, dort ist eine funktion, mit dem namen newsResult das mit einem array arbeitet mit dem namen news in der besagten funktion befindet sich eine for schleife, sie solange läuft solange i < als der news array ist...

was würde ich dann in die for schleife als variablen benutzen ? die spaltennamen von mysql ?

z.b.
clipid[i] = ID
clipname[i] = newsname


wenn die spalten z.b. ID und newsname währen..
mhm in entwiklung
springer#14
Benutzerbild von springer
Beiträge: 4909
Wohnort: zuhaus
Registriert: Apr 2004

23.06.2010, 19:33

deine tabelle sieht zb so aus:

id    header    content    date

in der for schleife kannst du dann so drauf zugreifen:
ActionScript:
1
2
3
4
5
6
function newsResult( news:Array ):void{
        for( var i:uint = 0; i < news.length; i++){
            var newsItem:Object = news[ i ];
            trace( newsItem.content, newsItem.header ) // gibt inhalt und header für jedes item aus
    }
}


korrekterweise würde man das ganze aber auf klassen mappen...
der PHP-Service:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class NewsService{
     public function getNews(){
         $query = "SELECT * FROM news ORDER BY date asc";
         $result = mysql_query( $query );
         $news = array();
         
         while( $row = mysql_fetch_array( $result ) ){
               $newsItem = new NewsItem( $row );
               array_push( $news, $newsItem );
         }
         return $news;
    }
}


die PHP-NewsItem-Klasse
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class NewsItem{
      $id;
      $header;
      $content;
      $date;

      public function NewsItem( $data ){
        $this->id = $data[ 'id' ];
        $this->header = $data[ 'header' ];
        $this->content = $data[ 'content' ];
        $this->date = $data[ 'date' ];
      }
}


dann die entsprechende ActionScript-Klasse:

ActionScript:
1
2
3
4
5
6
7
8
9
package{
        [RemoteClass(alias="NewsItem")]
        public class NewsItem{
              public var id:uint;
              public var header:String;
              public var content:String;
              public var date:String;
        }
}


die for-schleife wäre dann so:

ActionScript:
1
2
3
4
5
6
function newsResult( news:Array ):void{
        for( var i:uint = 0; i < news.length; i++){
            var newsItem:NewsItem = news[ i ] as NewsItem;
            trace( newsItem.content, newsItem.header ) // gibt inhalt und header für jedes item aus
    }
}


ist jetzt einfach so hingeschrieben. ungetestet und ohne gewähr... ;-)

hier gibts auch noch ein AMF-Cookbook, eine schritt-für-schritt-anleitung... unten auf der seite ist auch das pdf mit ausführlichen codes
lieber chips essen und danach voller zweifel sein, als voller zweifel chips essen...
Geändert von springer am 24.06.10 um 07:29 Uhr
jomac#15
Benutzerbild von jomac
Beiträge: 89
Wohnort: CH
Registriert: Jun 2010

23.06.2010, 22:48

An deiner Vorgehensweise ist nichts wirklich falsch (wenn der Inhalt und die Variabeln escaped sind), aber sie ist nicht wirklich übersichtlich und erweiterbar. Du hast verschiedene Möglichkeiten je nach Anforderungen und grösse des Projektes. Ob XML, YAML, JSON oder eine Bytemap (wie Springers Vorschlag und den kannst du auch noch direkt in Flash übernehmen, also sicher seehr vorteilhaft).

Unabhängig von PHP willst du es ja nicht ;) also warum nicht Springers Vorschlag.

PS: 2. Seite nicht gesehen...
Geändert von jomac am 23.06.10 um 22:53 Uhr
Enigma_X#16
Benutzerbild von Enigma_X
Beiträge: 335
Wohnort: niemandsland
Registriert: Apr 2004

Themenautor/in

25.06.2010, 17:38

Okay, ich werde mich mal heute aufm Hintern setzten und mir aller ruhe das AMF anschauen!

Ich finde schon das es echt besser ist.... Stimmt..


Mal eine Frage Springer.... das array übernimmt die id aus der mysql tabelle als zahl oder ?

hmm du hast aber schon uint = 0 gesetzt.. da muss ich mal gleich genauer hinschauen.. evtl fällts mir dann auf obs so ist.. aber sonst sieht es schon relativ nachvollziehbar aus !!


Vielen Dank euch 2, ich lese mir mal alles durch und wenn ich fragen ahben sollte wende ich mich hoffnungsvoll wieder an euch
mhm in entwiklung

AntwortenRegistrieren Seite1 2  

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.

 
Ähnliche Beiträge zum Thema
Partner Webseiten: art-and-law.de  Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   Scubacube.de  
Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2019 Sebastian Wichmann - Flashhilfe.de