Eigene Suchmaschine

deintag85

Erfahrenes Mitglied
Hallo,
und zwar würde ich gern folgendes coden.
Ein Eingabefeld, ein Suchbutton und diverse Checkboxen.

Die Checkboxen dienen zur Auswahls eines Betreibers (Google, eBay, wikipedia, youtube..)

In das Eingabefeld gebe ich nun das Suchwort ein, checke den Betreiber aus und lass mir das Ergebnis im gleichen bzw. neuen Fenster ausgeben.

Ich denke mal mit HTML allein ist das nicht geschafft?
Ich hab es in zwei Dateien realisiert. Zum Einen :

HTML:
<form action="onlinesearch.php" method="post" enctype="multipart/form-data" target="_blank">
		<input type="text" size="75" name="eingabe"><input type="submit" name="senden" value="Suchen"><br>
		<input type="radio" name="suchen" value="google" checked onFocus="search_select('google')"> <a href="http://www.google.de" target="_blank">Google.de</a>
		<input type="radio" name="suchen" value="yahoo" onFocus="search_select('yahoo')" > <a href="http://www.yahoo.de" target="_blank">Yahoo.de</a>
		<input type="radio" name="suchen" value="ebay" onFocus="search_select('ebay')" > <a href="http://partners.webmasterplan.com/click.asp?ref=282872&site=1382&type=b721&bnb=721&entnb=77"  target="_blank">Ebay.de</a>
		<input type="radio" name="suchen" value="amazon" onFocus="search_select('amazon')" > <a href="http://www.amazon.de" target="_blank">Amazon.de</a>
		<input type="radio" name="suchen" value="download" onFocus="search_select('download')" > <a href="http://www.download.com" target="_blank">Download.com</a>
		<input type="radio" name="suchen" value="wikipedia" onFocus="search_select('wikipedia')" > <a href="http://www.wikipedia.de" target="_blank">Wikipedia.de</a>		
		</form>

und zum Anderen

PHP:
<?php
echo "<p>" . $_POST["eingabe"] . "</p>\n";
echo "<p>" . $_POST["suchen"] . "</p>\n";

if (isset($_POST["suchen"]))
{
switch($_POST["suchen"]) {
case "google":
$url="http://www.google.de/custom?q=".$_POST["eingabe"]."&sa=Suchen&client=pub-2740664290624467&forid=1&ie=ISO-8859-1&oe=ISO-8859-1&cof=GALT%3A%239A2C06%3BGL%3A1%3BDIV%3A%2333FFFF%3BVLC%3AD03500%3BAH%3Acenter%3BBGC%3A99CCFF%3BLBGC%3ACCE5F9%3BALC%3A440066%3BLC%3A440066%3BT%3A336699%3BGFNT%3A223472%3BGIMP%3A223472%3BFORID%3A1%3B&hl=de";
break;

case "yahoo":
$url="http://de.search.yahoo.com/search?fr=fp-tab-web-t-1&ei=ISO-8859-1&p=".$_POST["eingabe"]."&meta=vl%3D";
break;

case "ebay":
$url="http://partners.webmasterplan.com/click.asp?site=1382&ref=282872&subid=&type=html&hnb=22&ent=474&prd=yes&partner=25910&loc=http://search.ebay.de/search/search.dll%3Fshortcut=1%26query=".$_POST["eingabe"]."";
break;

case "amazon":
$url="http://www.amazon.de/exec/obidos/external-search/302-6338632-8118418?tag=lcinfotech&index=blended&keyword=".$_POST["eingabe"]."&tag=lcinfotech&tag-id=tag-id";
break;

case "download":
$url="http://www.download.com/3120-20-0.html?qt=".$_POST["eingabe"]."&tg=dl-2001&search=+Go%2521+";
break;

case "wikipedia":
$url="http://de.wikipedia.org/wiki/Spezial:Search?search=".$_POST["eingabe"]."&fulltext=Suche";
break;

}
}

?>

Nun mhhh..Da ich nicht so das Ass in Coden bin, sondern eher Anfänger...Und das ganze nicht so hervorragend klappt...Könnte mir da jemand behilflich sein? Ich hoffe, mein Problem ist ausreichend formuliert =)

Liebe Grüße
 

maeTimmae

