2015-10-25 2 views
0

Я пытаюсь вставить список прокси в текстовый файл и иметь возможность обновить статус строк до 1, если вложенный прокси-сервер находится в базе данных. Я получил это от работы im, используя explode, чтобы отделить список, и оттуда его использовать с помощью функции запроса. Проблема в том, что он не обновляется. Он работает только с последним прокси.PHP - Foreach SQL Query

Запрос Функция:

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

'WHERE прокси =: 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

Edit:

Для учета пользователей, будучи раздражает, вы можете:

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

Вы не должны беспокоиться о окончаниях строк когда-либо \ п \ г ... AFAIK.

Я заметил, что вы отметили, что используете Notepad ++. Вы можете использовать его, чтобы «Показать все символы» enter image description here

+0

Да, это то, о чем я думал, единственная проблема заключается в том, как я могу узнать, какой пользователь вводит? Я даже не знаю, какой из них. –

+0

\ r \ n, похоже, работает нормально. Но что, если кто-то вводит список, который позволяет просто \ n или \ n \ r? –

+0

@JohnButler \ r \ n является стандартным для Windows (я буду исправлен, если это ложное утверждение, я надеюсь). Это означает \ translationReturn \ lineFeed btw. Вы можете запустить файл с помощью только \ n, но я не думаю, что вы когда-нибудь увидите \ n \ r, если кто-то прямо не редактирует файл – Terminus