Проблем с търсачка в бази данни

mexx

Registered
Имам създадена база от данни с обяви и искам чрез търсачка да ги извлича по "град" и по "заглавие" (на обявата). Обаче скрипта дава грешка Error, query failed.
Ако имате идея къде греша - помагайте !

<?php

$tarsene = $_GET['search'];

$host = "localhost";
$db_username = "root";
$db_password = "parola";
$db_name = "test";

$con=mysql_connect("localhost", "root", "parola")or die("Can`t connect to DB");
mysql_select_db("test", $con) or die("cannot select DB");
$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$title%''") or die('Error, query failed');

$row = mysql_numrows($sql);

echo "Results for: <b><i>$tarsene</i></b>";
echo "<br />";
while($row = mysql_fetch_row($sql))
{
echo $row['city'].'<br>'.$row['title'].'<br>';

$city=$row['city'];
$title=$row['title'];

echo "$city<br />";
echo "$title<br />";
}


?>
 

jooorooo

Registered
$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$title%''") or die('Error, query failed');

трябва да е :

$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$title%'") or die('Error, query failed');
 

mexx

Registered
Веднага се съгласявам, но стигам до половината. Извежда "Резултат за:Пловдив" (например) обаче не извежда от базата резултат ... Къде е проблема?
 

mexx

Registered
Аз искам да вади резултат по
$city=$_POST['city']
$title=$_POST['title']

Вярно съм ги изял, но ги довабих..но резултат няма пак ... Само това изпънява:

$con=mysql_connect("localhost", "root", "parola")or die("Can`t connect to DB");
mysql_select_db("test", $con) or die("cannot select DB");
$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$tarsene%' ") or die('Error, query failed');

$row = mysql_numrows($sql);

echo "Results for: <b><i>$tarsene</i></b>";
echo "<br />";
 

bafitu

Registered
хах .. :)
може би щото
mysql_fetch_row
връща цифрен масив :)
т.е.
$row['title'] и тем подобни ще са от рода на $row[0] $row[1] и тн в зависимост от полетата
ако ти е по лесно във while пиши print_r($row);
така ще разбереш коя цифра за кое се отнася.
:?:
 

jooorooo

Registered
еми вий какво задаваш и след това какво викаш.

$city=$_POST['city']
$title=$_POST['title']

(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$tarsene%' ")

направи го така:

WHERE city LIKE '%$city%' OR title LIKE '%$title%'

П.П. bafitu той бърка още в зачвката за търсене
 

bafitu

Registered
jooorooo , не
той каза , че заявката е минала извеждала му точно до цикъла където е while просто в масива няма $row['city'] или другото и връща NULL т.е. празна променлива затова и не вижда резултата.
Просто трябва с цифрички...

Ако иска да е с думи да направи така:

заменяш:

while($row = mysql_fetch_row($sql))
с

while ($row = mysql_fetch_assoc($sql))
 

mexx

Registered
Здравейте,

bafitu позна къде е ключа за палатката както се казва :) Това реши проблема - сега се извеждат само имената на градовета от базата.

А ако искам от базата да се извеждат обявите свързани с всеки град как трябва да го направя ?
 

bafitu

Registered
ами това title какво е ?
Значи в момента ако напишеш
while($row = ...) {
print_r($row);
}
и ще ти изкара всички записи от таблицата в зависмост от критерия който си дал в заявката.
с print_r ще видиш нещо от рода на :
Array ( [city] => Burgas , [title] => edi kvo si ... )
Надявам се ще се оправиш , а ако не покажи структурата на таблицата и кажи в кое поле държиш обявите ?
 

mexx

Registered
Ето това е кода ми сега:

<?php

$tarsene = $_GET['search'];
$city = $_GET['city'];
$text=$_GET['text'];

$host = "localhost";
$db_username = "root";
$db_password = "parola";
$db_name = "test";

$con=mysql_connect("localhost", "root", "parola")or die("Can`t connect to DB");
mysql_select_db("test", $con) or die("cannot select DB");
$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$title%' ") or die('Error, query failed');

$row = mysql_numrows($sql);

echo "Results for: <b><i>$tarsene</i></b>";
echo "<br />";
while($row = mysql_fetch_assoc($sql))
{
echo $row['city'].'-'.$row['text'].'<br>';

$city=$row['city'];
$text=$row['text'];


}

?>

базата ми има полета - град, заглавие и текст. Сега като пиша Бургас вади всички записи за всички градове, а аз искам само за Бургас ...
 

jooorooo

Registered
значи виж сега.
1-во. никъде не си задал в заявката да филтрира по град. само таитъл и търсене.
2-ро. малко е лошо структурирано. аз лично бих направил градовете в отделна таблица. и при въвеждане на обявата да се избира град с дпоп меню, също при търсенето да се ползва дроп меню.

П.П. вий какво си направил...

$tarsene = $_GET['search'];
$city = $_GET['city'];
$text=$_GET['text'];

(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$title%' ")

виж какво присвояваш: tarsene, city и text, а какво се мъчиш да филтрираш: tarsene или title. единствено титле съвпада със заявката.[/code]
 

mexx

Registered
$sql = mysql_query(" SELECT * FROM ads WHERE city LIKE '%$city%' OR text LIKE '%$text%'") or die('Error, query failed');

$row = mysql_numrows($sql);

echo "Намерени резултати за: <b><i>$tarsene</i></b>";
echo "<br />";
while($row = mysql_fetch_assoc($sql))
{
echo $row['city'].'-'.$row['text'].';'.'<br>';

$city=$row['city'];
$text=$row['text'];

Е хубу де как до го направя този филтър да вади обявите закачени за определен град? ... сега ми вади всички градове със обявите, отнасящи се за тях ...
Наистина вече се бъгнах и аз :)
 

jooorooo

Registered
Код:
$tarsene = $_GET['search']; 
$city = $_GET['city']; 
$text=$_GET['text']; 

(" SELECT * FROM ads WHERE city LIKE '%$city%' OR title LIKE '%$tarsene%' OR text LIKE '%$text%' ")

Ако ми дадеш структура на ДБ и кажеш по какви критерии искаш да търси ще ти кажа как точно да бъде.
 

mexx

Registered
ами имам 2 бази - users & ads - съответно в първата влизат регистрираните юзери а във втората влизат обявите които публикуват:

DROP TABLE IF EXISTS users;

CREATE TABLE users (
userid int NOT NULL auto_increment primary key,
username varchar (30) NOT NULL default '',
password varchar (32) NOT NULL default '',
email varchar (255) NOT NULL default ''
);

*****

DROP TABLE IF EXISTS ads;

CREATE TABLE ads(
adid int NOT NULL auto_increment primary key,
city varchar (15) NOT NULL default '',
title varchar (100) NOT NULL default '',
text varchar (600) NOT NULL default ''
);

***кода за извличане е познат - 100 пъти го пуснам докато си опитвате да ми помогнете :)
** искам от seach формата като пишат Бургас да вади всички обяви за Бургас само, а не както сега - вади всички градове и обяви ..
** знам че трябва да оправя база ADS - да сложа foreign key - но като го сложих нещо спече и затова го махнах - явно не съм го направил правилно .. имам нужда някой да ми покаже веднъж как става хавата
**
 

jooorooo

Registered
до тук добре, а формата за търсене какво представлява? даи и неиния код, само на формата :) да вида какви полета има
 

mexx

Registered
лудница :)

<form name="input" method="GET" action="search.php">
<table cellpadding="0" cellspacing="0" width="300px" >
<tr>
<input type="text" name="search" size="30">
<input type="submit" value="Search">
</tr>
</table>
</form>
 

jooorooo

Registered
Код:
$tarsene = $_GET['search']; 


(" SELECT * FROM ads WHERE city LIKE '%$tarsene%' OR title LIKE '%$tarsene%' OR text LIKE '%$tarsene%' ")

ето това е. не е най-доброто, но според структурата на ДБ толкова.
 

mexx

Registered
jorooooo златен си брато :?:
знам, ти ми каза - но като начало е нещо пак :)

Много си пекан, да знайш :?:
 

mexx

Registered
абе jorooo да не ставам много нагъл, само информативно питам - с лошо структурираната ми база данни мога ли да извеждам данни с дроп меню ?
 

Горе