Ich Teste das mal eben auf dem Server
Local taugt der Quellcode so wie er jetzt ist...
EDIT:
Also bei mir passt das
http://kendo-bunker.de/donkey/test/
Ich Teste das mal eben auf dem Server
Local taugt der Quellcode so wie er jetzt ist...
EDIT:
Also bei mir passt das
http://kendo-bunker.de/donkey/test/
Du hast da jedenfalls ne Lücke drin:
[Blockierte Grafik: http://i27.tinypic.com/e34tt.png]
mach mal border="0" in den <img>-Tag
Hm... Was was Du da verlinkt hast kommt mir ein bissl kompleziert vor für ein paar smilies, bandit.
Nichts für ungut
Auf Selfhtml findet man auch ein Script zum einfügen von BBC in die Textarea.
Wie das dann Ausgewertet wird bleibt jedem selbst überlassen.
http://aktuell.de.selfhtml.org/artikel/javascript/bbcode/
Hier mal ne Testseite die ich damit gemacht hab.
http://kendo-bunker.de/donkey/bbc/
Die Smilies als BBC einfügen, Textformatierung als HTML.
Da muss man das Form beim Absenden halt mit ner Whitelist überprüfen welcher HTML-Code eingegeben wurde.
Das Ersetzen hab ich mal mit preg_replace gelösst.
Nicht grad elegant und sieht ein bissl strange aus, aber auf die Schnelle is mir nichts Besseres eingefallen
<form action="index.php" name="nachricht" method="post">
<p>
Gib Deinen Text ein:<br />
<textarea name="settext" rows="10" cols="60"></textarea><br />
Klicke einen Smilie um ihn einzufügen:<br />
<img src="icon_green_smile.gif" onClick="insert('[smile]', '')" />
<img src="icon_green_wink.gif" onClick="insert('[wink]', '')" />
<img src="icon_green_lol.gif" onClick="insert('[lol]', '')" />
<img src="icon_green_cool.gif" onClick="insert('[cool]', '')" />
<img src="icon_green_razz.gif" onClick="insert('[razz]', '')" /><br />
<input type="button" value="Fettschrift" onClick="insert('<b>', '</b>')">
<input type="button" value="Kursivschrift" onClick="insert('<i>', '</i>')">
</p>
<input type="submit" name="send" value="Senden">
</form>
Alles anzeigen
<?php
if (isset($_POST['send'])){
$settext = $_POST['settext'];
// Suchmuster
$a[0] = '/\[smile\]/';
$a[1] = '/ \[wink\]/';
$a[2] = '/\[lol\]/';
$a[3] = '/\[cool\]/';
$a[4] = '/\[razz\]/';
// ersetzen durch
$b[0] = '<img src="icon_green_smile.gif" />';
$b[1] = '<img src="icon_green_wink.gif" />';
$b[2] = '<img src="icon_green_lol.gif" />';
$b[3] = '<img src="icon_green_cool.gif" />';
$b[4] = '<img src="icon_green_razz.gif" />';
// BBC durch HTML ersetzen
$replace = preg_replace($a, $b, $settext);
// Zeilenumbrüche einfügen
$output = str_replace('
', '<br />', $replace);
echo'<br /><br />'.$output;
}
?>
Alles anzeigen
Wofür stehen die <a> ?
[COLOR=#000000][COLOR=#0000BB]str_replace[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"[CENTER'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"<center><a>"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$comment[/COLOR][COLOR=#007700]);
[/COLOR][COLOR=#0000BB]str_replace[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]"[/CENTER'[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"</a></center>"[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$comment[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
[COLOR=#000000][COLOR=#0000BB]fputs[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$fp[/COLOR][COLOR=#007700], [/COLOR][COLOR=#DD0000]"<div class='kommentar'><a>"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$comment[/COLOR][COLOR=#007700].[/COLOR][COLOR=#DD0000]"</a></div>\n"[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
Denke mal der Doctype is das geringste Problem von Amazon...
Ich empfehle Dir von Framesets ganz Abstand zu nehmen und die Seite neu zu schreiben - in XHTML 1.0 Strict.
Damit bekommst Du sie von Layout her und so genau so hin.
Mit PHP kannst Du es "frameähnlich" machen. Hat aber nichts mit Frames zu tun.
Arbeite Dich mal ein bisschen in die Materie ein, dann wird das schon gut.
Dann is der Code zukunftssicher und suchmaschienenfreundlich.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 6.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Ensemble Allegra - Alte Musik - Volksmusik</title>
</head>
<frameset framespacing="0" border="0" frameborder="0" rows="136,*">
<frame name="ob" scrolling="no" noresize target="Inhalt" src="[URL='http://www.forum-hilfe.de/view-source:http://www.ensemble-allegra.de/top.htm']top.htm[/URL]">
<frameset cols="174,*">
<frame name="Inhalt" target="Hauptframe" src="[URL='http://www.forum-hilfe.de/view-source:http://www.ensemble-allegra.de/navi.htm']navi.htm[/URL]" scrolling="no">
<frame name="Hauptframe" marginwidth="0" marginheight="0" scrolling="auto" src="[URL='http://www.forum-hilfe.de/view-source:http://www.ensemble-allegra.de/start.htm']start.htm[/URL]">
</frameset>
<noframes>
<body topmargin="0" leftmargin="0">
<p>Diese Seite verwendet Frames. Frames werden von Ihrem Browser aber nicht
unterstützt.</p>
</body>
</noframes>
</frameset>
</html>
Alles anzeigen
Das ist böse....
keine Dokumenttyp Deklaration.
der body is eh falsch gesetzt.
und "Diese Seite verwendet Frames....." gehört in den Fallback-Container
Aber wem wundert´s?
Erstmal proggen lernen würd ich sagen
Ah, gut zu wissen.
Wusste nicht das man das trotzdem in den Tags angeben muss.
Is ein bisschen verwirrend
Also bekomm das vom Validator:
Zitat
- [Blockierte Grafik: http://validator.w3.org/images/info_icons/error.png]Line 8, Column 29: required attribute "type" not specified <script src="content/uhr.js"></script> ✉
The attribute given above is required for an element that you've used, but you have omitted it. For instance, in most HTML and XHTML document types the "type" attribute is required on the "script" element and the "alt" attribute is required for the "img" element.
Typical values for type are type="text/css" for <style> and type="text/javascript" for <script>.- [Blockierte Grafik: http://validator.w3.org/images/info_icons/error.png]Line 12, Column 7: required attribute "type" not specified <style>✉
The attribute given above is required for an element that you've used, but you have omitted it. For instance, in most HTML and XHTML document types the "type" attribute is required on the "script" element and the "alt" attribute is required for the "img" element.
Typical values for type are type="text/css" for <style> and type="text/javascript" for <script>.
Hab aber das im <head>:
<meta http-equiv="content-Style-Type" content="text/css" />
<meta http-equiv="content-script-type" content="text/javascript" />
Wenn man das trotzdem angeben muss sind die Meta-Angaben ja voll fürn A..., oder?
Oder sind die Meta-Angaben in XHTML garnichtmehr gültig?
Gruß, Donkey
Gewöhn Dir an einfache und doppelte Anführungszeichen (' und ") zu verwenden.
Durch die ganzen Backslashes wird das ganze zu unübersichtlich und Fehler werden übersehen.
In Post #5 hab ich Dir gezeigt wie´s geht.
Tja - saubere Programmierung is halt alles.
Beim <script>-Tag fehlt das >
Versuchs einfach mal so:
Hervorragend! Vielen Dank!
Wäre nich auf die Idee gekommen das mal zu testen
Jetzt funzt das perfekt!
if (isset ($_POST['search'])){
$input = $_POST['input'];
switch ($_POST['searchselect']){
case 'Google':
$searchurl = 'http://www.google.de/search?q='.$input;
break;
case 'YouTube':
$searchurl = 'http://www.youtube.com/results?search_query='.$input;
break;
case 'Wikipedia':
$searchurl = 'http://de.wikipedia.org/wiki/Spezial:Suche?search='.$input;
break;
case 'eBay':
$searchurl = 'http://search.ebay.de/search/search.dll?query='.$input;
break;
case 'Chip':
$searchurl = 'http://suche.chip.de/'.$input.'.html';
break;
case 'Flickr':
$searchurl = 'http://www.flickr.com/search/?q='.$input;
break;
}
header('Location: '.$searchurl);
}
Alles anzeigen
<form action="start.php" method="post">
<select name="searchselect">
<option>Google</option>
<option>YouTube</option>
<option>Wikipedia</option>
<option>eBay</option>
<option>Chip</option>
<option>Flickr</option>
</select>
<input type="text" name="input" size="50">
<input type="submit" name="search" value="Suchen">
</form>
Alles anzeigen
Hallo zusammen!
Ich weiss garnicht wo ich anfangen soll
Also kurz zur Erklärung:
Ich möchte ein Suchfeld anbieten.
Den Suchanbieter (z.B. Google oder YouTube) such man sich aus nem Dropdown-Menü aus und gibt dann seine Suchanfrage ein.
Hier mal ein nicht funktionierendes Beispiel: http://kendo-bunker.de/donkey/searchform.php.
Soweit so gut...
Nun das Problem ist jetzt dass das action-Attribut erst bekannt ist nachdem der User gewählt hat wo er suchen will.
Gut die meisten erwarten die Daten eh per $_GET also könnt ich das ja mit ner Weiterleitung und nen switch machen, aber Wikipedia will die daten per $_POST.
Ausserdem sind bei jedem die Namen des <input> anders, kann ich also auch erst nach dem Submit zuordnen.
Hier mal die ganzen Codes, die ich in ein Form quetschen will:
<!-- Google -->
<form method="get" action="http://www.google.de/search">
<input type="text" name="q" size="30" maxlength="255" value="">
<input type=submit name="btnG" value="Google Suche">
</form>
<!-- Youtube -->
<form action="http://www.youtube.com/results" method="get">
<input name="search_query" type="text" size="30" maxlength="128" value="">
<input type="submit" value="YouTube Suche">
</form>
<!-- Wikipedia -->
<form method="post" accept-charset="UTF-8" action="http://de.wikipedia.org/wiki/Spezial:Suche">
<input type="text" name="search" size="30">
<input type="submit" name="go" value="Wikipedia Suche">
</form>
<!-- eBay -->
<form action="http://search.ebay.de/search/search.dll" method="get">
<input type="text" name="query" size="30" maxlength="100" value="">
<input type="submit" value="Ebay Suche">
</form>
<!-- Flickr -->
<form method="get" action="http://www.flickr.de/search/">
<input size="100" name="q" type="text" value="">
<input value="Flickr Suche" type="submit">
</form>
<!-- Chip online -->
<form action="http://suche.chip.de" method="get" accept-charset="utf-8">
<input name="q" size="100" value="" type="text">
<input type="submit" value="Chip Suche">
</form>
Alles anzeigen
Ich hab ehrlich gesagt kein Plan wie das hinhaut...
Hat einer ne Idee wie das (möglichst ohne JavaScript) funzt?
Gruss Donkey
Als zusatzlicher is er gut, so kann man es sich sparen die ganzen Tags ins Array zu schreiben und anstatt ne Blacklist ne Whitelist erstellen - für die Tags.
Wird ja eh empfohlen eine Whitelist der Blacklist vorzuziehen.
Ja ist sicher eine Möglichkeit.
Aber in dem Beispiel werden ja nicht nur Tags gefiltert
So kann man auch Wörter filtern - z.B. Viagra oder sowas.
Denke, nach reichlich probieren hab ich hinbekommen mit dem Array
<?php
$setnachricht = $_POST['setnachricht'];
$check = array("BCC:", "CC:", "Content-Type:", "<script", "[url', '[img', '<a href', '<img src');
$number = count($check);
$count = 0;
while ($number > $count){
$checkstring = str_replace($check[$count], '', $setnachricht);
if ($checkstring != $setnachricht){
$error = 'Unzulässige Eingabe!';
}
$count++;
}
if (!empty($error)){
echo $error;
}
else{
echo'Alles OK!';
}
?>
Alles anzeigen
Also je mehr ich darüber nachdenke, desto mehr komm ich zu der Erkenntnis, dass es vielleicht doch besser ist auf Captchas zu verzichten und dem Spam "hinter den Kulissen" den Kampf anzusagen - ohne das der Besucher was davon mit bekommt.
Allerdings hab ich noch nicht wirklich rausgefunden wie man das macht dass auch der Code einigermaßen schlank bleibt.
z.B. sowas hier:
$forbidden = 'Die Nachricht enthält unzulässige Zeichen.':
if(eregi("BCC:", $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi("CC:", $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi("Content-Type:", $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi("<script", $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi("\[url', $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi('\[img', $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi('<a href', $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
if(eregi('<img src', $setnachricht)){$error .= '<p>'.$forbidden.'</p>';}
Alles anzeigen
Bekommt man das nicht kleiner hin? z.B. mit nen Array oder so?
Wenn die Variable leer ist weil die Seite direkt angesteuert wird könnte es ein Bot sein - nicht schlecht.
Hab auch mal was gelesen dass man die Zeit die man zum normalerweise zum Aussfüllen braucht messen soll. Bots machen das ja viel schneller.
Aber ich weiss nicht so recht was ich davon halten soll.