2014-02-12 6 views
0

Мне нужно разделить одну строку на несколько частей. Строка представляет собой набор уникальных имен пользователей, но я получаю три имени вместе с пробелами между ними. Мне нужно поставить некоторые «между концом одного и началом другого, чтобы я мог использовать их для целей MySQL Query.Сплит-строка в PHP

Я уже использую массивы, но на этот раз разные, потому что это поле заполнено данными из базы данных.

Если пользователи добавлены/удалены, он будет использовать массив, но если нет, он будет использовать эту строку, которую я хочу отформатировать.

У меня есть этот код в данный момент:

$Pessoas2= implode(" ", $_POST['Pessoas']); 
$Pessoas2 = str_replace(';', ' ' , $Pessoas2); 

(...) 

$to = mysqli_query($con,"SELECT Email FROM utilizadores WHERE Nome IN ($Pessoas2)"); 

while ($row = mysqli_fetch_assoc($to)){ 
    echo $row['Email']; 
    echo ";"; 

foreach ($row as $destino); 

echo $destino; 
+4

Пример ввода и вывода? –

+0

На данный момент вывод $ Pessoas2 - это Tiago Sara Luis Carlos –

+0

и как вы хотите, чтобы это было? – ImadOS

ответ

0

Не уверен, из вашего вопроса, если $_POST['Pessoas'] является строка с именами пользователей, разделенных пробелом или, если это массив.

Если это строка разделенных пробелами, то попробуйте:

$Pessoas2 = "'" . preg_replace('/ /', "','", $_POST['Pessoas'])) . "'"; 

Если это массив, то попробуйте:

$Pessoas2 = "'" . implode("','", $_POST['Pessoas'])) . "'"; 

И затем использовать $Pessoas2 в запросе так же, как ты это написал ,

+0

$ _POST ['Pessoas'] - массив. –

+0

@ Алвин Ли, я получаю «Тьягу;», «Сара», «Луис» –

+0

Решенный. Использовал этот $ Pessoas2 = "'". preg_replace ('/; /', "','", $ _POST ['Pessoas']). "'"; –

1

Используйте следующий код:

$Pessoas2 = implode("','", $_POST['Pessoas']); 
$Pessoas2 = "'".$Pessoas2."'"; 

вместо

$Pessoas2= implode(" ", $_POST['Pessoas']); 
$Pessoas2 = str_replace(';', ' ' , $Pessoas2); 
+0

Это показывает мне «Тьягу; Сара; Luis Carlos ' –

+0

Удалите эти строки '$ Pessoas2 = implode (" ", $ _POST [' Pessoas ']);' '$ Pessoas2 = str_replace ('; ',' ', $ Pessoas2);' –

+0

То же самое.Это показывает мне «Тьяго; Сара; Luis Carlos ' –

-1

шанс использовать функциональную методику! haha

$Pessoas2 = array_map(function($val) { 
    return "'{$val}'"; 
}, explode(' ', $_POST['Pessoas'])); 

$sql = "SELECT Email FROM utilizadores WHERE Nome IN (".implode(',', $Pessoas2).")"; 
+0

Уверены ли вы, что у вас нет ошибок в первых трех строках? –

+0

хорошо работает только в PHP 5.3 или выше, что вы действительно должны использовать, поскольку PHP 5.2 устарел – Populus

+0

Не проблема с PHP. Netbeans показывает ошибку. –

0

Пара вещей, которые необходимо адресовать в вашем коде. Ответьте на свой вопрос, но также укажите некоторые проблемы.

//always escape values before db insertion - see real_escape_string here 
$Pessoas2= mysqli_real_escape_string(implode("", $_POST['Pessoas'])); 
//using substr here to get rid of the trailing ',' 
//this is assuming the last name in the array has a trailing semicolon, don't use it otherwise. 
$Pessoas2 = substr(str_replace(';', "','", $Pessoas2), 0, -3); 

$to = mysqli_query($con,"SELECT Email 
         FROM utilizadores 
         WHERE Nome IN ('". $Pessoas2 ."')"); 

while ($row = mysqli_fetch_assoc($to)){ 
    echo $row['Email']; 
    echo ";"; 
    //the semicolon does not belong after the foreach here. 
    foreach ($row as $destino) 
     echo $destino; 
} 

Это должно делать то, что вы хотите, и помочь предотвратить инъекцию sql.

+0

ничего не показывает в эхо. –

+0

который эхо? вы получаете какие-либо ошибки запроса? – Bryan

+0

echo $ destino; Он должен показывать мне электронные письма пользователей. У меня нет никаких ошибок. –

Смежные вопросы