Autor Zpráva
davidmyska
Profil
dobrý den,
mám například tuto tabulku:

|..nazev.|...url........|
|..text1..|..odkaz1..|
|..text2..|..odkaz2..|
|..text3..|..odkaz3..|
|..test1..|..odkaz4..|
|..test2..|..odkaz5..|
|..test3..|..odkaz6..|

a já bych potřeboval vyhledávání v DB tak že jako klíčová slova by se použil první sloupec např.: když do INPUTu napíšu slovo "text" tak mi to do DIVu vypíše řádek 1 - 3 a to v podobě:

text1<br>
<a href="odkaz1">odkaz1</a><hr>
text2<br>
atd.

už jsem se díval všude kde mě napadlo ale to co by se mi hodilo jsem nenašel
předem díky za odpověď
HajekJirka
Profil
davidmyska:
To co hledáš se jmenuje LIKE
davidmyska
Profil
sestavil jsem tento kód ale pořád mi to nejede hlásí mi to "Fatal error: Call to undefined function prepare() in ***** on line 12"
<?php
ob_start();  
session_start();
echo "<form action=\"search.php\" method=\"post\">
  <input type=\"hidden\" name=\"hled_sent\" value=\"\"/>
  <input type=\"text\" id=\"hled\" name=\"hled_text\" style=\"width: 500px;\"/>
  <input type=\"submit\" name=\"hled_send\" value=\"Hledej\"/>
