Автор - авторский...
Кажется, элементарная задача... Ну ё-моё...
Есть две таблицы: существительных и прилагательных. Хочу в таблице прилагательных найти слова, образованные от существительных, в отдельном столбце добавить к ним индекс существительного.
Например:
Автор (слово в таблице сущ) – индекс 342
Авторский (слово в таблице прил) – в отдельном столбце добавляю к нему индекс существительного «автор»
Пытаюсь сделать код:
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i);
echo $k; // перебор всех слов в таблице существительных
$begin = // здесь должны быть первые буквы найденного слова
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE а%'); // вот здесь программа не видит команду: в MYSQL видит и понимает, отображает все слова на «а», в файловом менеджере не видит
// вместо а% хочу подставить переменную $begin
А дальше пойдет подстановка найденного индекса существительного
}
А proba_l это:
function proba_l($link, $t, $parametr, $parametr_ind, $usl)
{
$sql_re = "SELECT * FROM ".$t." WHERE ".$usl.";";
//echo $sql_re;
$result_re = mysqli_query($link, $sql_re);
$num_rows_re = mysqli_num_rows($result_re);
$sqls_re = mysqli_fetch_all($result_re, MYSQLI_ASSOC);
$x_re = rand(0, $num_rows_re-1);
echo $sqls_re[$x_re][$parametr];
$x_code_re = $sqls_re[$x_re][$parametr_ind];
//echo $x_code_re;
return $x_code_re;
}
Какого хрена эта дрянь не видит команду Прилагательное LIKE а%?
А может, вообще все не так делаю...
Выводить содержимое массива тоже не через echo, а другими способами, самый простой — var_dump($sqls_re). Попробуй так.
function proba_l($link, $t, $parametr, $parametr_ind, $usl)
{
$sql_re = «SELECT * FROM ».$t." WHERE ".$usl.";";
//echo $sql_re;
$result_re = mysqli_query($link, $sql_re);
$num_rows_re = mysqli_num_rows($result_re);
$sqls_re[] = mysqli_fetch_all($result_re, MYSQLI_ASSOC);
$x_re = rand(0, $num_rows_re-1);
echo $sqls_re[$x_re][$parametr];
$x_code_re = $sqls_re[$x_re][$parametr_ind];
//echo $x_code_re;
return $x_code_re;
}
У меня, кстати, рандомизация там идет, а она не нужна, а в каком месте её убрать, не знаю…
function proba_l($link, $t, $parametr, $parametr_ind, $usl)
{
$sql_re = «SELECT * FROM».$t." WHERE ".$usl.";";
//echo $sql_re;
$result_re = mysqli_query($link, $sql_re);
$num_rows_re = mysqli_num_rows($result_re);
$sqls_re[] = mysqli_fetch_all($result_re, MYSQLI_ASSOC);
$x_re = rand(0, $num_rows_re-1);
var_dump ($sqls_re[$x_re][$parametr]);
$x_code_re = $sqls_re[$x_re][$parametr_ind];
//echo $x_code_re;
return $x_code_re;
}
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE а%');
за пределы функции и добавь строчку var_dump($sqls_re);
что получится?
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i);
echo $k;
$begin = // здесь должны быть первые буквы найденного слова
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', '`Прилагательное` LIKE «а%»');
осталось понять, как вместо а% поставить переменную…
то есть это явно неверный вариант:
$begin = 'а';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', '`Прилагательное` LIKE "$begin%"');
$rest = substr(«abcdef», 0, -1);
А у меня вместо abcdef найденное слово…
Вообще, что именно ты в $begin запихнуть хотела?
чтоб программа в прилагательных искала слово, которое начинается с найденного существительного:
автор — АВТОРский
аббат — АББАТский
То есть никакого $begin не надо, а просто $k
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', ' ', 'Существительное', 'Ind_Hero_all = '.$i);
echo $k;
echo ' ';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', '`Прилагательное` LIKE «а%»');
// вместо а% $k
echo "";
}
function proba_l($link, $t, $parametr, $parametr_ind, $usl)
($link, 'Hero_all', ' ', 'Существительное', 'Ind_Hero_all = '.$i);
это я копирую для себя, чтобы видеть, что где.
echo $k; — что выводит?
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', ' ', 'Существительное', 'Ind_Hero_all = '.$i);
echo $k;
echo ' ';
$j = 'а';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
// вместо а% $k
echo "
";
}
То есть, в $sql_re = «SELECT * FROM ».$t." WHERE ".$usl.";"; у тебя получится $sql_re = «SELECT * FROM «Prilagatelnye» WHERE «Прилагательное = '.$j»;»;
Попробуй вне функции сделать проверку:
Что получится?
Стоп! А кавычки-елочки у тебя только тут выходят, надеюсь?
$j = 'а';
$sql_re = «SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.$j»;
echo $sql_re;
SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.а
$j = 'а';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
а это работает:
$j = 'а';
$sql_re = «SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.$j»;
echo $sql_re;
а что в этой функции сейчас?
function proba_l($link, $t, $parametr, $parametr_ind, $usl)
{
$sql_re = «SELECT * FROM ».$t." WHERE ".$usl.";";
//echo $sql_re;
$result_re = mysqli_query($link, $sql_re);
$num_rows_re = mysqli_num_rows($result_re);
$sqls_re = mysqli_fetch_all($result_re, MYSQLI_ASSOC);
$x_re = rand(0, $num_rows_re-1);
echo $sqls_re[$x_re][$parametr];
$x_code_re = $sqls_re[$x_re][$parametr_ind];
//echo $x_code_re;
return $x_code_re;
}
$j = 1;
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Index_pril = 1');
Так, стоп! Ты в аргумент внесла конкретное значение, а не переменную. А вот так работает?
это работает:
$j = 'а';
$sql_re = «SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.$j»;
echo $sql_re;
А это нет:
$j = 'а';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
чего не хватет второму варианту, чтобы заработать…
Тогда синтаксис будет отображаться, как у тебя в скриптах, и возможно, ошибка выявится.
Можно проверить, вызвав эхом $usl.
echo $usl; — что показывает?
строчки «проверяем этот код:» должны появиться в любом случае.
если функция не выводит их в процессе, т.е. сообщения о проверяемом коде в результате нет, то можно вывести через return.
$sql_re = «SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.$j»;
echo $sql_re;
echo '111111'. $usl;
echo '111111'. $usl;
что пишет при тех работающих данных?
Почему она срабатывает на число и не видит строку?
Почему тот же запрос работает вне функции? Не поменять ли переменную для проверки? Например, вбить «аббат».
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Index_pril = '.$j);
echo $sql_re;
Выводит — абрамский
Что вывело?
Почему оно не видит блаблаблу? Может, из-за не тех кавычек? Если прямые туда поставить, или прямые двойные, то что?
теперь так:
абрамский + + блаблабла
кавычки замени опять.
абрамский + 1 + блаблабла
абрамский + 1 + блаблабла
в первом варианте:
абрамский + 1 + блаблабла
во втором варианте:
+ 1 + блаблабла
+ а + блаблабла
$j = '1';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Index_pril = '.$j);
echo $sql_re;
echo ' + '.$j. ' + блаблабла';
выводит
+ а + блаблабла
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
echo $sql_re;
echo ' + '.$j. ' + блаблабла';
результат
+ 1 + блаблабла
1 столбец — индекс
2 столбец слово — абрамский
Добавить туда цифру 1. Иначе, что мы сейчас проверяем, справшивается?
Мне надо увидеть, как оно отреагирует на цифру в тексте.
все покажи. и запрос, и результат.
и что в строке таблицы.
$j = 1;
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Index_pril = '.$j);
echo $sql_re;
echo ‘ + ‘.$j. ‘ + блаблабла‘;
результат
абрамский1 + 1 + блаблабла
строка таблицы:
(извини пожалуйста, мне надо ложиться, иначе завтра на смену не встану. Большое спасибо за помощь, если будет возможность завтра продолжить, хорошо, если нет, и ладно… устроила я кипиш, а теперь сама же ретируюсь… но иначе завтра просто смену не выдержу...)
абрамскийr + 1 + блаблабла
Где кавычки?!
Вот это вот.
+ 1 + блаблабла
$j = ’аббат’;
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
echo $sql_re;
ничего не пишет
Для этого можно попробовать посчитать буквы в существительном (например, «автор») с помощью strlen(), загнать это значение в переменную и поставить в substr как второй аргумент (первый будет указывать на начало слова).
$j = 'а';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
echo $sql_re;
сделать
$j LIKE 'а%';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
echo $sql_re;
Так без проблем, к этому и идем, только сначала хоть бы просто с 'а' получилось!
Вот так, хотя бы
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE '.$j);
echo $sql_re;
И ничего не выдает
Я все в недоумении, почему вне функции работает, а внутри — нет?
Ленту мебиуса в коде точно не надо, и глобальных переменных тоже.
абрамскийr + 1 + блаблабла
судя по всему, искало по цифре 1
$j = 1;
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Index_pril = '.$j);
echo $sql_re;
echo ‘ + ‘.$j. ‘ + блаблабла‘;
результат
абрамскийr + 1 + блаблабла
Вот что нужно найти. И проверить перед этим, есть ли в таблице абрамскийr вместо простого абрамского.
$sql_re = «SELECT * FROM 'Prilagatelnye' WHERE 'Прилагательное = '.$j»;
echo $sql_re;
выводит
SELECT * FROM 'Прилагательные' WHERE 'Прилагательные = '.r
$j = 'а%';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE '.$j);
echo $sql_re;
Вот здесь я код дала, можешь его проверить?
dabudetsolnce.website/blogs/1560-avtor-avtorskii.html#comment_60243
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное',, 'Прилагательное = '.$j);
echo $sql_re;
echo ‘ + ‘.$j. ‘ + блаблабла‘;
дает
+ r + блаблабла
dabudetsolnce.website/blogs/1560-avtor-avtorskii.html#comment_60219
ты, к сожалению, не взяла единицу в кавычки, так что, эксперимент был напрасен. надо было именно в кавычках искать. естественно, чтобы в таблице было абрамский1 при этом.
ой, а ты там вообще по индексу искала, я на сонную голову не заметила. блииин!
А, минутку…
Только забэкапь таблицу перед этим!
и про латиницу ответь выше, пож.
dabudetsolnce.website/blogs/1560-avtor-avtorskii.html#comment_60247
вообще, проверяй сама всякий раз то, с чем маемся, без моей подсказки, хорошо? иначе дело затянется на неделю((
$j = 'r';
proba_l ($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное = '.$j);
только вместо r там существительное должно быть
И при изменении таблицы варчар на медиумтекст ничего не работает все равно не отображается ничего
Так, а я профукала момент! Если действительно запрос так отобразился, то вернись к тому моменту, пожалуйста, где он такой вышел! Как это получилось? Это интересно, правда. Потому что если он в таком виде в программе выводится, то неудивительно, то ничего не работает.
Можно для сравнения то же самое вывести с работающим запросом по индексу?
upd: тоже не сработает, путаница в кавычках.
а) Функция ищет в ячейке прилагательных, а не в индексах. То, что она по индексам правильно работает — мы поняли. Поэтому лишние попытки из-за невнимательности и ошибки очень досадны и приводят к неверным выводам в итоге. Итак, все проверки идут по условию 'Прилагательное = '.$j.
б) Мы ищем по определенному символу, который вводится в переменную $j. Поэтому если я скажу: «Давай проверим букву L, то это будет означать, что $j = 'L', а в ячейке с несчастным абрамским (всем Абрамским сейчас икается) должна присутствовать буква L на момент проверки. Потому что мы ищем эту букву в ячейке, и шерстить ячейки, если ее там нет — это лишняя трата времени и нервов.
в) Нам надо определить, как происходит поиск по типу строковых данных. Потому что 1 без кавычек — это ЧИСЛО, а '1' в кавычках — СТРОКА. И в данном случае тебе нужно искать не цифры, а набор символов строки. Поэтому если я говорю искать что-то загнав в кавычки, даже если это число, то кавычками не пренебрегай.
Пожалуйста, следуй этой инструкции, и давай начнем проверку сначала…
А поскольку у меня реально с головой не очень, тут ничего не поделать, что мне нужна предельная конкретика. в функцию (текст функции) поставить то-то. Для удобства на крайняк можно номера дать функциям, это у нас фрагмент кода №1, это №2…
Ну реально у меня с головой не все хорошо, другой бы человек может быть и понял сразу.
dabudetsolnce.website/blogs/1560-avtor-avtorskii.html#comment_60263
Поставь в начало скрипта вот такую строку:
Ошибки будут, как на ладони. У меня сейчас при значении «а» показывает:
То есть, где-то там прописывается булевое значение вместо нужного, очевидно, false, т.е. не находит строку в базе по заданному параметру. Поскольку, я просто имитировала твой скрипт, базу данных и прочее, я не поручусь, что у меня сейчас та же самая ошибка, которая возникает в твоем скрипте, и вообще, я могла сейчас напортачить. Но, по крайней мере, поиск по индексу у меня работает тоже.
А вообще, я изменила работу с массивом, поэтому не могу сказать точно, одна и та же проблема у нас, или разные. Но если ты поставишь отображение ошибок (т.е. указаную выше строку), то сможешь сама увидеть, где что не так у тебя, скопировать сообщение об ошибке и загуглить его.
Или, если угодно, по первым буквам:
Но все это будет выдавать ошибку, если запрос выйдет пустой (а это наверняка случится не раз), и это не есть гуд, даже если ошибка не будет видна. Поэтому в дальнейшем будет необходимо сделать какой-нибудь try-catch на подобные случаи.
И да, проблему создали таки кавычки.
$j = 'автор';
proba_l($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE \''.$j.'%\'');
и выводит:
авторский
авторитарный
авторитетный
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i);
echo $k;
proba_l($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE \''.$k.'%\'');
echo '';
}
абажурабажур
абазабаз
абазинабазин
абазинкаабазинка
абакаабака
аббатаббат
аббатисааббатиса
аббатствоаббатство
то есть когда просто $k = 'a'; — видит и находит, а когда $k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i); — переменную k видит и находит, но в функции с прилагательным с ней не работает.
for ($i = 1; $i < 10; $i++)
{
$k = proba_l ($link, 'Hero_all', 'Существительное', ' ', 'Ind_Hero_all = '.$i);
echo $k;
proba_l($link, 'Prilagatelnye', 'Прилагательное', 'Прилагательное', 'Прилагательное LIKE \''.$k.'%\'');
echo '';
}
абажурнедозрелый
абазпавлиний
абазинюродивый
абазинкагоряченький
абакапрогорклый
аббатнесдержанный
аббатисазагнанный
обнесенный
аббатствоунаследованный
пихает прилагательные какие попало…
И почему-то восьмая строка вообще не соответствует заданию… может, в этом весь подвох?
И кинь мне, пожалуйста, в скайп обе таблицы. Я должна сама попробовать.
Восьмой строки (точнее, индекса 8) в таблице существительных нет:
Потому оно и не находит ничего. А вот рандомайзер криво работает, наверняка, по причине того, что он в обоих случаях используется. И в поиске существительных, и в поиске прилагательных. Конечно, надо раскидать все эти детали по разным функциям. Лучше вызывать рандомайзер в тех случаях, когда это необходимо.
Конечно, оно ничего не найдет, если этого нет!
Ну а кроме того, $k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i); не выводит строку как таковую. То есть, ты видишь слово, а программа видит какой-то непонятный объект, который еще и надо переводить в строку для поиска другим методом. У меня, по крайней мере, это сейчас так.
UPD: теперь видит функцию как строку, странно.
for ($i = 1; $i < 100; $i++)
{
$k = proba_l ($link, 'Hero_all', 'Существительное', 'Существительное', 'Ind_Hero_all = '.$i);
$w = proba_l($link, 'Prilagatelnye', 'Прилагательное', ' ', 'Прилагательное LIKE \''.$k.'%\'');
echo $w;
echo '
';
}
Так что большое спасибо за наводку, что в первых десяти строках пар-то и нету… Вот очевидный косяк был, а я не вижу…