Autor Zpráva
Pan X
Profil
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
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
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
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
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
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
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
Ale ten druhý nevím, jak zjednodušit a optimalizovat

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: