Rena: PHP Link

Hallo Leute!

Ich bin wirklich noch ein PHP Anfänger und brauche dringend eure Hilfe! Also, es ist eine Arbeit für die Uni. Wir mussten einen Online Shop in irgendeiner Sprache anfertigen. Ich habe mich für PHP und MySQL entschieden. Der Shop ist schon fertig aber ich habe ein kleines Problem. Wie in allen Online Shops, habe ich auch eine Suchfunktion einprogrammiert. Das einzige Problem ist, dass ich den Link zu den Produkten nicht einfügen kann.

Der Code ist:

---------------------------------------------------------------------
<html>
<head>
  <title>Renazon Search Results</title>
</head>
<body>
<h1>Renazon Search Results</h1>
<?
include ('product_sc_fns.php');
  trim($searchterm);
  if (!$searchtype || !$searchterm)
  {
     echo "You have not entered search details.  Please go back and try again.";
     exit;
  }

$searchtype = addslashes($searchtype);
  $searchterm = addslashes($searchterm);

$db_link = mysql_connect(localhost, root, "");

if (!$db_link)
  {
     echo "Error: Could not connect to database.  Please try again later.";
     exit;
  }

mysql_select_db("product_sc");
  $query = "select * from products where ".$searchtype." like '%".$searchterm."%'";
  $result = mysql_query($query);

$num_results = mysql_num_rows($result);

echo "<p>Number of products found: ".$num_results."</p>";

for ($i=0; $i <$num_results; $i++)
  {
     $row = mysql_fetch_array($result);
     echo "<p><strong>".($i+1).". Name: ";
     echo stripslashes($row["prname"]);
     echo "</strong><br>Author or Brand: ";
     echo stripslashes($row["authorORbrand"]);
     echo "<br>ASIN ";
     echo stripslashes($row["code"]);
     echo "<br>Price: ";
     echo stripslashes($row["price"]);
     echo "</p>";
}

display_button("index.php", "continue-shopping", "Continue Shopping");
do_html_footer();

?>

-----------------------------------------------------------

Ich will den Link hier haben:
echo "<p><strong>".($i+1).". Name: ";
echo stripslashes($row["prname"]);

Wie geht das? Ich habe schon einiges versucht, aber nichts hat geklappt :-(
Vielen dank schon mal für eure Hilfe :-)

  1. Hi Rena,

    Ich gehe dein Script mal kurz durch, ein paar Fehler kommentierend...

    <html>

    Hier fehlt der Doctype!

    trim($searchterm);

    1. Woher kommt $searchterm? Ich vermute, du willst $_GET['searchterm'] bzw. $_POST['searchterm'] verwenden
    2. trim() gibt einen String zurück - du solltest diesen auch festhalten, sonst bringt der ganze Funktionsaufruf nichts.

    if (!$searchtype || !$searchterm)
      {
         echo "You have not entered search details.  Please go back and try again.";
         exit;
      }

    Bei der Bedingung in der If-Abfrage könnte es ein Problem geben, wenn ich z.B. nach 0 suche will!
    Weiterhin kannst du das Script doch nicht einfach abbrechen - da fehlen doch </body>, </html> und das ganze Zeug vom HTML Dokument!

    $searchtype = addslashes($searchtype);
      $searchterm = addslashes($searchterm);

    Auch hier willst du vermutlich wieder $_GET bzw. $_POST verwenden. Außerdem solltest du nicht addslashes, sondern mysql_real_escape_string() verwenden, Gründe findest du im Archiv.

    $db_link = mysql_connect(localhost, root, "");

    Sicher, dass du hier auf die Konstanten localhost und root zugreifen willst? Wenn ja, dann hast du die Konstanten nicht sinnvoll benannt, wenn nein, dann solltest du "localhost" und "root" verwenden.

    if (!$db_link)
      {
         echo "Error: Could not connect to database.  Please try again later.";
         exit;
      }

    Dies und die vorherige Zeile lassen sich kürzer zusammenfassen:

    mysql_connect("localhost", "root", "") OR die("Error: Could not connect to database. Mysql: ".mysql_error());

    Außerdem würde ich diese Zeile ganz an den Anfang des Scriptes packen (das include übrigens ebenso, vermutlich enthält die Datei ja nur Programmcode).

    mysql_select_db("product_sc");

    Hier wäre auch besser:

    mysql_select_db("product_sc") OR die(mysql_error());

    Dann bekommst du eine Fehlermeldung, wenn das nicht so klappt, wie es soll. Auch diese Zeile würde ich nach oben ins Script packen.

    $query = "select * from products where ".$searchtype." like '%".$searchterm."%'";

    Warum soll ich nicht SELECT * schreiben?

    Du siehst, an deinem Script gibt es sicherlich noch was zu machen...

    Ich will den Link hier haben:
    echo "<p><strong>".($i+1).". Name: ";
    echo stripslashes($row["prname"]);

    Also du willst einen Link ausgeben, auf eine Seite, auf der die gefundenen Inhalte vorliegen?

    Wie geht das? Ich habe schon einiges versucht, aber nichts hat geklappt :-(

    Was hast du denn bis jetzt alles versucht? Und wo sind Probleme aufgetreten, wo haben dir PHP bzw. MySQL Manual nicht weiterhelfen können?

    In welcher Spalte deiner Tabelle hast du denn den Link zur Ziel Seite drin stehen?

    Im Prinzip ist das doch nicht so schwer:

    echo '<a href="';  
    echo $row['deineSpalteMitDemLink'];  
    echo '">Seite aufrufen</a>';
    

    MfG, Dennis.

    --
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
    Wer die FAQ gelesen hat, ist klüger! ... und weiß wie man Links macht ;-)
    1. Hi Rena,

      Noch ein kleiner Hinweis:

      $query = "select * from products where ".$searchtype." like '%".$searchterm."%'";

      Diese LIKE Konstruktur ist im Verhältnis zu MATCH AGAINST langsamer und belastet den Server mehr, da MySQL hier keinen Index benutzen kann, siehe auch „Wie realisiere ich eine Volltextsuche mit MySQL”.

      MfG, Dennis.

      --
      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
      Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?