</form>";             
  if(isset($_POST['hled_sent'])){     
    $hled_text=$_POST['hled_text'];   
      require "db.php";   
prepare("SELECT `nazev`, `url` FROM `odkazy` WHERE nazev = '$hled_text'");
$stmt->bind_param('s', $nazev);
$stmt->execute();
$stmt->bind_result($nazev, $url, $id);
while ($stmt->fetch())
{
  echo $nazev . "<br><a href=\"" . $url . "\">" . $url . "</a><hr>";
}
$stmt->close();  
  }
  else{
  header ("location: index.php?alert5");
  }
}
ob_end_flush();
?>
můžete mi prosím najít chybu díky mě už nic nenapadá
jenikkozak
Profil
davidmyska:
sestavil jsem tento kód ale pořád mi to nejede hlásí mi to "Fatal error: Call to undefined function prepare() in ***** on line 12"
můžete mi prosím najít chybu díky mě už nic nenapadá
Taky mě nic nenapadá. Zkus se obrátit na americké velvyslanectví.
Nebuď líný a zkus si třeba přečíst tu chybovou hlášku.
davidmyska
Profil
já jsem si ji přečetl na tom řádku a okolí jsem zkusil vše co mě napadlo nic nefungovalo
Han
Profil
Voláš neexistujúcu funkciu, tak trošku porozmýšľaj..
davidmyska
Profil
kód v řádcích 12 - 20 jsem našel na internetu
nevíte tedy někdo co místo toho?
předem díky
panther
Profil
davidmyska:
a funkci prepare máš definovanou kde? Ta tam nebyla nikde?
Tori
Profil
davidmyska:
Nemá to být $stmt->prepare? (Vypadá to jako tohle: http://www.php.net/manual/en/mysqli-stmt.prepare.php)
davidmyska
Profil
pomozte mi prosím já už opravdu nevím co stím


Tori:
ani to od tebe nefunguje
Tori
Profil
A od jaké třídy teda je ta instance v $stmt (ať víme o jakou DB vrstvu jde)? A máte tu instanci vytvořenou v db.php?
(Jinak mi taky přijde divné používat vůbec metodu bind_param, když přislušnou hodnotu už máte napevno zadanou v SQL dotazu, bez escapování. Asi se bude trochu prát proměnná $nazev z řádku 13 s tou od řádku 15 dál, do které se (předpokládám) mají referencí ukládat hodnoty z DB. A taky v dotazu žádáte data ze 2 sloupců DB, ale v bind_result očekáváte třetí sloupec.)
davidmyska
Profil
píši sem znovu celý kód
search.php:
<?php
ob_start();  
session_start();
echo "<form action=\"search.php\" method=\"post\">
  <input type=\"hidden\" name=\"hled_sent\" value=\"\"/>
  <input type=\"text\" id=\"hled\" name=\"hled_text\" style=\"width: 500px;\"/>
  <input type=\"submit\" name=\"hled_send\" value=\"Hledej\"/>
</form>";             
  if(isset($_POST['hled_sent'])){     
    $hled_text=$_POST['hled_text'];   
      require "db.php"; 
$stmt->prepare("SELECT `nazev`, `url` FROM `odkazy` WHERE `nazev` = '$hled_text'");
$stmt->bind_param('s', $jmeno);
$stmt->execute();
$stmt->bind_result($nazev, $url);
while ($stmt->fetch())
{
  echo $nazev . "<br><a href=\"" . $url . "\">" . $url . "</a><hr>";
$stmt->close();
}
  }
  else{
  header ("location: index.php?alert5");
  }
ob_end_flush();
?>

db.php:
<?php
 $spojeni = mysql_connect("server_db","už.j._db","heslo_db" ) or die ('<b>Critical error!</b><br>Nepodarilo se pripojit k databazi!');
  mysql_select_db("jmeno_db", $spojeni) or die ('Spatne zadana databaze v db.php');
  mysql_query("SET character_set_client=utf8");
  mysql_query("SET character_set_connection=utf8");
  mysql_query("SET character_set_results=utf8");
?>

ještě na úvodní stránce je stejný formulář jako v search.php z něj přijde první dotaz

db.php jsem nijak neměnil
Tori
Profil
davidmyska:
Myslím si, že $stmt opravdu měla být instance MySQLi_STMT. Pokud ji chcete používat, koukněte se na třídu MySQLi (konstruktor a stmt-init, a na třídu MySQLi_STMT).

Anebo můžete zůstat u funkcí mysql_*, pak by vám stačilo kouknout na první příklad u mysql_fetch_assoc, pro více informací např. seriál na linuxsoftu.
davidmyska
Profil
použil jsem to mysql fetch assoc funguje to ale pouze na přesné fráze a já bych chtěl aby to dokázalo hledat nejen přesné fráze ale i podobné a obsahující jen část obsahu buňky
př.: když zadám např.: "pes" tak mi to vypíše "pes + odkaz1" ale i "velký pes + odkaz2" je to vlastně popsané i v prvním příspěvku
zde je můj kód:
<?php
ob_start();  
session_start();
echo "<form action=\"search.php\" method=\"post\">
  <input type=\"hidden\" name=\"hled_sent\" value=\"\"/>
  <input type=\"text\" id=\"hled\" name=\"hled_text\" style=\"width: 500px;\"/>
  <input type=\"submit\" name=\"hled_send\" value=\"Hledej\"/>
</form>";             
  if(isset($_POST['hled_sent'])){     
   $conn = mysql_connect("localhost","root","heslo");
if (!$conn) {
    echo "Nelze se připojit k DB:" . mysql_error();
    exit;
}  
if (!mysql_select_db("databáze")) {
    echo "Nelze se připojit k DB:" . mysql_error();
    exit;
}
$sql = "SELECT nazev, url FROM odkazy WHERE  nazev = '$hled_text'";
$result = mysql_query($sql);
if (!$result) {
    echo "Nelze úspěšně spustit dotaz ( $ sql ) z DB:" . mysql_error();
    exit;
}
if (mysql_num_rows($result) == 0) {
    echo "Žádný výsledek nenalezen.";
    exit;
}
while ($row = mysql_fetch_assoc($result)) {
    echo $row["nazev"] . "<br><a href=\"http://" . $row["url"] . "/\">" . $row["url"] . "</a><hr>";
}
mysql_free_result($result);}
  else{
  header ("location: index.php?alert5");
  }
ob_end_flush();
?>
Tori
Profil
davidmyska:
je to vlastně popsané i v prvním příspěvku
A hned ve druhém máte i odpověď.
davidmyska
Profil
už jsem na to přišel vše mi funguje jak má

díky

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: