Sarkkan
Hi,
Du bis ein "Schatz". Aber ich hab ne Fehlermeldung
Fatal error: Maximum execution time of 30 seconds exceeded in ... httpdocs/searchit/glastest.php on line 15
Und bei mir ist
die Zeile 15.
Sorry.
Moni
Sarkkan
Hi,
Du bis ein "Schatz". Aber ich hab ne Fehlermeldung
Fatal error: Maximum execution time of 30 seconds exceeded in ... httpdocs/searchit/glastest.php on line 15
Und bei mir ist
die Zeile 15.
Sorry.
Moni
Zitat von "rernanded"Fatal error: Maximum execution time of 30 seconds exceeded in ... httpdocs/searchit/glastest.php on line 15
WAS?! O___O
30 Sekunden Maximlae Script-Laufzeit?^^ Standard sind meine ich 5 Minuten.. Wo testest du das den?
Naja.. also entweder hast du jetzt viele Ressourcen hinzugefügt, oder ich habe ne Endlosschleife produziert^^
keine Ahnung, ich hab doch nur den Code übernommen denn Du gepostet hast.
Enlosschleife könnte wohl sein.
Moni
Ach mist^^
<span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">;<br />while((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$subPos</span><span class="syntaxkeyword">)) != </span><span class="syntaxdefault">$pos</span><span class="syntaxkeyword">){<br /> </span><span class="syntaxdefault">$searchResult </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">0</span><span class="syntaxkeyword">, </span><span class="syntaxdefault">$subPos</span><span class="syntaxkeyword">);<br /> } </span><span class="syntaxdefault"></span>
Wir sollten vllt den Zeiger auch immer etwas vor rücken, sonst finden wir unendlich mal das letzte Vorkommen^^
<?php
error_reporting (E_ALL & ~E_NOTICE);
include_once("verbindung.php");
$ergebnis = mysql_query("SELECT * FROM glasseiten");
while($row = mysql_fetch_object($ergebnis)){
echo "<h2>$row->id / $row->url</h2><br/>";
$search = "glas";
$str = $row->inhalt;
$pos = 0;
$end = 0;
while(($pos = stripos($str, $search, $end)) !== false){
$end = $pos + strlen($search);
$searchResult = substr($str, $pos-10, strlen($search) + 115);
$subPos = 0;
while(($subPos = strripos($searchResult, $search, $subPos)) != $pos){
$searchResult = substr($searchResult, 0, $subPos);
}
echo '<b>HIER:</b> '.$searchResult.'<br/>';
}
}
?>
Alles anzeigen
So sieht mein Code jetzt aus, muß aber immer noch nen Bug haben da timeout wie vor.
Sieh doch bitte nochmals drüber wennDu Lust und Zeit hast :). Bin schon ziemlich groggy :? heute Abend.
Moni
Zitat von "Sarkkan"Ach mist^^
PHP<span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br />while((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> strripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $search</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!=</span><span class="syntaxdefault"> $pos</span><span class="syntaxkeyword">){<br /></span><span class="syntaxdefault"> $searchResult </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>
Wir sollten vllt den Zeiger auch immer etwas vor rücken, sonst finden wir unendlich mal das letzte Vorkommen^^
Hi,
hast Du es aufgegeben :)?
ich habs auch nochmal probiert, hab aber tatsächlich noch den Timeout.
Guck doch bitte nochmals drüber.
Moni
PS Hast Du ein gutes Script für eine Freitextsuche, also zur Suche nach mehreren Worten über/in mehrere Spalten gleichzeitig?
Arg >__< Ich glaube ich habe den Fehler gefunden.. Ich bin davon ausgegangen das der Offset-Parameter bei strripos automatisch von hinten beginnt und nicht wie bei den anderen vorne..
Wir finden also nun an Position 100 noch einmal Glas und beim nächsten suchen fangen wir direkt wieder bei Position 100 an da ist ja das Wort Glas direkt wieder^^
Gerade ne komplett andere Idee, die eigentlich auch viel einfacher ist:
<span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> if </span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$subPos </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> stripos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $search</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 10</span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> strlen</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$search</span><span class="syntaxkeyword">)))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault"> $searchResult </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$searchResult</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 0</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $subPos</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span><span class="syntaxkeyword">}</span><span class="syntaxdefault"> </span>
Wir suchen einfach in unserem string wieder vorwärts ob noch mal das Wort Glas vor kommt, wenn ja dann verkürzen wir den String um kurz vor diese Position
Und nein, leider habe ich so ein Skript spontan nicht
Tut mir Leid
Sarkkan
Mein Held Alles Super.
Hab hier mal ein Suchscript, doch irgendwas ist nicht ganz okay. Der echo $query; zeigt mir an das ich korrekt suche. Keine fehlermeldung nix. Guck mal drüber wenn du willst.
Moni
<form action='simplesearch.php' method=POST>
<input type='text' name='eingabe' value="<? echo $_POST['eingabe']?>">
<br>
<input type='submit' value='suchen'>
</form>
<?
error_reporting (E_ALL & ~E_NOTICE);
include_once("simplesearch_verbindung.php");
if($_POST["eingabe"]=="")
{
echo "<b>Bitte geben Sie ein Suchwort ein.</b>";
}
else
{
$eingabe_array = explode(' ',$_POST["eingabe"]);
$query = 'SELECT * FROM glasseiten WHERE ';
for($i=0; $i<count($eingabe_array); $i++){
$query .= "inhalt LIKE '%".$eingabe_array[$i]."%' OR url LIKE '%".$eingabe_array[$i]."%' ";
if($i<count($eingabe_array)-1){
$query .= ' AND ';
}
}
$result = mysql_db_query($query);
if(mysql_num_fields($result) < 1)
{
echo "Es wurde/n leider kein/e Treffer gefunden. Bitte geben Sie einen oder mehrere andere Suchbegriff ein!";
echo $query;
}
else
for($i=0; $i<$num_rows; $i++){
$id = mysql_result($result,$i,'id');
$url = mysql_result($result,$i,'url');
$first = array_slice(explode(' ', $inhalt), 0, 50);
$kurzform = join(' ', $first) . '... ';
echo '<a href="simplesearch.php?id='.$id.'">'.$url.'</a><br />';
echo $kurzform.'<br /><br />';
}
}
mysql_error();
?>
Alles anzeigen
Ich glaube das Problem liegt an
<span class="syntaxdefault"></span><span class="syntaxkeyword">if(</span><span class="syntaxdefault">$i</span><span class="syntaxkeyword"><</span><span class="syntaxdefault">count</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$eingabe_array</span><span class="syntaxkeyword">)-</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">){ <br /> </span><span class="syntaxdefault">$query </span><span class="syntaxkeyword">.= </span><span class="syntaxstring">' AND '</span><span class="syntaxkeyword">; </span><span class="syntaxcomment">//Verknüpfung der einzelnen Worte mit UND<br /></span><span class="syntaxkeyword">} </span><span class="syntaxdefault"></span>
Hier müsste ein OR hin, den ansonsten sieht unsere Query nachher vllt so aus:
SELECT
*
FROM
glasseiten
WHERE
inhalt LIKE '%glas%' OR url LIKE '%glas%'
AND
inhalt LIKE '%sand%' OR url LIKE '%sand%'
und dann müsste die URL "like" Glas sein und der Inhalt "like" sand.
SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%' AND inhalt LIKE '%logistik%' OR url LIKE '%logistik%'
NeNe, das AND ist schon korrekt, ich suche oben zB nach glas und nach logistik. Also glas UND logistik in $inhalt ODER in $url.
Ich glaube es fehlen () irgendwo. Bei sql kann man ja "schachteln".
Vllt ist das ja korrekter???
SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' AND inhalt LIKE '%logistik%' OR url LIKE '%glas%' AND url LIKE '%logistik%'
Moni
So wäre es logisch, ja^^ Aber bei Programmiersprachen Sieht das wie folgt aus (ich versuche mich jetzt mal als Pseudo-MySQL Datenbank :D)
Wobei du eigentlich dann wenigstens irgendwelche Ergebnise zurück bekommen solltest, den so oder so sollte doch eine der 3 letzten Bedingungen zutreffen.
Was du ansonten mal versuchen kannst: UNION () :
(SELECT * FROM glasseiten WHERE inhalt LIKE '%glas%' OR url LIKE '%glas%')
UNION
(SELECT * FROM glasseiten WHERE inhalt LIKE '%logistik%' OR url LIKE '%logistik%')
Mit UNION kann man nämlich Suchergebnisse Zusammenfassen
Aber da wird sich der Server glaube ich freuen
<form action='simplesearch.php' method=POST>
<input type='text' name='eingabe' value="<? echo $_POST['eingabe']?>">
<br>
<input type='submit' value='suchen'>
</form>
<?php
error_reporting (E_ALL & ~E_NOTICE);
include_once("simplesearch_verbindung.php");
if($_POST["eingabe"]=="")
{
echo "<b>Bitte geben Sie ein Suchwort ein.</b>";
}
else
{
$eingabe_array = explode(' ',$_POST["eingabe"]);
$query = 'SELECT * FROM glasseiten WHERE ';
for($i=0; $i<count($eingabe_array); $i++){
$query .= "(inhalt LIKE '%".$eingabe_array[$i]."%' OR url LIKE '%".$eingabe_array[$i]."%')";
if($i<count($eingabe_array)-1){
$query .= ' AND ';
}
}
$result = mysql_db_query($query);
if(mysql_num_rows($result) < 1)
{
echo "Leider kein/e Treffer. Bitte geben Sie einen anderen Suchbegriff ein!";
echo $query;
}
else
for($i=0; $i<$num_rows($result); $i++){
$id = mysql_result($result,$i,'id');
$url = mysql_result($result,$i,'url');
$first = array_slice(explode(' ', $inhalt), 0, 50);
$kurzform = join(' ', $first) . '... ';
echo '<a href="simplesearch.php?id='.$id.'">'.$url.'</a><br>';
echo $kurzform.'<br><br>';
}
}
mysql_error();
?>
Alles anzeigen
Ich hab mal Klammern () gesetzt und jetzt ist es logisch. UNION benutzt man doch eigentlich nur bei der Abfrage von 2 Tabellen?
Ich denke aber etwas mit num_rows ist falsch ev. muß ich $rows definieren und dann $row->SPALTE benutzen oder oder oder
Irgendwie bin ich echt genervt. Hat aber nix mit Dir zu tun.
Moni
Ich meine das die Klammern es verschlimmern^^
Vergleiche (wie wir sie hier oder bei If-Anweisungen haben) schauen quasi immer nur ob 1 (Ja) oder 0 (Nein) heraus kommt, klammern wir etwas ein wird die Klammer zuerst gelöst und dann anschließend mit dem Rest verglichen. 1 + 1 = 1, 0 + 0 = 0, 0 + 1 = 0 (quasi wie in der Mathematik mit + und -)
(inhalt LIKE '%glas%' OR inhalt LIKE '%logistik%') AND (url LIKE '%glas%' AND url LIKE '%logistik%')
-- So Nun finden wir Glas, aber keine Logistik:
(1 || 1) && ( 0 || 0)
1 && 0
0
-- Finden wir nun Glas und Logistik
(1 || 1) && (1 || 1)
1 && 1
1
Alles anzeigen
Ersetzen wir das AND nun durch ein OR:
(inhalt LIKE '%glas%' OR inhalt LIKE '%logistik%') OR (url LIKE '%glas%' AND url LIKE '%logistik%')
-- So Nun finden wir Glas, aber keine Logistik:
(1 || 1) || ( 0 || 0)
1 || 0
1
-- Finden wir nun Glas und Logistik
(1 || 1) || (1 || 1)
1 || 1
1
Alles anzeigen
Müssten wir Ergebnisse Geliefert bekommen
PS: num_rows() ist bei dir Eine Variabel (du hast ein $ davor)
Fehler glaube ich gefunden =D
Du verwendest mysql_db_query(), diese erwartet als erstes die Datenbank und als 2. die Query, du übergibst aber nur den ersten Parameter^^
Versuch mal mysql_query oder gib noch eine Datenbank an
NÖ tuts nicht, bekomme nicht mal mehr den $query angezeigt noch die echos "Bitte geben ..." und "Leider keine ..."
Moni
Das kann aber doch jetzt nicht sein O.o
Ich meine.. die Query steht eine Zeile unter dem "Leider keine.." .__.
Sicher das wenigstens eine Verbindung besteht? hast du dir mal mysql_error() ausgeben lassen?
(Übrigens erzeugt mysql_error() keine Ausgabe sondern gibt nur etwas zurück, daher müsstest du davor noch ein echo setzten9
Nix mit echo mysql_error(); Hab auch die serververbindung, dbname username password nochmals kontrolliert :cry:
Moni
PS Ich glaub ich gebs auf.
Okey.. tut mir Leid dann bin ich langsam wirklich überfragt... tut mir Leid
Ich stells mal ins Forum als neuen Beitrag vllt weiß jemand anders ja mehr als wir zwei.
TSCHAU-TSCHAU
Moni
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.