Autor | Zpráva | ||
---|---|---|---|
Pan X Profil |
#1 · Zasláno: 9. 1. 2009, 20:47:26 · Upravil/a: Pan X
Ahoj.
Chtěl bych vás poprosit, jestli by jste mi nepomohli zjednodušit MySQL dotazy aby byly pro DB co nejméně náročné. Tímto scriptem jsem si dnes toti zablokoval MySQL na serveu :( Tady je script: t.php <?php $spojeni = mysql_connect("mysql.webzdarma.cz","user","*****") or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); mysql_select_db("jobik", $spojeni) or die ('Spatne zadana databaze v db.php'); mysql_query("SET NAMES 'utf8'"); $query = MySQL_Query("SELECT * FROM `search` ORDER BY id"); echo MySQL_Error(); $Pocet = 0; while($vypis = MySQL_Fetch_Array($query)){ $adresa = $vypis['url']; $obsah = file_get_contents($adresa); $adresa = explode("\n", htmlspecialchars(file_get_contents($adresa))); for( $i = 0; $i <= count($adresa); $i++){ $adresa[$i] = mysql_real_escape_string($adresa[$i]); mysql_query('UPDATE search SET text="'.$adresa[$i].'" WHERE url="'.$vypis['url'].'"'); echo mysql_error(); } } ?> Tento script vyvolá url z DB a do tabulky uloží jeho zdroj. kód a tady je url.php <?php echo '<form method="post" action="index.php">'; echo '<input type="text" name="url" value="http://">'; echo '<input type="submit" name="odeslat" value="Přidej web">'; echo '</form>'; $url = $_POST['url']; $odeslat = $_POST['odeslat']; if(isset($odeslat)){ $adresa = $url; echo "Web ".((@file("".$adresa."")) ? "nalezen" : "nenalezen"); $obsah = file_get_contents($adresa); echo '<h1>A href</h1>'; preg_match_all('~href="([^"]+?)"~', $obsah, $kam); foreach($kam[1] as $nazev){ if(ereg("^.+[?]", $nazev)){ }else{ if(ereg("^/.+", $nazev)){ }else{ if(ereg("^/$", $nazev)){ }else{ if(ereg("^[.].+", $nazev)){ }else{ if(ereg("^java.+", $nazev)){ }else{ if(ereg("^http://.+", $nazev)){ echo $nazev.'<br><br>'; $spojeni = mysql_connect("mysql.webzdarma.cz","user","******") or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); mysql_select_db("jobik", $spojeni) or die ('Spatne zadana databaze v db.php'); mysql_query("SET NAMES 'utf8'"); $VlozData = MySQL_Query("INSERT INTO `search` VALUES('','$nazev','0','0','0','0')"); echo Mysql_error(); } } } } } } } echo '<h1>FORM</h1>'; preg_match_all('~action="([^"]+?)"~', $obsah, $kam); foreach($kam[1] as $nazev) { if(ereg("^.+[?]", $nazev)){ }else{ if(ereg("^/.+", $nazev)){ }else{ if(ereg("^/$", $nazev)){ }else{ if(ereg("^[.].+", $nazev)){ }else{ if(ereg("^java.+", $nazev)){ }else{ if(ereg("^http://.+", $nazev)){ echo $nazev.'<br><br>'; }else{ if(ereg("^www.+", $nazev)){ echo $nazev.'<br><br>'; }else{ } } } } } } } } } ?> Tady přidávám weby do DB. Prosím, potřebuji zjednodušit dotazy, aby neblokoval MySQL Předem díky Pan X |
||
Mastodont Profil |
#2 · Zasláno: 9. 1. 2009, 21:33:50
Proč "SELECT * FROM `search` ORDER BY id", když pak pracuješ jen s polem url?
"SELECT url FROM `search` ORDER BY id" Jinak na dotazech není co zjednodušit, problém budou spíš ty ereg ... |
||
Kajman_ Profil * |
Neměly by se ze search stahovat jen weby, které ještě nebyly stáhnuté?
SELECT distinct url FROM `search` where `text` is null ORDER BY id A proč se tam postupně přepisují všechny řádky, když tam zůstane jen poslední? |
||
Ni7R0 Profil |
#4 · Zasláno: 9. 1. 2009, 23:03:28 · Upravil/a: Ni7R0
Wow, nic ve zlém, ale url.php je prinejmenším kandidát na WTF code ;)
Takže pár komentářů k věcem do očí bijícím: - proč je tam foreach, když je vstup jednořádkový input text? - co mají, hergot, znamenat všechny ty podmínky? Nehledě na to, že ereg je tady jak kanón na vrabce, to samé splní strpos. A proč je to vnořené do sebe a není to v jedné podmínce jako logický součin (ev. negací)? - proč je tam celá ta obludnost dvakrát? - pokud by přece jenom ten foreach měl plnit svou funkci, stačí se připojit jednou před prací s databází, pak už jen posílat mysql_query() Nějak si nejsem schopný představit, jak to má vlastně fungovat, ale rozhodně to půjde udělat jednodušeji a čistěji. Takže místo optimalizace dotazů navrhuji optimalizaci kódu (stylem ctrl+A, delete), pokud pak budou pořád problémy, optimalizovat práci s DB. |
||
tiso Profil |
#5 · Zasláno: 10. 1. 2009, 01:29:10
Pan X - no ty koki...
Pozrel som sa na obsah while v t.php a nestačím sa diviť, radšej ani nehovorím nahlas čo to vlastne robí. Čo chceš aby to vlastne robilo? |
||
Pan X Profil |
#6 · Zasláno: 10. 1. 2009, 16:05:46
Potřebuji v url.php uložit weby na který zadaný web odkazuje od DB a v t.php potřebuji vytáhnout ten zdroj. kód z toho kódu vytáhnout jen TEXT, který je zobrazen na stránce ( tedy mezi znaky <p> a </p> , ale i když to v nich není) a ten uložit do databáze.
|
||
Joker Profil |
#7 · Zasláno: 10. 1. 2009, 16:18:11
tiso
Tak pokud se nepletu, tak ten cyklus (počet řádků souboru)-krát přepíše daný záznam v databázi a nakonec v databázi zůstane uložený poslední řádek souboru. Každopádně pokud se tam má ukládat obsah toho souboru, udělal bych na to textové políčko a uložil tam celý ten soubor najednou, proč se exploduje na řádky a potom se to ukládá po řádcích (navíc uložení každého následujícího řádku přepíše předchozí řádek)? |
||
Pan X Profil |
#8 · Zasláno: 10. 1. 2009, 17:53:10 · Upravil/a: Pan X
Už jsem opravil to url.php teď mám tento script:
<?php echo '<form method="post" action="test.php">'; echo '<input type="text" name="url" value="http://">'; echo '<input type="submit" name="odeslat" value="Přidej web">'; echo '</form>'; $url = $_POST['url']; $odeslat = $_POST['odeslat']; if(isset($odeslat)){ $spojeni = mysql_connect("mysql.webzdarma.cz","user","*******") or die ('Spatne zadane udaje (asi heslo, server nebo jmeno.) v db.php'); mysql_select_db("jobik", $spojeni) or die ('Spatne zadana databaze v db.php'); mysql_query("SET NAMES 'utf8'"); $adresa = $url; $obsah = file_get_contents($adresa); preg_match_all('~href="http://([^"]+?)"~', $obsah, $kam); foreach($kam[1] as $nazev){ echo 'http://'.$nazev.'<br><br>'; $VlozData = MySQL_Query("INSERT INTO `search` (id,url) VALUES('','$nazev')"); echo Mysql_error(); } preg_match_all("~href='http://([^']+?)'~", $obsah, $kam); foreach($kam[1] as $nazev){ echo 'http://'.$nazev.'<br><br>'; $VlozData = MySQL_Query("INSERT INTO `search` (id,url) VALUES('','$nazev')"); echo Mysql_error(); } } ?> |
||
Pan X Profil |
#9 · Zasláno: 10. 1. 2009, 18:08:49
Ale ten druhý nevím, jak zjednodušit a optimalizovat
|
||
Časová prodleva: 15 let
|
0