2015-10-25 74 views
0

我試圖能夠將代理列表粘貼到文本文件中,並且能夠將行狀態更新爲1,如果粘貼的代理位於數據庫中。我得到了它的工作即時通訊使用爆炸分離列表,並從那裏使用查詢函數foreach它。問題是它不更新。它只適用於最後一個代理。PHP - Foreach SQL查詢

查詢功能:

function Connect($host = false,$username = false,$password = false,$dbname = false) { 

    //Try execute the PHP with no errors; 
    try { 

     //Create a PDO Session; 
     $con = new PDO("mysql:host=$host;dbname=$dbname", $username, $password); 

     //Session Attributes; 
     $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    } 

    //Catch all PDOException errors; 
    catch (PDOException $e) { 

     //Make the PDO session false; 
     $con = false; 

    } 

    //If no errors happened Make the PDO session true; 
    return $con; 

} 

//Create a new function named query; 
function query($sql = false,$dbname = false,$bind = false,$obj = false) { 

    //Prepare The SQL Query; 
    $query = Connect('localhost','xx','xx',$dbname)->prepare($sql); 

    $res = true; 

    //Execute Binded Query; 
    try { $query->execute($bind); $res = true; } 

    catch (PDOException $e) { 

     $res = false; 

    } 

    //If no errors happened Make $row true; 
    return $res; 

} 

和PHP:

<?php 

//Define if Error Logging will be turned on (true) or off (false); 
$errorlogging = true; 
$obstart = false; 
$adminonly = false; 

//Set the default Timezone to UK/Ireland; 
date_default_timezone_set('Europe/London'); 

//Globalized functionality needed on all pages; 
require('common/requisites.php'); 

//Include The Database Connection; 
require('common/db.php'); 

if(!empty($_POST['proxies'])) { 

    $proxyinput = $_POST['proxies']; 

    $proxies = explode("\n",$proxyinput); 

    foreach($proxies as $proxy) { 
     query('UPDATE proxies SET status = 1 WHERE :proxy = proxy','unfed_tools',array(':proxy'=>$proxy)); 
     echo "Updated: ".$proxy."\n\r"; 
    } 

} 

?> 

<form action="" method="post"> 
    <textarea name="proxies" style="height: 300px; width: 300px;"></textarea> 
    <button type="submit">Click</button> 
</form> 
+0

',代理=:proxy' –

+0

@u_mulder不知道我怎麼錯過了,但它仍然只是工作的最後一個代理。 –

+0

循環是否執行多次/你會得到多個「更新:」消息? – trincot

回答

0

你肯定行尾不\r\n?您可能需要執行explode("\r\n",$proxyinput);這可以解釋爲什麼它只適用於最後一個代理。

例如: 實例代理文件

proxy1\r\n 
proxy2\r\n 
proxy3\r\n 
proxy4 

你的爆炸給你:

array("proxy1\r","proxy2\r","proxy3\r","proxy4") 

所以,你的搜索只找到proxy4

編輯:

要考慮用戶的煩人,您可以:

explode("\n",str_replace("\r\n","\n",$proxyinput)); 

你不應該擔心行尾以往任何時候都\ n \ r ... AFAIK。

我注意到你評論說你正在使用Notepad ++。你可以用它來「顯示所有字符」 enter image description here

+0

是的,這就是我想唯一的問題是我怎麼知道用戶輸入哪一個?我甚至不知道哪一個。 –

+0

\ r \ n似乎工作正常。但是如果有人輸入一個可以說是\ n還是\ n \ r的列表呢? –

+0

@JohnButler \ r \ n是Windows的標準(如果這是一個虛假陳述,我希望能糾正)。它意味着\ carriageReturn \ lineFeed btw。你可能會遇到一個只有\ n的文件,但我不認爲你會看到\ n \ r,除非有人直接編輯文件 – Terminus