Erfahrenes Mitglied
So schlecht ist der Code nicht - Zumindest habe ich schon viel schlimmeres (auch von mir) gesehen - Aber ich empfehle dir, die Zeilen einzurücken.
Doch das dann in der "Korrektur" ein wenig später.

Was mir jetzt spontan an der HTML auffällt, ist das "onfocus"... Es schließt ein Switchen auf die Radiobox über Tab oder so ein (ticking sollte über onclick realisiert werden) - Also sobald überhaupt das Objekt aktiviert wird, wird das onfocus-Event aufgeführt. Das solltest du mit dir selbst klären... Nicht zuletzt, da ich die search_select Funktion in ihrer Struktur nicht kenne ;)
(Warum hast du das Encode-Flag des Formulars auf multipart gesetzt? Ist in dem Fall nicht notwendig)

Zurück zum PHP-Code:
PHP:
<?php
if (isset($_POST['eingabe'], $_POST['suchen']) {
    switch ($_POST['suchen']) {
        default:
        case "google":
            $url = "http://www.google.de/custom?q={$_POST['eingabe']}"
                 . "&sa=Suchen&client=pub-2740664290624467&forid=1&ie=ISO-8859-1"
                 . "&oe=ISO-8859-1&cof=GALT%3A%239A2C06%3BGL%3A1%3BDIV%3A%2333FF"
                 . "FF%3BVLC%3AD03500%3BAH%3Acenter%3BBGC%3A99CCFF%3BLBGC%3ACCE5"
                 . "F9%3BALC%3A440066%3BLC%3A440066%3BT%3A336699%3BGFNT%3A223472"
                 . "%3BGIMP%3A223472%3BFORID%3A1%3B&hl=de";
            break;
        
        case "yahoo":
            $url = "http://de.search.yahoo.com/search?fr=fp-tab-web-t-1"
                 . "&ei=ISO-8859-1&p={$_POST['eingabe']}&meta=vl%3D";
            break;
        
        case "ebay":
            $url = "http://partners.webmasterplan.com/click.asp?site=1382&ref=282872"
                 . "&subid=&type=html&hnb=22&ent=474&prd=yes&partner=25910"
                 . "&loc=http://search.ebay.de/search/search.dll%3Fshortcut=1%26"
                 . "query={$_POST['eingabe']}";
            break;
        
        case "amazon":
            $url = "http://www.amazon.de/exec/obidos/external-search/"
                 . "302-6338632-8118418?tag=lcinfotech&index=blended"
                 . "&keyword={$_POST['eingabe']}&tag=lcinfotech&tag-id=tag-id";
            break;
        
        case "download":
            $url = "http://www.download.com/3120-20-0.html?qt={$_POST['eingabe']}"
                 . "&tg=dl-2001&search=+Go%2521+";
            break;
        
        case "wikipedia":
            $url = "http://de.wikipedia.org/wiki/Spezial:Search?"
                 . "search={$_POST['eingabe']}&fulltext=Suche";
            break;
    }

    // Forward zu $url
    header("Location: {$url}");
} else {
    // Forward zur index.php (Beispiel)
    header('Location: /index.php');
    // Oder Fehler ausgeben oder Ähnliches
}

Du hast deine URL zwar gespeichert, aber was du damit machen möchtest, hast du nicht gesagt. Habe daher ein einfaches Forwarding vorgeschlagen. Ein Einsatz der APIs von zB Google & Amazon zur dynamischen Einbindung in die eigene Seite sind dann schon wieder andere Themen, die um einiges komplexer werden.
 

wideline

Grünschnabel
Hallo !

Finde dieses "Projekt" ganz interessant und wollte es teilweise auch in meine Homepage integrieren, bisher hatte ich die API von Google eingesetzt, leider kann man hier nur immer die Suche über google realisieren und nicht explizit von anderen Seiten, so wie hier.

Ich habe selbst schon in mehreren ansetzen versucht so ein "Projekt" umzusetzen, bisher leider vergebens. Hatte auch schon den geposteten Code angepasst, aber auch dieser mag nicht so funktionieren wie er soll. Bekomme folgenden fehler:

Code:
Cannot modify header information - headers already sent


er scheint den "else-part" nicht richtig zu interpretieren, code wurde wie folgt abgeändert:

PHP:
if (isset($_POST['eingabe'], $_POST['suchen'])) {
    switch ($_POST['suchen']) {


dies schien mir in erster Linie als richtig, sicher bin ich mir jedoch nicht, bin auf diesen Gebiet auch eher Anfänger.

Die Suche über die Radio-Buttons, wirft mich bisher auch immer nur wieder auf die gleiche Seite zurück. Die Suche ist in der index.php eingebunden.


HTML:
<form action="index.php" method="post" target="_blank">
		<input type="text" size="75" name="eingabe"><input type="submit" name="senden" value="Suchen"><br>
		<input type="radio" name="suchen" checked value="google"> <a href="http://www.google.de" target="_blank">Google.de</a>
		<input type="radio" name="suchen" value="ebay"> <a href="http://shop.ebay.de/items/?_nkw=" target="_blank">eBay.de</a>


Kann mir hier vielleicht jemand weiterhelfen ?

Grüße
 

wideline

Grünschnabel
Hallo kuddeldaddeldu,

den fehler kenne ich, auch wodurch er passiert (gekürzte Version):

PHP:
<?php
if (isset($_POST['eingabe'], $_POST['suchen'])) {
    switch ($_POST['suchen']) {
        default:

        case "ebay":
            $url = "http://partners.webmasterplan.com/click.asp?site=1382&ref=282872"
                 . "&subid=&type=html&hnb=22&ent=474&prd=yes&partner=25910"
                 . "&loc=http://search.ebay.de/search/search.dll%3Fshortcut=1%26"
                 . "query={$_POST['eingabe']}";
            break;        
    }

    // Forward zu $url
    header("Location: {$url}");
} else {
    // Forward zur index.php (Beispiel)
    header('Location: /index.php');
    // Oder Fehler ausgeben oder Ähnliches
} 
?>

hier im letzten teil liegt der Hund begraben, aber selbst wenn ich den else part rausnehme wirft mich das script immer wieder auf die index.php
 

kuddeldaddeldu

Erfahrenes Mitglied
Hi,

hier im letzten teil liegt der Hund begraben, aber selbst wenn ich den else part rausnehme wirft mich das script immer wieder auf die index.php

na ja, wohin auch sonst. Die Action des Formulars ist ja index.php und der Redirect-Header kann wegen des Fehlers nicht gesendet werden. Du musst schauen, wo diese Ausgabe steckt, könnte auch nur ein BOM sein. Schau doch mal in den Browserquelltext. Wie sieht der aus?

LG
 

wideline

Grünschnabel
erstmal danke das Du Dich meiner so annimmst.
Hier der HTML-Code der aufgerufenen Seite:

HTML:
<form action="index.php" method="post" target="_blank">
		<input type="text" size="75" name="eingabe"><input type="submit" name="senden" value="Suchen"><br>
		<input type="radio" name="suchen" checked value="google"> <a href="http://www.google.de" target="_blank">Google.de</a>
		<input type="radio" name="suchen" value="ebay"> <a href="http://partners.webmasterplan.com/click.asp?ref=282872&site=1382&type=b721&bnb=721&entnb=77"  target="_blank">Ebay.de</a>
</form>

<br />
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /homepages/63/d48378566/htdocs/index.php:9) in <b>/homepages/63/d48378566/htdocs/index.php</b> on line <b>45</b><br />

in Zeile 9 der index.php wird der "übliche Header" eingebunden (meta, title, etc.),
also standard HTML-code. Der fehler liegt also im php-code.

Zeile 45-46:
PHP:
    header('Location: /index.php');
    // Oder Fehler ausgeben oder Ähnliches

Frage vorweg, ist die "isset" - Zeile denn korrekt, diese habe ich auch angepasst, hier spuckte der php-schnipsel den ersten fehler aus.

beim <FORM> muss ich also die action anpassen ? Also muss ich noch eine "Abfang-Abfrage" in die index.php bringen ?

Gruß

Andy
 

kuddeldaddeldu

Erfahrenes Mitglied
Hi,

in Zeile 9 der index.php wird der "übliche Header" eingebunden (meta, title, etc.),
also standard HTML-code. Der fehler liegt also im php-code.

nein, der Fehler ist, dass Du vorher schon Ausgaben machst. Auch Zeichen, die nicht in einem PHP-Block ausgegeben werden, gehören dazu.

Häufig auftretende Fehler hat gesagt.:
Der Header ist Teil einer HTTP-Nachricht und enthält Informationen über über den Körper der Nachricht (der eigentlich Nutzlast) und wird vor diesem gesendet. Sobald eine Ausgabe stattfand – sowohl explizit also auch implizit – wird der Header an den Client gesendet und eine Änderung ist nicht mehr möglich.

Warum machst Du Deine Weiterleitung auch mitten im Script (sogar nach dem Formular), wenn schon längst ein Teil HTML an den Client rausgegangen ist? Gib doch das komplette HTML-Dokument einfach im else-Zweig aus, eine Weiterleitung auf index.php brauchst Du doch gar nicht (das ist die index.php).

LG
 

wideline

Grünschnabel
okay, vielen Dank, dachte das verhält sich ähnlich wie (m)ein Kontaktformular, hier ist sowohl vorher, als auch nachher HTML-Code.
Ein Solcher Fehler ist dort noch nie aufgetreten, denke das hängt damit zusammen, dass durch "action" direkt ins Formular "verwiesen" wird:

PHP:
<? echo $_SERVER['PHP_SELF']; ?>


Aber zurück zu meinem "Problemcode" ;)
Hab die Zeilen nun wie folgt angepasst:

PHP:
<?php
if (isset($_POST['eingabe'], $_POST['suchen'])) {
    switch ($_POST['suchen']) {
        default:
        case "google":
            $url = "http://www.google.de/custom?q={$_POST['eingabe']}"
                 . "&sa=Suchen&client=pub-2740664290624467&forid=1&ie=ISO-8859-1"
                 . "&oe=ISO-8859-1&cof=GALT%3A%239A2C06%3BGL%3A1%3BDIV%3A%2333FF"
                 . "FF%3BVLC%3AD03500%3BAH%3Acenter%3BBGC%3A99CCFF%3BLBGC%3ACCE5"
                 . "F9%3BALC%3A440066%3BLC%3A440066%3BT%3A336699%3BGFNT%3A223472"
                 . "%3BGIMP%3A223472%3BFORID%3A1%3B&hl=de";
            break;
        
        case "ebay":
            $url = "http://partners.webmasterplan.com/click.asp?site=1382&ref=282872"
                 . "&subid=&type=html&hnb=22&ent=474&prd=yes&partner=25910"
                 . "&loc=http://search.ebay.de/search/search.dll%3Fshortcut=1%26"
                 . "query={$_POST['eingabe']}";
            break;        
    }

    // Forward zu $url
    header("Location: {$url}");
} else {
    ?>
    <form action="index.php" method="post" target="_blank">
		<input type="text" size="75" name="eingabe"><input type="submit" name="senden" value="Suchen"><br>
		<input type="radio" name="suchen" checked value="google"> <a href="http://www.google.de" target="_blank">Google.de</a>
		<input type="radio" name="suchen" value="ebay"> <a href="http://partners.webmasterplan.com/click.asp?ref=282872&site=1382&type=b721&bnb=721&entnb=77"  target="_blank">Ebay.de</a>
</form>
<?php
} 
?>


Der Fehler wird nun beim ersten Aufruf nicht mehr verursacht und das ganze verhält sich wie gewünscht, mit der Ausnahme das beim klick auf "Suchen" der Fehler wieder verursacht wird. Problem ist wohl wieder der vorangehende header, welcher aber eigentlich auch vorhanden sein sollte. Ich hole noch ein wenig weiter aus, um ein wenig zu erläutern wie ich die seite generell (zum Ende) aufgebaut haben möchte:

Code:
"statischer" / globaler Header mit Suchleiste

Menu + Content-Bereich (welcher immer wechselt je nach seite(Inhalt)

"statischer" / globaler Footer


Also prinzipiell habe ich das ganze schon Verstanden, es darf kein Code vorab stehen, ich habe nun testweise den ganzen code vorweg entfernt und die "Suche" nochmal probiert, allerdings meckert er hier dann wieder den header an, mit Verweis auf die 1. Zeile (wie im obigen Code). Warum er jetzt direkt den Code bemängelt verstehe ich nicht ...

Gruß

Andy