Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

MySQL-Tabelle auslesen

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 00:53

Hey Leutz,

ich habe in meiner PHP Datei folgende Zeile:

echo "<td>". $zeile['Bildurl'] . "</td>";

Meine PHP-Datei, greift auf eine MySQL-DB zu, in der Datensätze gespeichert sind. Je Datensatz ist eine Bild-URL hinterlegt. Mein Problem ist, dass mir bei der Ausgabe nicht das gewünschte Bild angezeigt wird. Es erscheint immer nur der Pfad zum Bild. Selbiges Problem habe ich bei den Links, die in meiner Tabelle gespeichert sind. Also kein Blauer Text mit aktivem Link, sondern nur der Pfad. Dann habe noch das Problem, dass alle Umlaute in komische Zeichen angezeigt werden. Z. B. für ö = ö. UTF8 ist das bestimmt nicht. Als Zeichencodierung habe ich bei meiner MySQL-DB Latin 1 general gewählt.

Wie ihr sehen könnt, bin ich ein absoluter Anfänger in Sachen PHP und MySQL. Ich habe 4 qualvolle Tage und Nächte gebraucht, damit wenigstens eine Verbindung (per PHP) zur MySQL-DB aufgebaut werden kann. Ich B I T T E um Eure Hilfe. Wenn mehr Input zum Thread benötigt wird, dann lasst es mich wissen. Ich bin langsam am verrecken. :bad-words:


VERY BBIIGG THX an alle, die mir helfen können!

Anzeige von ABAKUS

von Anzeige von ABAKUS »


Hochwertiger Linkaufbau bei ABAKUS:
  • Google-konformer Linkaufbau
  • nachhaltiges Ranking
  • Linkbuilding Angebote zu fairen Preisen
  • internationale Backlinks
Wir bieten Beratung und Umsetzung.
Jetzt anfragen: 0511 / 300325-0

e-fee
PostRank 10
PostRank 10
Beiträge: 3893
Registriert: 08.05.2007, 12:53

Beitrag von e-fee » 20.01.2010, 01:18

Und auch Anfänger in HTML? Sonst müsste Dir doch beim Blick in den Quelltext aufgefallen sein, dass was was fehlt:

Code: Alles auswählen

echo "<td><img src=\"". $zeile&#91;'Bildurl'&#93; . "\" alt=\"Hier rein, was auf dem Bild zu sehen ist, das schreibst Du am besten gleich mit in die DB\" /></td>"; 

Code: Alles auswählen

echo "<td><a href=\"". $zeile&#91;'url'&#93; . "\">Linktext</a></td>"; 
Bezüglich UTF8 oder sonstiger gewünschter Zeichencodierung, das am besten im Header des Browsers mit angeben. Sonst nimmt der Browser des Nutzers u.U. einfach seine Voreinstellung / die des Nutzers.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.01.2010, 10:08

ben78 hat geschrieben:Dann habe noch das Problem, dass alle Umlaute in komische Zeichen angezeigt werden. Z. B. für ö = ö. UTF8 ist das bestimmt nicht.
Doch, das ist utf-8. Du musst dem Browser allerdings sagen, dass er die ankommenden Bytes als utf-8 dekodieren soll und nicht als iso-8859-1 o.ä. Das lässt sich aus den Bytewerten alleine nicht zweifelsfrei erkennen, die gehen immer von 0 bis 255.

Gleiches gilt für die Datenbank bzw. den Weg zwischen Skript und Datenbank:
Als Zeichencodierung habe ich bei meiner MySQL-DB Latin 1 general gewählt.
Dazu fehlt noch die Kodierung bei der Eingabe, bei der Übermittlung in die Datenbank, bei der Übermittlung aus der Datenbank und bei der Ausgabe. Die Kodierung in der Datenbank selbst ist, was deinen Unfall angeht, die unwichtigste, sie besagt lediglich, was in die Datenbank passt (in einer Latin-1-Spalte kannst du, wie der Name schon sagt, nur lateinische Buchstaben und etwas Drumherum speichern, kein Kyrillisch, Hebräisch, Arabisch, Chinesisch, nicht einmal alle polnischen Zeichen) und wie es sortiert wird (nach Buchstabe aäbc, nicht nach Bytewert abcä).

Die Kodierung der Verbindung zur Datenbank setzt du mit mysql_set_charset(), die Kodierung der HTML-Seite mit header("Content-Type: text/html; charset=xyz") (xyz wird bei dir entweder windows-1252 oder utf-8 sein müssen).
Das solltest du unbedingt durchgängig, Eingabe, Verarbeitung, Ausgabe, mit derselben Kodierung fahren. Machst du das nicht, kommt es zu besagtem Problem.

Möglicherweise stehen die Daten jetzt auch bereits kaputtkodiert in der Datenbank. Setze erstmal durchgängig dieselbe Kodierung ein, dann kann man weiterschauen.

Davon unabhängig:
echo "<td>". $zeile['Bildurl'] . "</td>";
Das möchtest du in Zukunft lieber so schreiben: echo "<td>". htmlspecialchars($zeile['Bildurl']) . "</td>"; und damit verhindern, dass dir HTML-Code in der Variablen die Seite zerschießt (es sei denn, du willst explizit HTML zulassen). Bei Daten, die du selbst eingetragen hast, ist das sicherlich keine große Gefahr, aber wenn die Daten von draußen kommen, kann dir ein pöser Pube beliebigen Code unterjubeln, einschließlich Verweisen zu manipulierten Grafiken oder Javascript, und -schwupps- wird deine Seite zur Virenschleuder.
In der anderen Richtung, in die Datenbank rein, möchtest du aus ähnlichem Grund alle Daten mit mysql_real_escape_string() entschärfen.

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 14:12

Also das Problem konnte ich jetzt lösen.

HTML beherrsche ich einwandfrei. Ich habe nur nicht gewusst, dass ich mit HTML die Bilder etc. auslesen lassen kann, da es sich ja bei meinem Anliegen um ein PHP-Script handelt.

Vielen Dank Leute, ich habe dazu gelernt.

e-fee
PostRank 10
PostRank 10
Beiträge: 3893
Registriert: 08.05.2007, 12:53

Beitrag von e-fee » 20.01.2010, 15:06

PHP hat eben das HTML-Markup noch nicht mit an Bord. Aber in solchen Fällen hilft wirklich ein Blick in den Quelltext der angezeigten Seite, um zu sehen: Oha, da ist ja gar kein img-Tag, sondern nur die Bild-URL.
Und Du liest ja nicht mit HTML die Bilder aus, sondern tust es nach wie vor mit PHP. Nur fügst du nun in den ausgegebenen String noch das notwendige HTML-Markup mit ein.

Ansonsten sind die Sachen, die Mork noch zusätzlich erwähnt hat, auch durchaus beachtenswert.

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 19:33

Jetzt hab ich's.

Ganz einfach...ich trottel...Spaaaaaaaaaaß.

Also PHP ist eine Serverseitige Sprache, die vom Server in HTML an die Browser ausgeben wird....Genau in diesem Punkt, hat mir die Logik gefehlt. Liegt wohl daran, dass es mein erstes Mal mit PHP ist.

Vielen Dank Leutz!!! :wink:

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 20:25

@ Mork vom Ork

Vielen Dank...zwecks Security...

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 20.01.2010, 20:30

ben78 hat geschrieben:Also PHP ist eine Serverseitige Sprache, die vom Server in HTML an die Browser ausgeben wird.
Fast. Ein PHP-Skript ist ein Programm, das vom Webserver ausgeführt und dessen Ausgabe durch den Webserver hindurch an den Browser gesendet wird.

Soll bedeuten: Du kannst per PHP auch Bilder oder sonst irgendwelche Datenmassen an den Browser ausgeben. Es muss nicht HTML sein und der Browser sagt sich auch nicht &#8222;Aha, PHP-Skript, dass muss ich als HTML einlesen, was da kommt&#8220;. Was der Browser mit den empfangenen Daten macht, hängt davon ab, was im Kopf der Serverantwort steht, dort gibt es ein Feld namens Content-Type. Aber das ist ein Thema für Fortgeschrittene :)

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 20:51

Aus welchem Grund macht man das so?

Anonymous

Beitrag von Anonymous » 20.01.2010, 22:04

ben78 hat geschrieben:Aus welchem Grund macht man das so?
weil ein PHP Script natürlich auch eine Grafik erstellen und ausgeben könnte... oder ein PDF... oder.... oder..... und so muss dem browser eben mitgeteilt werden um welche Art Content es sich handelt.... und wenn im script nix definiert wird, geht der Webserver eben davon aus das es HTML ist und sendet das dann mit...

achja... so manch eingefleischter Coder springt dir direkt an die Gurgel wenn man ein PHP-Script als Programm bezeichnet.... :roll:

e-fee
PostRank 10
PostRank 10
Beiträge: 3893
Registriert: 08.05.2007, 12:53

Beitrag von e-fee » 20.01.2010, 22:13

net(t)worker hat geschrieben: achja... so manch eingefleischter Coder springt dir direkt an die Gurgel wenn man ein PHP-Script als Programm bezeichnet.... :roll:
Och Nettie ... gerade gestern bin ich mal wieder auf einer Seite gewesen, wo "XHTML- und CSS-Programmierung" angeboten wurde. :roll:

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 20.01.2010, 22:52

mysql_real_escape_string()
Ich habe mich mal etwas rumgegoogelt, aber nicht erwünschtes Ergebnis gefunden.

Meine Frage - für Euch vielleicht blöde Frage - lautet, ob der zitierte Code nur Sinnvoll ist, wenn man eine Seite hat wo sich User einloggen bzw. registrieren können.

Oder ist er in Sachen Sicherheit für jede Seite gedacht, die mit MySQL in Verbindung steht.

MORK VOM ORK schreibt:
In der anderen Richtung, in die Datenbank rein, möchtest du aus ähnlichem Grund alle Daten mit mysql_real_escape_string() entschärfen.
Ich stelle vielleicht blöde Fragen, hat aber damit zu tun, dass ich mir nicht sicher bin.

Mork vom Ork
PostRank 9
PostRank 9
Beiträge: 2557
Registriert: 08.07.2008, 11:07
Wohnort: Aufm Friedhof.

Beitrag von Mork vom Ork » 21.01.2010, 10:29

ben78 hat geschrieben:
mysql_real_escape_string()
Meine Frage - für Euch vielleicht blöde Frage - lautet, ob der zitierte Code nur Sinnvoll ist, wenn man eine Seite hat wo sich User einloggen bzw. registrieren können.

Oder ist er in Sachen Sicherheit für jede Seite gedacht, die mit MySQL in Verbindung steht.
Letztenendes kommt es nicht darauf an, wo die Daten herkommen, sondern um was für Daten es sich handelt.

Um das Problem mal etwas zu verdeutlichen, stell' dir vor, du hast folgenden PHP/SQL-Befehl:
"select irgendwas from tabelle where benutzer='" . $benutzer . "'"

Unter den gewünschten Umständen, Benutzername anton, käme da dieses raus:
select irgendwas from tabelle where benutzer='anton'
Funktioniert.

Unter dummen Umständen, Benutzername anton 'der barbar' wutz, sowas:
select irgendwas from tabelle where benutzer='anton 'der barbar' wutz'
Das haut dir MySQL um die Ohren, weil die einfachen Anführungszeichen im Namen mit jenen im SQL-Befehl kollidieren. (Mit doppelten Anführungszeichen im SQL-Befehl wäre es wohlgemerkt das gleiche Problem, nur, dass der Benutzername dann für die Kollision halt doppelte Anführungszeichen enthalten muss.)

Unter unerwünschten Umständen, ein pöser Pube, der ' or ''=' eingetippt hat, sowas:
select irgendwas from tabelle where benutzer='' or ''=''
Die Bedingung ''='' ist immer wahr, damit wird auf jeden Fall irgendein Benutzer aus der Datenbank ausgelesen. Das bedeutet, jede sonstige Bedingung und jede andere Zugriffsbeschränkung, die mit ihr erreicht werden soll, wird ausgehebelt.
Sowas nennt sich "SQL injection" und IIRC ist gerade letzte Woche wieder einmal irgendso ein Kinderportal auf diese Weise ausgehebelt worden und zigtausende Datensätze sind, ähm, auf Wanderschaft gegangen.

Kurzum: Schon aus Grund 2 möchtest du mysql_real_escape_string() (und htmlspecialchars()) immer verwenden, wenn du dir nicht hundertprozentig sicher bist, dass du keine variable Zeichenkette (htmlspecialchars(): keine Zeichenkette mit <, > oder ") übergibst, egal, ob die Daten von dir oder von der Außenwelt eingegeben wurden.
Hunderprozentig sicher kannst du dir nur sein, wenn du zum Beispiel sowas hast:

$datum = date("Ymd", $zeitstempel);
$r = mysql_query("select dings from bumms where datum=" . $datum);

$datum ist zwar eine Zeichenkette, aber da kann nichts anderes drinstehen als Zahlen, weil ihr Inhalt aus date() stammt und dem Muster Ymd (JahrMonatTag) folgt.

Grundsätzlich gilt, besser ein mysql_real_escape_string() / htmlspecialchars() zu viel als zu wenig.

Falls dir die mysql_real_escape_string()erei zu viel ist, benutze dieses statt mysql_query():

Code: Alles auswählen

function q&#40;&#41; &#123; // Aufruf als q&#40;"sql-befehl", daten, daten, daten, ...&#41;;
    $d = func_get_args&#40;&#41;; // Argumente dieser Funktion in Feld $d schreiben
    $sql = array_shift&#40;$d&#41;; // Erstes Argument ist der SQL-Befehl
    while &#40;list&#40;$i, $v&#41; = each&#40;$d&#41;&#41; &#123; // alle weiteren sind Werte für den Befehl
        if &#40;$v !== null&#41; &#123; // alles, was nicht null ist, absichern
            $d&#91;$i&#93; = '"' . mysql_real_escape_string&#40;$v&#41; . '"';
        &#125;
        else &#123; // Wert null als null ausschreiben, ohne Anführungszeichen
            $d&#91;$i&#93; = "null";
        &#125;
    &#125;
    return mysql_query&#40;vsprintf&#40;$sql, $d&#41;&#41;;
&#125;
Statt

Code: Alles auswählen

mysql_query&#40;'bla="' . mysql_real_escape string&#40;$a&#41; . '", fasel = "' . mysql_real_escape string&#40;$b&#41; . '"'&#41;
kannst du dann

Code: Alles auswählen

q&#40;"bla=%s, fasel=%s", $a, $b&#41;
schreiben.

ben78
PostRank 4
PostRank 4
Beiträge: 153
Registriert: 30.03.2007, 17:15

Beitrag von ben78 » 23.01.2010, 14:35

@ MORK VOM ORK

Your the Greatest...Very BIG THX!!! :wink:

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag