Probleme mit dem auslesen einer MySQL-DB aus mehreren Formularfeldern

h4nnes

Grünschnabel
Hallo zusammen,

ich bin gerade dabei mich in mysql reinzuarbeiten (kenne mich noch nicht allzugut damit aus) Ich habe mir eine Tabelle mit drei Spalten angelegt (ID, Name, URL) und dazu zwei Suchfenster für die ID und den Namen. Jetzt würde ich die Suche gerne so haben, dass ich entweder nach einem der beiden Sachen suchen kann, oder nach beiden, aber mein Ansatz ist nicht richtig, kann mir jemand weiterhelfen? Ich habe es so versucht:

PHP:
$ergebnis = mysql_query("SELECT * FROM test WHERE (name LIKE '$suchfeld' OR id LIKE '$id') OR (name LIKE '$suchfeld' AND id = '$id')");
Die AND anweisung alleine funktioniert, dabei nimmt gibt er wirklich nur die Spalte aus, in der beide Suchkriterien zutreffen, aber wenn ich noch meine OR mit dazunehm, dann kann ich zwar immer nach einem und auch nach beidem Suchen, aber er gibt dann auch falsche Sachen aus. Also irgendwie stimmt meine Verknüpfung nicht so richtig.

Weiß jemand weiter?

Danke

Gruß Johannes
 
Du kannst diese beiden Dinge nicht mit dem OR verknüpfen, da dann ja immer, wenn Name und ID zusammen zutreffen sollen, automatisch auch nach Einträgen gesucht wird, bei denen entweder nur der Name oder die ID zutrifft (erster Teil deiner OR-Verknüpfung). Das bedeutet, dass du die MySQL-Query mit PHP zusammenbauen musst, je nach dem, was gefordert wird:
PHP:
$query = 'SELECT * FROM test WHERE ';
if(isset($suchfeld) && isset($id) && !empty($suchfeld) && !empty($id))
{
    $query .= "'name LIKE '$suchfeld' AND id = '$id'";
}
else
{
    $query .= "name LIKE '$suchfeld' OR id LIKE '$id'";
}

$ergebnis = mysql_query($query) or die(mysql_error());

Oder kürzer:
PHP:
$query = "SELECT * FROM test WHERE 'name LIKE '$suchfeld'" . (isset($suchfeld) && isset($id) && !empty($suchfeld) && !empty($id) ? ' AND ' : ' OR ') . "id LIKE '$id'";

$ergebnis = mysql_query($query) or die(mysql_error());
 
Zuletzt bearbeitet:
irgendwas stimmt noch immer nicht :(
wenn ich jetzt einen Eintrag mache,indem ich beide Felder belege kommt folgende Meldung:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hugo' AND id = '5'' at line 1

ich poste mal meinen ganzen Code:

PHP:
<? include ("config.php") ?>
<form action="<?php $_SERVER["PHP_SELF"] ?>" method="post">
  <table width="264" height="116" border="0" align="center">
    <tr>
      <td width="65">Name:</td>
      <td width="189"><input type="text" size="25" name="suchfeld" /></td>
    </tr>
    <tr>
      <td>ID:</td>
      <td><input type="text" size="25" name="id" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="send" value="Suchen" /></td>
    </tr>
  </table>
</form>
<?
$suchfeld = "";
if( isset($HTTP_POST_VARS['suchfeld']) )
{
     $suchfeld = $HTTP_POST_VARS['suchfeld'];
}

$id = -1;
if( isset($HTTP_POST_VARS['id']) )
{
     $id = intval($HTTP_POST_VARS['id']);
}

$query = 'SELECT * FROM test WHERE ';
if(isset($suchfeld) && isset($id) && !empty($suchfeld) && !empty($id))
{
    $query .= "'name LIKE '$suchfeld' AND id = '$id'";
}
else
{
    $query .= "name LIKE '$suchfeld' OR id LIKE '$id'";
}

$ergebnis = mysql_query($query) or die(mysql_error());  

if (!$ergebnis) {
    die('Ungültige Abfrage: ' . mysql_error());
}

if(mysql_num_rows($ergebnis) != 0)
{
echo "<table>";                // Start Tabelle
while($row = mysql_fetch_array($ergebnis))
{
echo '<table width="183" height="70" border="1" align="center" cellpadding="1" cellspacing="3">';
echo  "<tr>
              <td>ID</td>
             <td>Name</td>
              <td>URL</td>
       </tr>";
echo  "<tr>
             <td>".$row["id"]."</td>
             <td>".$row["name"]."</td>
             <td>".$row["url"]."</td>             
        </tr>";
}
echo "</table>";
}
else
{
echo "<h2>Bitte Datensatz eingeben</h2>";
}

?>
 
Hi,

PHP:
$query = "SELECT * FROM test WHERE ";
if(isset($suchfeld) && isset($id) && !empty($suchfeld) && !empty($id))
{
    $query .= "name LIKE '$suchfeld' AND id = '$id'"; // hier war ein ' zuviel
}

Gruß tyg3r
 
perfekt, vielen Dank, soweit klappt es!

Wenn ich schon dabei bin und Hilfe bekomm, wie kann ich denn in php nen text direkt in nen link umwandeln? Ich habe in meiner Tabelle ne Spalte URL und in der Spalte würde ich gerne z.B. ne pdf hinterlegen (z.B. aufgabe1.pdf) und er soll dann direkt aus dem aufgabe1.pdf nen link erstellen. Wie wäre sowas realisierbar?

Danke nochmal

Gruß Johannes
 
Ich gehe mal davon aus, dass du dich beziehst auf folgenden Teil in deinem Script beziehst:
PHP:
echo "<table>";                // Start Tabelle
while($row = mysql_fetch_array($ergebnis))
{
echo '<table width="183" height="70" border="1" align="center" cellpadding="1" cellspacing="3">';
echo  "<tr>
              <td>ID</td>
             <td>Name</td>
              <td>URL</td>
       </tr>";
echo  "<tr>
             <td>".$row["id"]."</td>
             <td>".$row["name"]."</td>
             <td><a href=\"".$row["url"]."\">" . $row["url"] . "</a></td> <-- hier einfach ein a-Tag benutzen und die URL in das href-Attribut schreiben            
        </tr>";
}
echo "</table>";
 
Perfekt, ich weiß gar net wie ich dir danken kann, vielen Dank!

Wie müsste ich es mit dem a-Tag denn machen, wenn ich aus meiner Index, so auf die Datenbank bzw auf die Tabelle zugreife?

PHP:
<table width="183" height="70" border="1" align="center" cellpadding="1" cellspacing="3">

<tr>

        <td>ID</td>

        <td>Name</td>

        <td>URL</td>
    </tr>

 

<?php

//while ($adr = mysql_fetch_array($test_query)){
while ($db = mysql_fetch_array($MySQLRecordSet, MYSQL_ASSOC)) 
{
?>

    <tr>

        <td><?=$db['id']?></td>

        <td><?=$db['name']?></td>

        <td><?=$db['url']?></td>
        

    </tr>

<?php

}

?>

</table>
 
PHP:
<td><?=$db['url']?></td>
// zu
<td><a href="<?=$db['url']?>"><?=$db['url']?></a></td>
 
Super, danke! Noch ne letzte, abschließende Frage, wenn ich die Dateien (z.B. die pdf's nicht im selben Ordner hab, wie die DB, wie muss dann mein a-tag denn aussehen? Also wenn die Dateien, auf die er linken soll in einem Übergeordneten Ordner sind (z.B. soll der Ordner "url" heißen. Wie muss ich denn dann die beiden a-tags machen?

Edit: Noch was anderes, wenn ich jetzt z.B. noch nen drittes Suchfeld einbauen würde, würde es dann so mit der if...else abfrage auch klappen für die $query ?
 
Zuletzt bearbeitet:
HTML:
<a href="../<?php echo $db['url']; ?>">Übergeordneter Ordner</a>

Mit ../ kommst du in den übergeordneten Ordner.
Wenn du folgende Ordnerstruktur hast z.B.:
Code:
Ordner
    + Unterordner 1
        + Unterordner 1-2
    + Unterordner 2
Liegt jetzt deine Datei im Unterordner 1-2 kommst du z.B. mit ../../ in Ordner. Mit ../Unterordner 2 in den Unterordner 2...
 
Zurück