Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!news2.arglkargh.de!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail From: Arno Welzel Newsgroups: comp.lang.php Subject: Re: Regarding split text and match from data base Date: Wed, 27 Nov 2013 12:29:05 +0100 Lines: 113 Message-ID: <5295D781.8090403@arnowelzel.de> References: <676203c7-7d21-4513-92d5-7a9111c2eaa6@googlegroups.com> <2ca0dc82-85a2-4e57-b6b8-ada747640289@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: individual.net 6twH6eo6dOFwzd/i/pR/lwrX+oacm3F7ZBLoC8xZ4JdigGuSld Cancel-Lock: sha1:FWPA5VgjT0vIKXniRPbthvDybkU= User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Thunderbird/24.1.1 In-Reply-To: Xref: csiph.com comp.lang.php:11996 Am 27.11.2013 06:22, schrieb jalaf28@gmail.com: > here is the Code.. > > > > $out=shell_exec("arp -a"); > > $ex=explode(" ",$out); > > $j=21; > $k=32; > > $ln=@mysql_connect("localhost","root",""); > > if(!$ln) > { > die("Could not Connect to The Server"); > } > > mysql_select_db("mysql") or die("Could Not Connect with database"); > > $rs=mysql_query("select * from mac_add"); > > > > while($rr=mysql_fetch_array($rs)) > { > $rsr=mysql_query("select * from mac_add where mac_id= '$ex[$k]'"); > while( $res=mysql_fetch_array($rsr)) > { > > echo "" . htmlspecialchars($ex[$j]) . "" . htmlspecialchars($res[0]) . " " . htmlspecialchars($res[1]) . "" ; > > } > > $j +=21; > $k +=21; > > } This makes no sense - you first select ALL records which you then don't use at all. You also assume that every 21th character a new output line of arp begins - an very insecure assumption and even more worse you loop through the number of records in your mac_add table - so you assume there are never more output lines in arp -a than records in your database. Therefore if arp will output 15 lines and your table only has 10 records you would always miss 5 lines - since the loop only handles the 10 records. If you want to make sure you get a result for every output line from "arp -a" you should split the lines of the output and loop through that and not the database records. This is just a quick & dirty hack and may contain typos - but you may get the idea: "; // Execute "arp -a" with the output lines in the $output array // and the return code of the arp command in $returncode exec("arp -a", $output, $returncode); // TODO: Check $returncode and handle errors // Loop through all output lines from the arp command foreach($output as $line) { // TODO: Check, if $line contains an IP/Mac address at all $elements = explode(" ", $line); // Build query to look up the entry for a given MAC address $query = "select * from mac_add where mac_id='". mysql_real_escape_string($elements[32])."'"; // Execute query $recordset = mysql_query($query); // Fetch result and output it if there is one if($record = mysql_fetch_array($recordset)) { echo "" . "" . htmlspecialchars($elements[21]) . "" . "" . htmlspecialchars($record[0]) . "" . "" . htmlspecialchars($record[1]) . "" . ""; } } echo ""; mysql_close(); ?> -- Arno Welzel http://arnowelzel.de http://de-rec-fahrrad.de