Leerzeichen in VAR macht Probleme > Serverbedingt??
Steve
- meinung
Hallo Forumler!
Ich komm´gerade irgendwie nicht weiter, und bräuchte mal Hilfe:
Ich hab eine MySQL-DB am laufen, die mir verschiedene Hits auf der HP zählt. Dazu wird immer bei Klick der Titel der Seite (in $woher)übermittelt. funktioniert auch alles. nun hab ich den Zähler um eine einfache Reloadsperre (via IP) erweitert. nun hab ich mal die logs verfolgt, und festgestellt, daß min. eine IP immer leere/unvollständuge VARs zurück gibt. Komischerweise greift diese IP immer mal wieder in regelmässigen Abständen auf versch. Seiten zu, und es ändern sich immer die letzten 3 Zahlen:
zB:
123.456.789.081
123.456.789.085
123.456.789.082
...
vielleicht ne Suchmaschine oder so?? (Trace bringt USA> Detroit bzw.NewYork)
zum Vergleich:
$woher = "Das ist ein Test"; // wird per Url mitgegeben
$wer = "Steve"; // wird per Url mitgegeben
Index.php macht dann String draus und speichert in MySql:
$Bereich = "[".$woher."][".$wer."]";
Ergebnis in MySQL normalerweise: [Das ist ein Test][Steve]
Ergebnis auf dem anderen Server/IP: [Das][]
1.)kann es sein das manche Server Probleme mit dem Leerzeichen haben? denn alle Zeichen nach dem 1.Leerzeichen werden abgeschnitten!?
2.) kann das ein Robot o.ä. sein, der einfach die VARs ignoriert?
Danke mal für Eure Hilfe!
Grüsse
Steve.
Sorry!
natürlich PHP nicht Meinung >> blödes Scrollrad
Hi,
$woher = "Das ist ein Test"; // wird per Url mitgegeben
$wer = "Steve"; // wird per Url mitgegeben
wie lautet die URL? Der Localpart reicht, diesen nenne aber bitte *exakt*. Wie wurde die URL erzeugt?
Cheatah
dreht sich um ein news-system. Bei aufruf eines artikels wird diese URL weitergegeben:
www.domain.de/article.php?wer=Steve&woher=Katie lebt wieder in der Zivilisation
die article.php macht dann nen string aus $wer und $woher und schreibt in MySql.
Hi,
dreht sich um ein news-system. Bei aufruf eines artikels wird diese URL weitergegeben:
www.domain.de/article.php?wer=Steve&woher=Katie lebt wieder in der Zivilisation
Kodiere die Leerzeichen: %20
Falls das ein HTML-Link werden soll: kodiere die &: &
Woher kommt es eigentlich, daß so viele Leute bei SEDO sind?
cu,
Andreas
Kodiere die Leerzeichen: %20
alos bei klick wandelt der Browser das die [LEER] in %20 (steht zumindest so in der Adressleiste.
Woher kommt es eigentlich, daß so viele Leute bei SEDO sind?
SEDO??
Hi,
Kodiere die Leerzeichen: %20
alos bei klick wandelt der Browser das die [LEER] in %20 (steht zumindest so in der Adressleiste.
was veranlasst Dich zu der Fehlannahme, das Verhalten Deines speziellen Browsers ließe Rückschlüsse auf die Allgemeinheit zu? Illegale URLs sind illegale URLs, und Leerzeichen sind an *keiner* Stelle einer HTTP-URL erlaubt.
Cheatah
was veranlasst Dich zu der Fehlannahme, das Verhalten Deines speziellen Browsers ließe Rückschlüsse auf die Allgemeinheit zu? Illegale URLs sind illegale URLs, und Leerzeichen sind an *keiner* Stelle einer HTTP-URL erlaubt.
Das ist mir klar, wollte auch damit auch nicht sagen, hab eben das nur gesehen das es mit %20 kodiert wird.
wenn ich nun die Daten kodiert weitergebe wird das dann von MySql wieder dekodiert und zählt zu den "alten" Feldern? oder legt mit die DB dann parallel neue Felder an?
Beispiel
ALter Eintrag: [Das ist ein Test][Steve]
Neuer Eintrag: [Das%20ist%20ein%20Test][Steve]
Hi,
wenn ich nun die Daten kodiert weitergebe wird das dann von MySql wieder dekodiert
MySQL erfährt davon nichts. Es ist Aufgabe des HTTP-Systems - also in Deinem Fall (leider[1]) von PHP - die Dekodierung vorzunehmen. Ob die Daten dann anschließend in eine DB gespeichert, nur ausgegeben oder an bedürftige Dritt-Welt-Länder gespendet werden, ist absolut unerheblich.
Cheatah
[1] Aufgrund Deiner augenscheinlichen Unkenntnis einiger Grundlagen ist PHP für Dich nicht geeignet. Siehe Archiv.
MySQL erfährt davon nichts. Es ist Aufgabe des HTTP-Systems - also in Deinem Fall (leider[1]) von PHP - die Dekodierung vorzunehmen. Ob die Daten dann anschließend in eine DB gespeichert, nur ausgegeben oder an bedürftige Dritt-Welt-Länder gespendet werden, ist absolut unerheblich.
Irgendwie verstehst du mich falsch...
was ich wissen wollte ist:
-----------------------------------
$woher = "Das%20ist%20ein%20Test"
$anzahl=mysql_query("SELECT * FROM $tabellehits where bereich='$woher' and monat='$akt_monat' and jahr='$akt_jahr'") or die("SELECT ERROR 30");
if (mysql_num_rows($anzahl)==0){
mysql_query("INSERT INTO $tabellehits SET monat='$akt_monat', jahr='$akt_jahr', bereich='$woher'") or die("INSERT Error 31");
}
else{
mysql_query("UPDATE $tabellehits SET treffer=treffer+1 where monat='$akt_monat' and jahr='$akt_jahr' and bereich='$woher'") or die("INSERT Error 2");
}
-----------------------------------
schreibt PHP jetzt "Das%20ist%20ein%20Test" in das Feld "bereich"
oder schreibt PHP "Das ist ein Test" in das Feld Bereich (bzw. zählt 1 Treffer hoch)?
[1] Aufgrund Deiner augenscheinlichen Unkenntnis einiger Grundlagen ist PHP für Dich nicht geeignet. Siehe Archiv.
Ja, da fehlt mir noch sehr viel, deshalb frage ich ja... schade nur, dass etwas deshalb gleich ungeeignet ist...
Grüsse
Steve.
Ich glaube er updatet Dein Feld weil dein php Code bekommt von dem ganzen %20 gerabbel nichts mit ... aber wenn Du schon Leerzeichen haben _musst_ dann übergeb dem Browser wenigstens "ersatzzeichen" ... z.B. "_" und konvertiere dann mittels einer weiteren Funktion immer hin und her ...
Hi,
aber wenn Du schon Leerzeichen haben _musst_ dann übergeb dem Browser wenigstens "ersatzzeichen" ... z.B. "_" und konvertiere dann mittels einer weiteren Funktion immer hin und her ...
JIIIAAAAAARGH!!!1
Es gibt exakt zwei definierte "Ersatzzeichen"[1] für Leerzeichen in URLs, nämlich "%20" und "+".
Cheatah
[1] Man nennt sie "Kodierung".
wenn Du schon Leerzeichen haben _musst_ dann übergeb dem Browser wenigstens "ersatzzeichen" ... z.B. "_" und konvertiere dann mittels einer weiteren Funktion immer hin und her ...
Das hab ich jetzt auch gemacht. Da es ja nur um die Lesbarkeit des Strings geht hab ich die Leerzeichen mit '_' ersetzt, funktioniert auch.
Es war für mich nur nicht ganz klar, wie sich das jetzt genau verhält in Bezug auf PHP <--> MySql (wenn ich ein Bild - indessen Name %20 enthalten ist - aus dem Web speichere, habe ich es ja auch 1:1 auf der Platte (also MIT %20 und nicht mit Leerzeichen).
Danke!
Grüsse Steve.
Hi,
wenn Du schon Leerzeichen haben _musst_ dann übergeb dem Browser wenigstens "ersatzzeichen" ... z.B. "_" und konvertiere dann mittels einer weiteren Funktion immer hin und her ...
Das hab ich jetzt auch gemacht. Da es ja nur um die Lesbarkeit des Strings geht hab ich die Leerzeichen mit '_' ersetzt, funktioniert auch.
och nö! Benutze doch bitte die dafür vorgesehene Kodierung.
wenn ich ein Bild - indessen Name %20 enthalten ist - aus dem Web speichere, habe ich es ja auch 1:1 auf der Platte (also MIT %20 und nicht mit Leerzeichen).
Dieses Verhalten Deines speziellen Browsers ist in Bezug auf Dein Problem zu exakt 100% irrelevant.
Cheatah
Hi,
Irgendwie verstehst du mich falsch...
nein.
$woher = "Das%20ist%20ein%20Test"
Ebenfalls nein.
schreibt PHP jetzt "Das%20ist%20ein%20Test" in das Feld "bereich"
oder schreibt PHP "Das ist ein Test" in das Feld Bereich (bzw. zählt 1 Treffer hoch)?
Bei obiger Initialisierung bleiben die "%", "2" und "0" selbstverständlich vorhanden. Bei
$woher = $_GET['woher']
was Du selbstverständlich tust, da andernfalls Dein Server misskonfiguriert sein müsste, existieren in $woher aber keine solchen Zeichenfolgen. Es sei denn, in der URL stand "Das%2520ist%2520ein%2520Test", versteht sich.
[1] Aufgrund Deiner augenscheinlichen Unkenntnis einiger Grundlagen ist PHP für Dich nicht geeignet. Siehe Archiv.
Ja, da fehlt mir noch sehr viel, deshalb frage ich ja... schade nur, dass etwas deshalb gleich ungeeignet ist...
Wenn Du Dich zum Waffenexperten entwickeln möchtest, aber noch keinerlei Kenntnisse hast, wirst Du gleich mit Panzerfäusten Versuche an Handgranaten durchführen? Ich schätze nicht. Und eine Uzzi solltest Du vorerst ebenfalls nicht in die Hand nehmen.
Cheatah
Hallo,
$anzahl=mysql_query("SELECT * FROM $tabellehits where bereich='$woher' and monat='$akt_monat' and jahr='$akt_jahr'") or die("SELECT ERROR 30");
Woher weißt Du denn schon vorher, dass hier Fehler 30 auftritt? Schau Dir mal http://www.php.net/manual/de/function.mysql-errno.php und http://www.php.net/manual/de/function.mysql-error.php
if (mysql_num_rows($anzahl)==0){
mysql_query("INSERT INTO $tabellehits SET monat='$akt_monat', jahr='$akt_jahr', bereich='$woher'") or die("INSERT Error 31");
}
else{
mysql_query("UPDATE $tabellehits SET treffer=treffer+1 where monat='$akt_monat' and jahr='$akt_jahr' and bereich='$woher'") or die("INSERT Error 2");
}
Ich hoffe mal sehr, dass dieser Code nicht so in deiner Seite steht! Wenn doch, dann kann man Dir über die Paramter komplette mySQL-Anweisungen unterschmuggeln, also mit einem einfachen Link Deine gesamte DB löschen.
Lesestoff:
Prüfe importierte Parameter. Traue niemandem. http://www.php-faq.de/q/q-sicherheit-parameter.html
Wie unterscheide ich böse Variablen von guten? http://www.php-faq.de/q/q-security-variablen.html
[1] Aufgrund Deiner augenscheinlichen Unkenntnis einiger Grundlagen ist PHP für Dich nicht geeignet. Siehe Archiv.
Ja, da fehlt mir noch sehr viel, deshalb frage ich ja... schade nur, dass etwas deshalb gleich ungeeignet ist...
Du hast Dir gleich ein viel zu großes Ziel gesetzt. Erst PHP, dann mySQL. ;)
Gruss, Thoralf
Hallo Thoralf,
Ich hoffe mal sehr, dass dieser Code nicht so in deiner Seite steht! Wenn doch, dann kann man Dir über die Paramter komplette mySQL-Anweisungen unterschmuggeln, also mit einem einfachen Link Deine gesamte DB löschen.
Doch der Code steht so in meiner Seite, ist ein fertiges Script gewesen, das ich nach meinen Bedürfnissen umgebaut habe (dient einfach nur zur Hits-Übersicht meinerseits) Das es so gefährlich ist, wusste ich nicht...
Lesestoff:
Prüfe importierte Parameter. Traue niemandem. http://www.php-faq.de/q/q-sicherheit-parameter.html
Wie unterscheide ich böse Variablen von guten? http://www.php-faq.de/q/q-security-variablen.html
hab´s kurz uberflogen, werde mir das nochmals genauer ankucken.
Du hast Dir gleich ein viel zu großes Ziel gesetzt. Erst PHP, dann mySQL. ;)
bestimmt ;-)
ich hab bisher immer versucht anhand fertiger Skripte zu lernen (Skript einbauen, anpassen, umwerkeln und immer wieder php-manuals und self-html besuchen.
soll ja auch noch ein Hobby bleiben ;-)
Gruss Steve
Hi,
Das es so gefährlich ist, wusste ich nicht...
aus eben diesem Grund rate ich Anfängern immer und immer wieder, von PHP *dringend* die Finger zu lassen. Beginne mit anderen serverseitigen Techniken - *weil* sie im Einstieg schwerer sind.
Cheatah
Hi,
Kodiere die Leerzeichen: %20
alos bei klick wandelt der Browser das die [LEER] in %20 (steht zumindest so in der Adressleiste.
der Browser? Es gibt mehr als einen Browser. Tun das ALLE Browser? Ich würde mich nicht darauf verlassen und nur gültige URLs verwenden.
Woher kommt es eigentlich, daß so viele Leute bei SEDO sind?
SEDO??
SEDO ist Besitzer der Domäne domain.de
cu,
Andreas
Woher kommt es eigentlich, daß so viele Leute bei SEDO sind?
SEDO??
??
Hi,
www.domain.de/article.php?wer=Steve&woher=Katie lebt wieder in der Zivilisation
selbst wenn die Leerzeichen kodiert werden, ist dies übrigens noch keine URL. Zu einer solchen gehört *immer* ein Protokoll. Andernfalls ist es eine relative URI, die in diesem[1] Fall die URL http://forum.de.selfhtml.org/my/www.domain.de/article.php?wer=Steve&woher=Katie+lebt+wieder+in+der+Zivilisation ergeben würde.
die article.php macht dann nen string aus $wer und $woher und schreibt in MySql.
Welches $wer und $woher? Du meinst sicher $_GET['wer'] und $_GET['woher'], andernfalls ist nämlich Dein Server misskonfiguriert.
Cheatah
[1] Speziell bei mir, bei Dir wäre es ggf. eine leicht andere, nämlich ohne "my/".