Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 18:36 Der er 15 kommentarer og
1 løsning

PHP: Finde tekst i databasen og oversæt

Hej. Jeg prøver at lave noget til en ven (en tagwall bot).
Jeg vil lave det sådan at admin har mulighed for at tilføje nye tekster til botten, så hvis en skriver "hej" skal den udskrive "Hej med dig"

Jeg har nu prøvet (for første gang) at bruge "LIKE", men nu ved jeg jo ikke lige hvordan man gør.

Men håber i kan forstå mig og sige hvad jeg gør forkert her:

// BOT
$bot = mysql_query("Select find, oversaet FROM bottalk LIKE find = '$besked'");
$udtrakBot = mysql_fetch_array($bot);

if(stristr($besked,"$udtrakBot[tekst]")) { // kigger efter tekst
$bot = "$udtrakBot[oversaet]"; // oversætter
$botNavn = "$udtrakBot[navn]"; // bottens navn
} else {
$bot = "$besked";
$botNavn = "$navn";
}

CREATE TABLE `bottalk` (
  `id` int(4) NOT NULL auto_increment,
  `find` varchar(200) NOT NULL default '',
  `oversaet` varchar(200) NOT NULL default '',
  `botnavn` varchar(200) NOT NULL default 'JegErEnBot',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `bottalk`
--

INSERT INTO `bottalk` VALUES (1, 'DJ', 'anders', 'JegErEnBot');
-- tabel:
Avatar billede nielle Nybegynder
05. september 2005 - 18:46 #1
Din SQL skal sandsynligvis se sådan her ud:

$bot = mysql_query("SELECT oversaet FROM bottalk WHERE find LIKE '%" . $besked . "%'");

- men resten af dit script passer ikke rigtigt sammen med hvad du ellers har i din tabel. F.eks. kræver dette:

$botNavn = "$udtrakBot[navn]";

- at du har et felt i tabellen som hedder ”navn”.

PS: Den linje have set sådan her ud:

$botNavn = $udtrakBot["navn"];
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:00 #2
Kan du ikke lige få det til og matche?


<?php
if ($_GET['skriv'] == "besked"){

$dato = date("d-m/Y");
$kl = date("H:i:s");
$tidspunkt = "".$dato." ".$kl."";
$ip = $_SERVER["REMOTE_ADDR"];
$navn = $_POST['navn'];
$besked = $_POST['besked'];

// BOT
$bot = mysql_query("SELECT oversaet, navn FROM bottalk WHERE find LIKE '%" . $besked . "%'");
$udtrakBot = mysql_fetch_array($bot);

if(stristr($besked,"$udtrakBot[tekst]")) {
$bot = "$udtrakBot[med]";
$botNavn = $udtrakBot["navn"];
} else {
$bot = "$besked";
$botNavn = "$navn";
}
print "<script>location.href='?message=Du-har-skrevet';</script>";
mysql_query("INSERT INTO beskeder SET tidspunkt = '$tidspunkt', navn = '$botNavn', besked = '$bot', ip = '$ip'");
}
?>
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:15 #3
Er du der?
Avatar billede nielle Nybegynder
05. september 2005 - 20:36 #4
Nej, det kan ikke matche - når du ikke har et felt i din tabel som hedder 'navn' så giver det stadig ikke mening at skrive:

$botNavn = $udtrakBot["navn"];
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:36 #5
Jamen, så
$botNavn = $udtrakBot["botnavn"]; -- så kan du vel
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:38 #6
Har nu

<?php
if ($_GET['skriv'] == "besked"){

$dato = date("d-m/Y");
$kl = date("H:i:s");
$tidspunkt = "".$dato." ".$kl."";
$ip = $_SERVER["REMOTE_ADDR"];
$navn = $_POST['navn'];
$besked = $_POST['besked'];


$bot = mysql_query("SELECT oversaet,botnavn FROM bottalk WHERE find LIKE '%" . $besked . "%'");
$udtrakBot = mysql_fetch_array($bot);

if(stristr($besked,"$udtrakBot[tekst]")) {
$bot = "$udtrakBot[oversaet]";
$botNavn = $udtrakBot["botnavn"];
} else {
$bot = "$besked";
$botNavn = "$navn";
}
print "<script>location.href='?message=Du-har-skrevet';</script>";
mysql_query("INSERT INTO beskeder SET tidspunkt = '$tidspunkt', navn = '$botNavn', besked = '$bot', ip = '$ip'");
}
?>
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:39 #7
Mener.
if(stristr($besked,"$udtrakBot[find]")) {
Avatar billede nielle Nybegynder
05. september 2005 - 20:39 #8
Du må nok hellere forklare hvad det egentligt er du ønsker at gøre med din kode - jeg kan desværre ikke lige gætte det?
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:42 #9
Hvis nu man fx. skriver:
Hej med dig.

Så skal den tjekke om ordet er i tabellen "bottalk" med den sætning (eller hvis beskeden indholder "hej med dig")

hvis "Hej med dig." er i tabellen "bottalk" i kolonnen "find" så skal den udskrive til tabellen "beskeder" med navnet "$botnavn" og "besked" som "oversaet" fra tabellen "bottalk", hehe, forstår du?
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 20:43 #10
CREATE TABLE `bottalk` (
  `id` int(4) NOT NULL auto_increment,
  `find` varchar(200) NOT NULL default '',
  `oversaet` varchar(200) NOT NULL default '',
  `botnavn` varchar(200) NOT NULL default 'bot',
  UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Dumping data for table `bottalk`
--

INSERT INTO `bottalk` VALUES (1, 'DJ', 'anders', 'bot');
       

-- Så kan du se jeg har "FIND" hvor den skal finde teksten "DJ"  hvis den finder "DJ" så skal den udskrive til tabellen "beskeder" med navnet "$botNavn" og teksten "$row[oversaet]"
Avatar billede nielle Nybegynder
05. september 2005 - 20:47 #11
... og hvad så hvis den ikke finder "DJ"? Hvad skal der så ske?
Avatar billede 1nz4n3 Nybegynder
05. september 2005 - 21:00 #12
altså hvis den finder DJ skal den udskrive 2 gange til databasen, først det botten skal besvarer også den opringelige tekst.

Hvis den ikke finder teksten "DJ" skal den bare indsætte teksten som man skrev, uden botten skal svarer
Avatar billede nielle Nybegynder
05. september 2005 - 21:20 #13
Vi skal altså starte med noget i denne stil:

<?php
if ($_GET['skriv'] == "besked")
{
    $dato = date("d-m/Y");
    $kl = date("H:i:s");
    $tidspunkt = $dato . " " . $kl;

    $ip = $_SERVER["REMOTE_ADDR"];
    $navn = $_POST["navn"];
    $besked = $_POST["besked"];

    $sql = "SELECT oversaet FROM bottalk WHERE find LIKE '%" . $besked . "%'";
    $result = mysql_query($sql) or die(mysql_error());
    if (mysql_num_rows($result) >= 1)
    {
        // Den fandt en oversættelse.
    }
    else
    {
        // Den fandt ikke en oversættelse
    }
}
?>

- og så skal der puttes noget kode ind i de to tuborg-parenteser i if-else'en.
Avatar billede 1nz4n3 Nybegynder
07. september 2005 - 13:54 #14
Virker altså ikke. Beklager.
Avatar billede nielle Nybegynder
07. september 2005 - 17:16 #15
Vi var jo heller ikke færdige endnu - det jeg skitserede var blot det overordnede skelet til løsningen; Selvfølgelig laver en if-else ikke noget hvis der ikke er nogen kode inde i nogen af {}-blokkene.

Jeg ventede egentlig bare på et eller andet form for nik fra dig før at vi gik videre.
Avatar billede gil-galad Nybegynder
07. september 2005 - 17:18 #16
hehe :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester