Avatar billede linuxchristian Nybegynder
28. december 2004 - 14:45 Der er 9 kommentarer

Søgning med PHP/MySQL

Jeg sidder med et nyhedssystem det køre fra en MySQL database. Jeg vil gerne kunne søge efter indehold i den table der hedder memoPostContents i sn_post. Har selv prøvet at kode det, men uden held pga. en fejl eller mangel et sted i koden.

Her er hele koden til index.php:
----------------------------------------------------------------
<?php require_once('Connections/myconn.php'); ?>
<?php require_once('Connections/myconn.php'); ?>
<?php
mysql_select_db($database_myconn, $myconn);
$query_rsCat = "SELECT * FROM sn_category ORDER BY intCatSort ASC";
$rsCat = mysql_query($query_rsCat, $myconn) or die(mysql_error());
$row_rsCat = mysql_fetch_assoc($rsCat);
$totalRows_rsCat = mysql_num_rows($rsCat);
$maxRows_rsPosts = 8;
$pageNum_rsPosts = 0;
if (isset($_GET['pageNum_rsPosts'])) {
  $pageNum_rsPosts = $_GET['pageNum_rsPosts'];
}
$startRow_rsPosts = $pageNum_rsPosts * $maxRows_rsPosts;

mysql_select_db($database_myconn, $myconn);
$query_rsPosts = "SELECT intPostID, txtPostTitle, intPostBy, memoPostContents, DATE_FORMAT(dtePostDate, '%d/%m/%Y, %H:%i') AS dtePostDate FROM sn_post ORDER BY dtePostDate DESC";
$query_limit_rsPosts = sprintf("%s LIMIT %d, %d", $query_rsPosts, $startRow_rsPosts, $maxRows_rsPosts);
$rsPosts = mysql_query($query_limit_rsPosts, $myconn) or die(mysql_error());
$row_rsPosts = mysql_fetch_assoc($rsPosts);

if (isset($_GET['totalRows_rsPosts'])) {
  $totalRows_rsPosts = $_GET['totalRows_rsPosts'];
} else {
  $all_rsPosts = mysql_query($query_rsPosts);
  $totalRows_rsPosts = mysql_num_rows($all_rsPosts);
}
$totalPages_rsPosts = ceil($totalRows_rsPosts/$maxRows_rsPosts)-1;

$SearchResult_rsSearchResult = "%";
if (isset($_GET['SearchResult'])) {
  $SearchResult_rsSearchResult = (get_magic_quotes_gpc()) ? $_GET['SearchResult'] : addslashes($_GET['SearchResult']);
}
mysql_select_db($database_myconn, $myconn);
$query_rsSearchResult = sprintf("SELECT * FROM sn_post WHERE memoPostContents LIKE '%%%s%%' ORDER BY dtePostDate DESC", $SearchResult_rsSearchResult);
$rsSearchResult = mysql_query($query_rsSearchResult, $myconn) or die(mysql_error());
$row_rsSearchResult = mysql_fetch_assoc($rsSearchResult);
$totalRows_rsSearchResult = mysql_num_rows($rsSearchResult);
?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Velkommen til Stargatefan.dk</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="/style.css" rel="stylesheet" type="text/css">
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0" align="center" width="720">
  <tr>
    <th scope="row" class="info">http://stargatefan.dk copyright Christian Brædstrup - admin@stargatefan.dk</th>
  </tr>
</table>
<table width="720" height="100%" border="0" align="center" cellpadding="0" cellspacing="0" id="Post_total">
  <td>
  <h1>Stargatefan.dk</h1>
  <div class="top_navbar"><a href="../index.php">Home</a> | <a href="/arkiv/index.php">Arkiv</a> | <a href="/galleri/index.php">Galleri</a> | <a href="downloads/index.php">Downloads</a> | <a href="/links/index.php">links</a> </div>
  </div>
  <form action="index.php" method="get" name="frmSearch" id="frmSearch">
    <input type="text" name="textfield">
    <input type="submit" name="Submit" value="Søg">
  </form>
</td>
  <tr>
    <td scope="row" valign="top" height="100%" id="Post_total" align="center">
      <?php do { ?>
      <?php if ($totalRows_rsPosts > 0) { // Show if recordset not empty ?>
      <?php } // Show if recordset not empty ?>
      <table border="0" cellspacing="0" cellpadding="0" id="post">
        <tr>
          <td width="700" class="headline" scope="row"><?php echo $row_rsPosts['dtePostDate']; ?>&nbsp;&nbsp;<?php echo $row_rsPosts['txtPostTitle']; ?></td>
        </tr>
        <tr>
          <td id="table_text" scope="row" width="700">
          <p class="postText"><?php echo $row_rsPosts['memoPostContents']; ?></p>
        <p class="postBy">skrevet af: <?php echo $row_rsPosts['intPostBy']; ?> </p>
        </td>
        </tr>
      </table>
      &nbsp;
<?php } while ($row_rsPosts = mysql_fetch_assoc($rsPosts)); ?>
    </td>
  </tr>
</table>
<?php if ($totalRows_rsPosts == 0) { // Show if recordset empty ?>
<table width="720" height="45" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td scope="row" id="Post_total">Der er desv&aelig;rre ingen nyheder i databasen.</td>
  </tr>
</table>
<?php } // Show if recordset empty ?>
<p>&nbsp;</p>
</body>
</html>
<?php
mysql_free_result($rsCat);

mysql_free_result($rsPosts);

mysql_free_result($rsSearchResult);
?>
Avatar billede jakobdo Ekspert
28. december 2004 - 22:16 #1
Får du nogle fejl når du kører det?
Har du evt en side hvor jeg kan se hvad dit script outputter nu?
Avatar billede linuxchristian Nybegynder
28. december 2004 - 22:18 #2
Jeg har desværre ingen side til at stå og køre på nettet, men der kommer ikke nogle fejl beskeder...den kommer bare med alle posts i databasen når man søger.
Avatar billede jakobdo Ekspert
28. december 2004 - 22:22 #3
Altså lidt kort, ville jeg lave søgningen sådan her:

SELECT memoPostContents FROM sn_post WHERE memoPostContents LIKE '%" . $FindDet . "%'

Så returner den de nyheder, hvor det du søger er i!
Avatar billede linuxchristian Nybegynder
28. december 2004 - 22:24 #4
men hvordan skal jeg så skrive $FindDet delen?
Avatar billede jakobdo Ekspert
28. december 2004 - 22:32 #5
Fra en form!

<form action=" <? echo $_SERVER['PHP_SELF']; ?> " method="POST">
<input type="text" name="search">
<input type="submit" name="sSearch" value="Søg Nyhed">
</form>

Og så laver du din kode, så den bruger $_POST['search'] til at søge efter, altså istedet for $FindDet
Avatar billede linuxchristian Nybegynder
28. december 2004 - 22:36 #6
Nu har jeg gjordt sådan:

"SELECT * FROM sn_post WHERE memoPostContents LIKE '%".$_POST['search']."%' ORDER BY dtePostDate DESC", $colname_rsSearchResult);

Men den virker stadig ikke
Avatar billede linuxchristian Nybegynder
28. december 2004 - 22:38 #7
Den laver søgningen godt nok:
http://127.0.0.1/index.php?search=Stargate

men kommer stadig med alle posts i db'en
Avatar billede linuxchristian Nybegynder
28. december 2004 - 23:19 #8
Nu har jeg fået det til at virke, efter meget roderi...men det funker nu.
Avatar billede jakobdo Ekspert
29. december 2004 - 08:18 #9
Ok!
Og til info.
IP = 127.0.0.1 = localhost!
Så hvis jeg klikker linket, vil jeg prøve at åbne siden på min egen computer.
Hvis jeg skulle have en mulighed for at åbne din side, så skal du finde din ip på siden: www.myip.dk
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