PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Suchergebnis durch Auswahl von Dropdowon1 und Dropdowon2 anzeigen (http://www.selfphp.de/forum/showthread.php?t=9600)

shinbo-san 25.01.2005 09:39:05

Suchergebnis durch Auswahl von Dropdowon1 und Dropdowon2 anzeigen
 
Ich, Neuling, habe entweder nach den Falschen Kriterien gesucht oder nix gescheites zu meinem Problem gefunden.

Ich bin schon seit Tagen dran herauszufinden wie ich eine Suchfunktion mit 2 oder mehr dropdown Feldern dessen Daten aus einer SQL DB kommen zu realisieren. Dabei sollte er mir nur Daten suchen die aus Dropdowon1 und Dropdowon2 ausgewählt, mit Go Button die anfrage sendet und auf der Seite anzeigen soll.

Ich habe auch mal daran gedacht durch die Auswahl der Dropdown Felder dynamisch den SQL String zu generieren aber da mache ich wohl was falsch.

Eine einfache Suchfunktion mit einem Input Feld und Go Button bekomme ich hin.
Kann mir jemand einen Tipp oder ein Tutorial gegeben währe super.

c4 25.01.2005 09:42:16

Versuch's mal mit mehr Infos. Zeig z.B. Code.

Was hast Du denn für Suchbegriffe genutzt??
--> http://www.google.de/search?q=mysql+...+abfrage+-html

shinbo-san 25.01.2005 09:50:41

Das ist der Code eines Tutorial den ich umgebaut habe:

PHP-Code:

<?php require_once('Connections/RecordstorePHP.php'); ?>
<?php
mysql_select_db
($database_RecordstorePHP$RecordstorePHP);



$query_Search "SELECT * FROM album, artist WHERE album.AlbumName LIKE '%$colname_Search%' AND artist.ArtistStyle LIKE '%$colname_Search%'";
$Search mysql_query($query_Search$RecordstorePHP) or die(mysql_error());
$row_Search mysql_fetch_assoc($Search);
$totalRows_Search mysql_num_rows($Search);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>

<body>
<form action="catalog.php?search2=true" method="get" name="form1" id="form1">
  <select name="searchcatalog" id="searchcatalog">
    <option value="">Style</option>
    <?php
do {  
?>
    <option value="<?php echo $row_Search['ArtistStyle']?>"><?php echo $row_Search['ArtistStyle']?></option>
    <?php
} while ($row_Search mysql_fetch_assoc($Search));
  
$rows mysql_num_rows($Search);
  if(
$rows 0) {
      
mysql_data_seek($Search0);
      
$row_Search mysql_fetch_assoc($Search);
  }
?>
  </select>  
  <select name="searchcatalog" id="searchcatalog">
    <option value="">Album Name</option>
    <?php
do {  
?>
    <option value="<?php echo $row_Search['AlbumName']?>"><?php echo $row_Search['AlbumName']?></option>
    <?php
} while ($row_Search mysql_fetch_assoc($Search));
  
$rows mysql_num_rows($Search);
  if(
$rows 0) {
      
mysql_data_seek($Search0);
      
$row_Search mysql_fetch_assoc($Search);
  }
  
$colname_Search "1";
if (isset(
$HTTP_GET_VARS['searchcatalog'])) {
$colname_Search = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['searchcatalog']
addslashes($HTTP_GET_VARS['searchcatalog']);
}
?>
  </select>
  <input type="submit" name="Submit" value="Search">
</form>


</body>
</html>
<?php
mysql_free_result
($Search);
?>


c4 25.01.2005 10:03:33

Du hast da ein wenig die Reihenfolge verhauen. Das "if (isset($HTTP_GET_VARS['searchcatalog'])) muss an den Anfang der Datei. Am Ende ist es sinnlos.

$query_search wird auch beim ersten Aufruf der Seite gesetzt, aber da gibt es $colname_Search und $colname_Search noch gar nicht. Mit in das if (isset()) packen.
Zudem glaube ich nicht ganz an denn Sinn der Abfrage. Warum muss das Gesuchte im Namen des Albums UND im Bandnamen auftauchen??

Ändere das erstmal funktionstüchtig ab und dann schauen wir weiter.

shinbo-san 25.01.2005 11:17:13

Habe es mahl so versucht aber das geht nicht wirklich

Mein stand jetzt:
PHP-Code:

<?php require_once('Connections/RecordstorePHP.php'); ?>
<?php
mysql_select_db
($database_RecordstorePHP$RecordstorePHP);
$query_Search "SELECT * FROM album, artist WHERE album.AlbumName LIKE '%$colname_Search%' AND artist.ArtistStyle LIKE '%$colname_Search%'";
$Search mysql_query($query_Search$RecordstorePHP) or die(mysql_error());
$row_Search mysql_fetch_assoc($Search);
$totalRows_Search mysql_num_rows($Search);


$colname_Search "1";
if (isset(
$HTTP_GET_VARS['searchcatalog'])) {
$colname_Search = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['searchcatalog']
addslashes($HTTP_GET_VARS['searchcatalog']);
}


?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
….. usw usw.

so sucht er mir aber entweder wert aus dropdown1 oder aus dropdown2

setze ich den
PHP-Code:

$query_Search "SELECT * FROM album, artist WHERE album.AlbumName LIKE '%$colname_Search%' AND artist.ArtistStyle LIKE '%$colname_Search%'"

in die if Schleife dann bekomme ich die Ausgabe: "qery is Empty"

setzte ich den Kompletten block also:
PHP-Code:

mysql_select_db($database_RecordstorePHP$RecordstorePHP);
$query_Search "SELECT * FROM album, artist WHERE album.AlbumName LIKE '%$colname_Search%' AND artist.ArtistStyle LIKE '%$colname_Search%'";
$Search mysql_query($query_Search$RecordstorePHP) or die(mysql_error());
$row_Search mysql_fetch_assoc($Search);
$totalRows_Search mysql_num_rows($Search); 

in die Schleife sind meine Pulldown Felder leer.

Ich weiß das die Abfrage die dort gemacht wird nicht sehr sinnvoll ist. War nur zu faul es mit sinnvollem Inhalt zu füllen. Es geht mir jetzt nur darum wenn ich z.B. BandXYZ auf Syle Rock Prüfe und es wahr ist, soll einfach eine Ausgabe erfolgen.

c4 25.01.2005 14:05:18

Also ich habe mir mal den zu erst geposteten Code angeschaut und 'angepasst'.

Was ich nicht verstehe: die Abfrage wird mit Werten aus einem Formular gefüllt, welches aus der gleichen Abfrage gefüllt wird. Das ist so ein Henne-Ei-Problem.

Und warum haben die beiden <select>-Felder den gleichen Namen? Nach dem Abschicken wird bei Dir nur der Wert des letzten Feldes genommen. Nimm also unterschiedliche Namen.
Auch ist es nicht gut, wenn Du bei value="" den Wert des Feldes aus der Tabelle einträgst. Besser ist da die ID des Wertes (die es ja hoffentlich gibt)!

Haben die Tabellen album und artist voneinander abhängige Felder (Stichwort Fremdschlüssel)?

Du hast hier also einiges verwurschtelt.

Mal ein Versuch von mir:
PHP-Code:

<?php
//Meldungen von PHP anzeigen
error_reporting(E_ALL);

require_once(
'Connections/RecordstorePHP.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>

<body>

<?php
// DB waehlen
mysql_select_db($database_RecordstorePHP$RecordstorePHP);

// Query anfangen
$query_Search 'SELECT * FROM album, artist WHERE ';

// Wenn style gewaehlt, dann in Array $temp packen
if (!empty($_GET['style'])) {
    
$style = (get_magic_quotes_gpc()) ? $_GET['style'] : addslashes($_GET['style']);
    
$temp[]="album.AlbumName LIKE '%$style%';";
}
// Wenn albumname gewaehlt, dann in Array $temp packen
if (!empty($_GET['albumname'])) {
    
$style = (get_magic_quotes_gpc()) ? $_GET['albumname'] : addslashes($_GET['albumname']);
    
$temp[]="album.AlbumName LIKE '%$albumname%'";
}

// Wenn was im Array ist, dann...
if (isset($temp)) {
    
// Array zusammenfuegen und ' AND ' dazwischenpacken
    
$Search mysql_query($query_Search.join(' AND '$temp), $RecordstorePHP) or die(mysql_error());
    
$rows mysql_num_rows($Search);

    
// Ausgabe der gefundenen Datensaetze    
    
if ($rows 0) {
        while (
$row_Search mysql_fetch_assoc($Search)) {
            echo 
$row_Search['irgendsoeinfeldhalt'];
        }
    }
}
?>

<form action="catalog.php?search2=true" method="get">
  <select name="style">
    <option value="">Style</option>
<?php
// Alle Styles auslesen und ausgeben
$Search mysql_query('SELECT ArtistStyle FROM album ORDER BY ArtistStyle ASC'$RecordstorePHP) or die(mysql_error());
while (
$row_Search mysql_fetch_assoc($Search)) {
    echo 
"    <option value='{$row_Search['ArtistStyle']}'>{$row_Search['ArtistStyle']}</option>n";
}
?>
  </select>

  <select name="albumname">
    <option value="">Album Name</option>
<?php
// Alle Albennamen auslesen und ausgeben
$Search mysql_query('SELECT AlbumName FROM artist ORDER BY AlbumName ASC'$RecordstorePHP) or die(mysql_error());
while (
$row_Search mysql_fetch_assoc($Search)) {
    echo 
"    <option value='{$row_Search['AlbumName']}'>{$row_Search['AlbumName']}</option>n";
}
?>
  </select>
  <input type="submit" name="Submit" value="Search">
</form>

</body>
</html>


shinbo-san 25.01.2005 18:18:54

Habe was gebraucht um den Skript zum laufen zu bringen. Dabei habe ich es auch einwenig verändert und erweitert. Was aber schon bei der unveränderten Version, nachdem ich die einträge geändert hatte, nicht passierte, war eine Ausgabe. Genauso wie bei dem jetzigem Code.

Ich habe in der Tabelle "album" eine "AlbumID" und bei der Tabelle "artist" eine "ArtistID" Wenn ich diese aber in den Value bereich der jeweiligen dropdown setzte sieht es aber dann so aus: "test6.php?style=& albumname=&Submit=Search"
Lasse ich es wie gehabt habe ich dann den Inhalt stehen.

Ich habe es mal versucht den Query_Search so zu bauen:
PHP-Code:

 $query_Search 'SELECT * FROM album, artist WHERE album.AlbumName LIKE '%$style%' AND album.AlbumName LIKE '%$albumname%' AND album.AlbumID = artist.ArtistID '

Ich bekomme da keine Fehlermeldung somit hoffe ich dass es richtig ist


Wenn ich da auch noch ne Ausgabe die auch noch richtig ist wäre es eigentlich perfekt.

PHP-Code:

<?php
//Meldungen von PHP anzeigen
error_reporting(E_ALL);
require_once(
'Connections/RecordstorePHP.php');
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Unbenanntes Dokument</title>
</head>

<body>

<?php
// DB waehlen
mysql_select_db($database_RecordstorePHP$RecordstorePHP);

// Query anfangen
$query_Search 'SELECT * FROM album, artist WHERE ';

// Wenn style gewaehlt, dann in Array $temp packen
if (!empty($_GET['style'])) {
    
$style = (get_magic_quotes_gpc()) ? $_GET['style'] : addslashes($_GET['style']);
    
$temp[]="album.AlbumName LIKE '%$style%'";
}
// Wenn albumname gewaehlt, dann in Array $temp packen
if (!empty($_GET['albumname'])) {
    
$style = (get_magic_quotes_gpc()) ? $_GET['albumname'] : addslashes($_GET['albumname']);
    
$temp[]="album.AlbumName LIKE '%$albumname%' AND album.AlbumID = artist.ArtistID";
}


// Wenn was im Array ist, dann...
/*
if (isset($temp)) {
    // Array zusammenfuegen und ' AND ' dazwischenpacken
    $Search = mysql_query($query_Search.join(' AND ', $temp), $RecordstorePHP) or die(mysql_error());
    $row_Search = mysql_fetch_assoc($Search);
    $totalRows_Search = mysql_num_rows($Search); 
    }
    */
?>

<form action="test6.php?search=true" method="get">
  <select name="style">
    <option value="">Style</option>
<?php
// Alle Styles auslesen und ausgeben
$Search mysql_query('SELECT ArtistStyle FROM artist WHERE artist.ArtistID ORDER BY ArtistStyle ASC'$RecordstorePHP) or die(mysql_error());
while (
$row_Search mysql_fetch_assoc($Search)) {
   echo 
"<option value='{$row_Search['ArtistStyle']}'>{$row_Search['ArtistStyle']}</option>n";
}
 
?>
  </select>

  <select name="albumname">
    <option value="">Album Name</option>
<?php
// Alle Albennamen auslesen und ausgeben
$Search mysql_query('SELECT AlbumName FROM album WHERE album.AlbumID ORDER BY AlbumName ASC'$RecordstorePHP) or die(mysql_error());
while (
$row_Search mysql_fetch_assoc($Search)) {
    echo 
"<option value='{$row_Search['AlbumName']}'>{$row_Search['AlbumName']}</option>n";
}
?>
  </select>
  <input type="submit" name="Submit" value="Search">
</form>


<?php if (isset($temp)) { 

$Search mysql_query($query_Search.join(' AND '$temp), $RecordstorePHP) or die(mysql_error());
    
$row_Search mysql_fetch_assoc($Search);
    
$totalRows_Search mysql_num_rows($Search); 



?>
            <?php if ($totalRows_Search == 0) { ?>
            No albums match your search. Try looking for something else. 
        <?php } else { ?>
            <table width="100%" border="0" cellpadding="2">
                <tr> 
                  <td>&nbsp;</td>
                  <td><strong>Album</strong></td>
                  <td><strong>Artist</strong></td>
                  <td><strong>Style</strong></td>
                </tr>
                <?php do { ?>
                  <tr> 
                  <td><img src="<?php echo $row_Search['AlbumCoverThumbnailURL']; ?>"></td>
                  <td><a href="albumdetail.php?AlbumID=<?php echo $row_Search['AlbumID']; ?>">
                  <?php echo $row_Search['AlbumName']; ?></a></td>
                  <td><?php echo $row_Search['ArtistGroupName']; ?></td>
                  <td><?php echo $row_Search['ArtistStyle']; ?></td>
                </tr>
                <?php } while ($row_Search mysql_fetch_assoc($Search)); ?>
            </table>
            <?php ?>
<?php 
?>    

</body>
</html>


c4 26.01.2005 09:14:22

So wie der Code dort steht gibt er nichts aus? Nicht einmal Fehlermeldungen (auch im Quelltext im Browser nachschauen!)?

Lass Dir mal an mehreren Stellen alle Variablen ausgeben und vergleiche, ob die Ausgabe den Erwartungen entspricht.

Ist totalRows_Search am Ende auch größer 0?

shinbo-san 26.01.2005 09:38:18

"totalRows_Search" ist gleich 0 genauso wie "rows_Search". Keine Ahnung wieso. Keine Fehlermeldung.

Auch wenn die Auswahl so getroffen wurde das da eigentlich ein Eintrag gefunden werden müsste. Habe ich eigendlich die beiden Tabellen richtig miteinander verknüpft? Ev. findet er deswegen nichts oder hänge ich in der
PHP-Code:

 if ($totalRows_Search == 0

fesst.

Mit meiner eingebauten If Schleife erzählt er mir bei jeder Auswahl: "No albums match your search. Try looking for something else."

c4 26.01.2005 09:59:14

Es gibt keine if-Schleifen!!

Wenn Dein Query nix findet, dann wird das schon so stimmen.

Du hast doch sicher ein phpMyAdmin zur Verfügung stehen, richtig? Bastel Dir dort mal in aller Ruhe einen Query mit Beispielwerten zusammen, der am Ende anzeigt, was Du erwartet hast.
Dann machst Du mit Deinem Skript weiter.

Hatte Dich mal was gefragt: "Haben die Tabellen album und artist voneinander abhängige Felder (Stichwort Fremdschlüssel)?" Wie schaut's damit aus?


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:15:35 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.