| 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: 18 let
|
|||
0