Имам странен проблем с preg_match
- MaLa_NocHe
- Потребител
- Posts: 839
- Joined: Tue Aug 04, 2009 11:26 am
- Location: Русе
Имам странен проблем с preg_match
Здравейте колеги, имам доста странен проблем с един код който преди време съм го използвал и знам че работи, но нещо му има явно.. та ето го кода:
[php]
$getID = $_GET['id'];
$slq = mysql_query("SELECT * FROM mp3cat_song WHERE id='$getID'") or die (mysql_error());
$row = mysql_fetch_assoc($slq);
$result22 = mysql_query("SELECT * FROM mp3cat_catsmusic") or die (mysql_error());
echo '<table><tr></tr>';
while($roww=mysql_fetch_array($result22))
{
$id = $roww['id'];
$kategorianame = $roww['kategoria'];
$poleto = (preg_match("#,$roww[id],#", $row['kategoria'])) ? "checked" : "";[/php]
Проблема е че не маркирва чекед на чекбоксовете които са избрани от полето в базата данни на песните.
[php]
$getID = $_GET['id'];
$slq = mysql_query("SELECT * FROM mp3cat_song WHERE id='$getID'") or die (mysql_error());
$row = mysql_fetch_assoc($slq);
$result22 = mysql_query("SELECT * FROM mp3cat_catsmusic") or die (mysql_error());
echo '<table><tr></tr>';
while($roww=mysql_fetch_array($result22))
{
$id = $roww['id'];
$kategorianame = $roww['kategoria'];
$poleto = (preg_match("#,$roww[id],#", $row['kategoria'])) ? "checked" : "";[/php]
Проблема е че не маркирва чекед на чекбоксовете които са избрани от полето в базата данни на песните.
Този регулярен израз ще отчете само стойност, която е между 2 други стойности. Трябва да провериш за първа, последна и единствена стойност. Според мен по-лесно ще бъде така:
Иначе с регулярен израз ще бъде нещо такова: "/^".$roww[id]."$|^".$roww[id].",|,".$roww[id]."$|,".$roww[id].",/"$getID = $_GET['id'];
$slq = mysql_query("SELECT * FROM mp3cat_song WHERE id='$getID'") or die (mysql_error());
$row = mysql_fetch_assoc($slq);
$kategorii = explode(",",$row['kategoria']);
$result22 = mysql_query("SELECT * FROM mp3cat_catsmusic") or die (mysql_error());
echo '<table><tr></tr>';
while($roww=mysql_fetch_array($result22))
{
$id = $roww['id'];
$kategorianame = $roww['kategoria'];
$poleto = (in_array($roww[id], $kategorii)) ? "checked" : "";
- anonimen
- Web-tourist
- Posts: 1607
- Joined: Mon Jun 11, 2012 6:07 pm
- Location: Parse error: unexpected "}" in /home/index.php on line 26
Хмм.. не мислите ли, че усложнявате нещата малко?
това:
става така:
[php]$poleto = strpos($row['kategoria'], $roww['id']) ? 'checked' : '';[/php]
Няма нужда от никакви масиви, explode-та, regexp и т.н.
Само един strpos.
това:
Code: Select all
$poleto = (preg_match("#,$roww[id],#", $row['kategoria'])) ? "checked" : "";
[php]$poleto = strpos($row['kategoria'], $roww['id']) ? 'checked' : '';[/php]
Няма нужда от никакви масиви, explode-та, regexp и т.н.
Само един strpos.
@anonimen:
Представи си ситуация, в която имаш категории 1,2,3, ... ,9,10,11,12,13
При търсене за 1 ще даде съвпадение на 1,10,11,12,13, така че трябва да има разделител и всеки елемент да се разглежда по отделно. Иначе относно усложняването - цялата идея да се записват множество стойности в 1 поле противоречи на теорията на релационните БД. Правилния начин за създаване на релация много към много е да се направи допълнителна таблица, която да свързва всеки запис със съответстващите му категории.
Представи си ситуация, в която имаш категории 1,2,3, ... ,9,10,11,12,13
При търсене за 1 ще даде съвпадение на 1,10,11,12,13, така че трябва да има разделител и всеки елемент да се разглежда по отделно. Иначе относно усложняването - цялата идея да се записват множество стойности в 1 поле противоречи на теорията на релационните БД. Правилния начин за създаване на релация много към много е да се направи допълнителна таблица, която да свързва всеки запис със съответстващите му категории.
- MaLa_NocHe
- Потребител
- Posts: 839
- Joined: Tue Aug 04, 2009 11:26 am
- Location: Русе
raiden wrote:Този регулярен израз ще отчете само стойност, която е между 2 други стойности. Трябва да провериш за първа, последна и единствена стойност. Според мен по-лесно ще бъде така:Иначе с регулярен израз ще бъде нещо такова: "/^".$roww[id]."$|^".$roww[id].",|,".$roww[id]."$|,".$roww[id].",/"$getID = $_GET['id'];
$slq = mysql_query("SELECT * FROM mp3cat_song WHERE id='$getID'") or die (mysql_error());
$row = mysql_fetch_assoc($slq);
$kategorii = explode(",",$row['kategoria']);
$result22 = mysql_query("SELECT * FROM mp3cat_catsmusic") or die (mysql_error());
echo '<table><tr></tr>';
while($roww=mysql_fetch_array($result22))
{
$id = $roww['id'];
$kategorianame = $roww['kategoria'];
$poleto = (in_array($roww[id], $kategorii)) ? "checked" : "";
Колега много благодаря, твоето решение помогна за проблема
