• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Обработка Массива

seoman2

Green Team
17.02.2010
504
1
BIT
46
Есть массив в $sql = mysql_query("SELECT * FROM `user` WHERE `username` ... лалала.
Вопрос, как циклом пройтись по результатам массива, чтобы изменить все строки в массиве, нужно там обрезать строки и записать обратно в БД
цикл
while ($row = mysql_fetch_array($sql))
пытаюсь что то со строкой сделать
$row = stripos(str($row),'символы обрезки');

в общем посоветуйте, как резать строку, как записывать обратно в БД результат.
 
I

ikot

Есть массив в $sql = mysql_query("SELECT * FROM `user` WHERE `username` ... лалала.
Вопрос, как циклом пройтись по результатам массива, чтобы изменить все строки в массиве, нужно там обрезать строки и записать обратно в БД
цикл
while ($row = mysql_fetch_array($sql))
пытаюсь что то со строкой сделать
$row = stripos(str($row),'символы обрезки');

в общем посоветуйте, как резать строку, как записывать обратно в БД результат.
В результате вашего запроса и конструкции
while ($row = mysql_fetch_array($sql))

в переменной $row хранится на самом деле не строка, а целый массив строк. Ну это, конечно, в том случае, если в вашей таблице USER более одного поля(столбца). Например, если в таблице 2 поля - то в массиве $row два элемента, если 5 полей- то соответственно 5 элементов.

Поэтому ,если вы хотите обрезать строки, а затем занести изменения в базу, то
1) обращайтесь к нужной строке, как к элементу массива - $row[1], или $row[2] - смотря, что Вы хотите поменять
2) Имея ключевое поле (чаще всего - это ID), Вы можете легко произвести запрос обновления к базе, используя оператор UPDATE с использованием условия WHERE 'ID' = $row[0] (это в случае, если поле ID - первое в таблице USER).

P.S. Если Вам не удобно работать с элементами массива, то можете попробовать функцию - LIST( , , ,). И задумайтесь над тем, нужно ли Вам извлекать вообще все поля из таблицы. Может вместо * лучше через запятую укажите список изменяемых полей с ID включительно. Это может заметно понизить нагрузку на базу - и в результате повысить эффективность
 

seoman2

Green Team
17.02.2010
504
1
BIT
46
Проблему решил. Спасибо.
Другая проблема, не хочу клеватьь темы, как искать спец символы?
¦ • и просто "
$sql = mysql_query("SELECT * FROM `user` WHERE `username` LIKE '%¦%'
и потом в
$len = str_replace("символ","",$len);
вставить
 

seoman2

Green Team
17.02.2010
504
1
BIT
46
к примеру
$sql = mysql_query("SELECT * FROM `user` WHERE `username` LIKE '% & bull; %'"); - разбавил пробелами содержимое like для редактора форума
что то возвращает 0 строк, хотя есть символы такие.
И
$glas1 = array('¥'); тоже не отрабатывает.
 

seoman2

Green Team
17.02.2010
504
1
BIT
46
Эту проблему решил, есть другая:
$file_arr - массив с 5-10 именами, а в $uname - 1 имя.
for ($i = 0; $i < count ($file_arr); $i++) {
//if (strcmp($file_arr[$i],$uname)==0)
if ($file_arr[$i] == $uname)
{echo $uname." === ".$file_arr[$i]."<br><br>";}
else{echo $uname. " <<<>>>> ".$file_arr[$i] . "<br>";}
}
Не могу понять почему, но к примеру в массиве $file_arr есть Deja Vu, а сравнение не катит....
Deja Vu <<<>>>> Deja Vu
Но корректно работает только сравнение с последним эллементом массива $file_arr.


Вот к примеру $file_arr:
Amelia
Bella Donna
Вася
Deja Vu
Оля

И отображается верно только
Оля === Оля
 
I

ikot

Эту проблему решил, есть другая:
$file_arr - массив с 5-10 именами, а в $uname - 1 имя.
for ($i = 0; $i < count ($file_arr); $i++) {
//if (strcmp($file_arr[$i],$uname)==0)
if ($file_arr[$i] == $uname)
{echo $uname." === ".$file_arr[$i]."<br><br>";}
else{echo $uname. " <<<>>>> ".$file_arr[$i] . "<br>";}
}
Не могу понять почему, но к примеру в массиве $file_arr есть Deja Vu, а сравнение не катит....
Deja Vu <<<>>>> Deja Vu
Но корректно работает только сравнение с последним эллементом массива $file_arr.


Вот к примеру $file_arr:
Amelia
Bella Donna
Вася
Deja Vu
Оля

И отображается верно только
Оля === Оля

А в переменной $uname случайно не "Оля" записано? Если у Вас такой код, как Вы привели здесь на форуме, то на экран должны показаться только те элементы массива (т.е. возле них значки ===), которые равны значению переменной $uname. Судя по всему в вашем массиве разные имена, поэтому логично, что на экран показывается только одно совпадение. Если Вы предварительно в переменную положите "Вася", то на экране опять же будет только одно совпадение -- Вася === Вася .

А что Вы вообще хотите осуществить? Может, чем то поможем... :)
 
A

acorn

Не могу понять почему, но к примеру в массиве $file_arr есть Deja Vu, а сравнение не катит....
Deja Vu <<<>>>> Deja Vu
Но корректно работает только сравнение с последним эллементом массива $file_arr.
а с васей тоже не катит? :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!