1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Datenbank durchsuchen und Ergebnis ausgeben

Dieses Thema im Forum "PHP" wurde erstellt von Spiro, 16. Dezember 2016.

  1. Spiro

    Spiro Mitglied

    Hallo Leute,

    irgendwie sehe ich heute den Wald vor lauter Bäumen nicht mehr.

    Ich habe eine Artikeldatenbank mit folgender Struktur: (Die Kollation der Tabelle ist utf8_unicode_ci)
    Spalte Typ Null Standard
    1. nummer int(10) Nein
    2. kategorie text Nein
    3. unterkategorie text Nein
    4. menge text Nein
    5. artikelnummer text Nein
    6. artikel text Nein
    7. preis text Nein
    8. kurzartikel text Nein
    9. sort varchar(5) Nein
    10. deleted_at timestamp Ja NULL
    Mein Problem ist folgendes:
    Da die Artikeldatenbank schon ziemlich umfangreich ist, möchte ich die Möglichkeit haben in der Datenbank gezielt nach Einträgen zu suchen.
    Leider gibt die Suche ALLE Einträge aus, auch solche die mit dem Suchbegriff nichts zu tun haben. Mein Suchbegriff wird übergeben (ich lasse den z. Zt. als echo ausgeben).

    Vielleicht könnt ihr mir einen Hinweis geben wo mein Fehler liegt.

    Meine Anzeige-PHP besteht aus 2 Dateien, die Erste nimmt den Kontakt zur Datenbank auf und die Zweite erzeugt nur die Ausgabe und gibt die Möglichkeit den Artikel zu ändern.
    artikel.php
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <?php
    3. //$anzahl = $_GET["anzahl"];
    4. require ("config/config.php");
    5. //
    6. ?>
    7. <html><head>
    8. <meta content="text/html; charset=utf-8" http-equiv="content-type"><title>Gravurdaten</title>
    9. <link href="config/style.css" type="text/css" rel="stylesheet" />
    10. <script src="http://admin.deine-gravur.de/rechnungen/function2.js"></script>
    11. </head>
    12. <BODY>
    13. <table><tr><td>
    14. <form action="artikelneu.php" method="post">
    15. <button type="submit">Neuer Artikel</button>
    16. </form></td><td>
    17. <form name="artikel" method="post" action="">
    18. <select name="kategorie" onchange="this.form.submit();">
    19. <option value="">bitte wählen</option>
    20. <?php
    21. $Connect = mysqli_connect($server, $user, $pass);
    22. @mysqli_select_db($Connect, "$dbase");
    23. $result =  mysqli_query($Connect, "SELECT DISTINCT kategorie FROM $tabelle1a ORDER BY kategorie ASC");
    24. while($row = mysqli_fetch_row($result))
    25.     echo "<option value=\"$row[0]\">$row[0]</option>";
    26. mysqli_free_result( $result );
    27. print_r($_POST);
    28. $kategorie=$_POST['kategorie'];  
    29. ?>
    30. </select></form>
    31. </td><td>
    32. <form name="artikel" method="post" action="">
    33. <select name="kategorie" onchange="this.form.submit();">
    34. <option value="">bitte wählen</option>
    35. <?php
    36. $Connect = mysqli_connect($server, $user, $pass);
    37. @mysqli_select_db($Connect, "$dbase");
    38. $result =  mysqli_query($Connect, "SELECT DISTINCT unterkategorie FROM $tabelle1a ORDER BY unterkategorie ASC");
    39. while($row = mysqli_fetch_row($result))
    40.     echo "<option value=\"$row[0]\">$row[0]</option>";
    41. mysqli_free_result( $result );
    42. print_r($_POST);
    43. $kategorie=$_POST['kategorie'];  
    44. ?>
    45. </select></form>
    46. </td><td>
    47.     <form action="suche.php" method='GET'>
    48.     <input style="border-color: #666666;" type="text" id="such" name="such" value="" size="30">
    49.     &nbsp;<button class="knopf" type="submit">Go</button>
    50.     </form>
    51. </td></tr></table>
    52. <?php
    53. //Auflistung Artikel gesamt
    54. echo "
    55. <table style=\"text-align: left; width: 100%;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">
    56. <tbody><tr>
    57. <td class=\"artkat\">Kategorie</td>
    58. <td class=\"artukat\">Unterkategorie</td>
    59. <td class=\"artmenge\">Menge</td>
    60. <td class=\"artartnr\">Art.nr</td>
    61. <td class=\"arttextart\">Artikel</td>
    62. <td class=\"artpreis\">Preis</td>
    63. <td class=\"artpreis\">Sort</td>
    64. <td class=\"artkuart\">Kurzbeschreibung</td>
    65. <td>Go</td>
    66. </tr>";
    67. $beitraege_pro_seite=15;
    68. $pdo = new PDO($server2, $user, $pass);
    69. $show_form = true;
    70. $error = null;
    71. if(!is_null($error)) { //Ein Fehler ist aufgetreten
    72.     echo $error;
    73. }
    74. /***********************
    75. * Ausgabe der Einträge
    76. ***********************/
    77. //Ermittelt die Anzahl der Beiträge
    78. $statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM $tabelle1a WHERE deleted_at IS NULL");
    79. $statement->execute();
    80. $row = $statement->fetch();
    81. // Anzahl der gesamteinträge
    82. $anzahl_eintrage = $row['anzahl'];
    83. //Berechne alles notwendige für die Blätterfunktion
    84. $seite = 1;
    85. if(isset($_GET['seite'])) {
    86.     $seite = intval($_GET['seite']);
    87. }
    88. $start = ($seite-1)*$beitraege_pro_seite;
    89. //Abfrage der Datenbank und Ausgabe der Daten
    90. $statement = $pdo->prepare("SELECT * FROM $tabelle1a WHERE deleted_at IS NULL ORDER BY unterkategorie, sort ASC LIMIT :start, :limit");
    91. $statement->bindParam(':start', $start, PDO::PARAM_INT);
    92. $statement->bindParam(':limit', $beitraege_pro_seite, PDO::PARAM_INT);
    93. $statement->execute();
    94. while($row = $statement->fetch()) {
    95.     $nummer = htmlentities($row['nummer']);
    96.     $kategorie = htmlentities($row['kategorie']);          
    97.     $unterkategorie = htmlentities($row['unterkategorie']);          
    98.     $menge = htmlentities($row['menge']);          
    99.     $artikelnummer = htmlentities($row['artikelnummer']);          
    100.     $artikel = htmlentities($row['artikel']);          
    101.     $preis = htmlentities($row['preis']);      
    102.     $sort = htmlentities($row['sort']);      
    103.     $kurzartikel = htmlentities($row['kurzartikel']);          
    104.     include ("artikel_anzeige.php");  
    105. }
    106. echo "</tbody></table>";
    107. //Berechne die Anzahl der Seiten:
    108. $anzahl_seiten = ceil($anzahl_eintrage / floatval($beitraege_pro_seite));
    109. // Blättern
    110. echo "<div id=\"navigation\" align=\"center\">";
    111. echo '&nbsp;<a href="?seite='.$anzahl_eintrage.'" >Erste Seite</a>';
    112. $seite = $_GET['seite'] +1;
    113.         echo '&nbsp;<a href="?seite='.$seite.'" ><<&nbsp;</a>';  
    114. echo "&nbsp;$seite";      
    115. $seite = $_GET['seite'] -1;
    116.         echo '&nbsp;<a href="?seite='.$seite.'" >&nbsp;>></a>';    
    117. echo '&nbsp;<a href="?seite=1" >Letzte Seite </a></div>';
    118. ?>
    artikel_anzeige.php
    PHP:
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    2. <html><head>
    3. <meta content="text/html; charset=utf-8" http-equiv="content-type"><title>Gravurdaten</title>
    4. <link href="config/style.css" type="text/css" rel="stylesheet" />
    5. <script src="http://admin.deine-gravur.de/rechnungen/function2.js"></script>
    6. </head>
    7. <BODY>
    8. <form action="updateartikel.php" method="post">
    9. <?php
    10. echo "<tr><input name=\"nummer\" type=\"hidden\" value=\"$nummer\">
    11. <td class=\"artkat\" style=\"vertical-align: top;\"><input name=\"kategorie\" size=\"30\" value=\"$kategorie\"></td>
    12. <td class=\"artkuat\" style=\"vertical-align: top;\"><textarea name=\"unterkategorie\" cols=\"25\" rows=\"2\">$unterkategorie</textarea></td>
    13. <td class=\"artmenge\" style=\"vertical-align: top;\"><input name=\"menge\" size=\"3\" value=\"$menge\" onkeydown=\"replaceLetters(this)\"></td>
    14. <td class=\"artartnr\" style=\"vertical-align: top;\"><input name=\"artikelnummer\" size=\"8\" value=\"$artikelnummer\"></td>
    15. <td class=\"arttextart\" style=\"vertical-align: top;\"><textarea name=\"artikel\" cols=\"30\" rows=\"2\">$artikel</textarea></td>
    16. <td class=\"artpreis\" style=\"vertical-align: top;\"><input name=\"preis\" size=\"10\" value=\"$preis\" onkeydown=\"replaceLetters(this)\"></td>
    17. <td class=\"artpreis\" style=\"vertical-align: top;\"><input name=\"sort\" size=\"5\" value=\"$sort\"></td>
    18. <td class=\"artkuart\" style=\"vertical-align: top;\"><textarea name=\"kurzartikel\" cols=\"30\" rows=\"2\">$kurzartikel</textarea></td>
    19. <td class=\"artknopf\"><button class=\"knopf\" type=\"submit\" name=\"action\" value=\"1\" align=\"center\">Ändern</button></td>
    20. </tr>
    21. ";
    22. ?>
    23. </form>
    24. </body></html>
    Nun meine suche.php
    PHP:
    1. <?php
    2. $such = $_GET["such"];
    3. //Prüfung ob Suchbegriff durchkommt
    4. echo "$such";
    5. require ("config/config.php");
    6. $beitraege_pro_seite=12;
    7. $pdo = new PDO($server2, $user, $pass);
    8. $show_form = true;
    9. $error = null;
    10. if(!is_null($error)) { //Ein Fehler ist aufgetreten
    11.     echo $error;
    12. }
    13. /***********************
    14. * Ausgabe der Einträge
    15. ***********************/
    16. //Ermittelt die Anzahl der Beiträge
    17. $statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM $tabelle1a WHERE deleted_at IS NULL");
    18. $statement->execute();
    19. $row = $statement->fetch();
    20. // Anzahl der gesamteinträge
    21. $anzahl_eintrage = $row['anzahl'];
    22. //Berechne alles notwendige für die Blätterfunktion
    23. $seite = 1;
    24. if(isset($_GET['seite'])) {
    25.     $seite = intval($_GET['seite']);
    26. }
    27. $start = ($seite-1)*$beitraege_pro_seite;
    28. //Abfrage der Datenbank und Ausgabe der Daten
    29. $statement = $pdo->prepare("SELECT * FROM $tabelle1a WHERE
    30. kategorie         LIKE '%$such%' OR
    31. unterkategorie     LIKE '%$such%' OR
    32. artikelnummer     LIKE '%$such%' OR
    33. artikel         LIKE '%$such%' OR
    34. kurzartikel     LIKE '%$such%'
    35.  
    36. ORDER BY nummer DESC LIMIT :start, :limit");
    37. $statement->bindParam(':start', $start, PDO::PARAM_INT);
    38. $statement->bindParam(':limit', $beitraege_pro_seite, PDO::PARAM_INT);
    39. $statement->execute();
    40. while($row = $statement->fetch()) {
    41.     $nummer = htmlentities($row['nummer']);
    42.     $kategorie = htmlentities($row['kategorie']);          
    43.     $unterkategorie = htmlentities($row['unterkategorie']);          
    44.     $menge = htmlentities($row['menge']);          
    45.     $artikelnummer = htmlentities($row['artikelnummer']);          
    46.     $artikel = htmlentities($row['artikel']);          
    47.     $preis = htmlentities($row['preis']);      
    48.     $sort = htmlentities($row['sort']);      
    49.     $kurzartikel = htmlentities($row['kurzartikel']);          
    50.     include ("artikel.php");  
    51. }
    52. echo "</tbody>
    53. </table>";
    54. //Berechne die Anzahl der Seiten:
    55. $anzahl_seiten = ceil($anzahl_eintrage / floatval($beitraege_pro_seite));
    56. // Blättern
    57. echo "<div id=\"navigation\" align=\"center\">";
    58. echo '&nbsp;<a href="?seite='.$anzahl_eintrage.'" >Erste Seite</a>';
    59. $seite = $_GET['seite'] +1;
    60.         echo '&nbsp;<a href="?seite='.$seite.'" ><<&nbsp;</a>';      
    61. $seite = $_GET['seite'] -1;
    62.         echo '&nbsp;<a href="?seite='.$seite.'" >&nbsp;>></a>';    
    63. echo '&nbsp;<a href="?seite=1" >Letzte Seite </a></div>';
    64. ?>
     
  2. Yaslaw

    Yaslaw n/a Moderator

    UInd welcher Code-Abschnitt funktioniert nicht richtig?

    Warum Zählst du die Eintrag, welche nicht gelöscht sind und bei der Detailsuche ignorierst du das deletes_at Feld?
    Ansonsten sieht das Such-SQL richtig aus.

    Kannst du mal ein Beispiel in Tabellenansicht machen, von Daten die ausgegeben werden aber nicht sollten und was dein Suchbegriff dazu war
     
  3. Spiro

    Spiro Mitglied

    Hallo Yaslaw,

    ich weiß ja nicht welcher Code nicht funktioniert.
    Also hier mal ein Bild von meiner Ausgabe nach einer Suche. Der Suchbegriff steht oben links (das echo)

    Die erste Zeile wäre ja eine korrekte, allerdings alle folgenden nicht mehr. Mal abgesehen von der Tatsache das ich mehr Trodat Artikel habe. 1.jpg

    Das deleted_at Feld dient nur der Blätterfunktion. 2.jpg

    Ich habe die Suche (quasi den gleichen Code) in meiner Rechnungserwaltung im Einsatz, da klappt alles. Obwohl ich da auch anfangs Probleme hatte. Ich weiß nur nicht mehr, warum es dann auf einmal ging.
     
  4. Yaslaw

    Yaslaw n/a Moderator

    Da mischst da alles durcheinander
    Du suchst Resultate. Für jeden Fund füllst du die Werte in Variablen ab.
    Dann startest du (immer noch pro Fund) die artikel.php. Dort kommt wieder eine Abfrage die Werte ausgibt. Das hat aber nix mit der Suche zu tun.
    Wenn also 3 Funde sind, dann würden nach meinem Verständnis 3 mal alle Daten ausgegeben. Mit den ursprünglichen Daten aus dem Fund machst du gar nix

    Code (Text):
    1. //suche.php
    2. SELECT * FROM $tabelle1a WHERE suchresultate
    3. while(resultate){
    4.     ...
    5.     include ("artikel.php");
    6. }
    7.  
    8. //artikel.php
    9. SELECT * FROM $tabelle1a WHERE deleted_at IS NULL ORDER BY unterkategorie
    10. while(resultate){
    11.     ...
    12.     include ("artikel_anzeige.php");
    13. }
    Könnte es sein dass die Ziele 50 von der such.php die artikel_anzeige.php öffnen sollte anstelle von artikel.php?
     
    Spiro gefällt das.
  5. Spiro

    Spiro Mitglied

    Hallo Yaslaw,

    danke das war der Fehler. Jetzt muss ich da nur an der Optik feilen. Vielleicht erstelle ich dafür dann eine eigene "Suchergebnis-anzeigen". Aber das ist nicht so wild :cool:

    Es ist aber gerade noch eine Frage aufgetaucht. Wenn ich einen Artikel speichere, und in der Artikelbezeichnung " verwendet habe, bekomme ich in meiner Rechnungsverwaltung Probleme, da mir da dann der Artikel nicht mehr angezeigt wird. Auf was muss ich da beim Auslesen achten?

    Danke dir schon mal
     
  6. Yaslaw

    Yaslaw n/a Moderator

    Du hast doch gar kein Feld Artikelbezeichnung.
    Wird der Datensatz mit dem '' in der DB überhaubt eingetragen?
     
  7. Spiro

    Spiro Mitglied

    Das Feld heißt in der Artikeldatenbank "Artikel"

    sorry
     
  8. Yaslaw

    Yaslaw n/a Moderator

    Und wir die fehlende Zeile eingetragen? Ist sie in der DB drin?
     
  9. Spiro

    Spiro Mitglied

    Ja, der Artikel ist gepeichert

    So, kleines Bildbeispiel.
    Hier ist der Artikel in der Artikeldatenbank (der erste):
    3.jpg

    Und hier siehst du meine Artikelauswahl in meiner Rechnungsverwaltung.
    4.jpg
    Hier wähle ich meine Artikel, erst die Kategorie, dann Unterkategorie, und wenn ich dann rechts auf die Kurzbeschreibung (kurzartikel) klicke, werden die Daten unten in die Felder eingetragen.
    Klappt auch eigentlich einwandfrei. Außer ich habe in einem Artikel " mit drin.

    Beim Speichern werden die Variablen verarbeitet
    PHP:
    1. $artikel = mysqli_real_escape_string($Connect, $artikel),
    Nachtrag: Könnte es an:
    PHP:
    1. $artikel = htmlentities($row['artikel']);    
    liegen?
     
  10. Yaslaw

    Yaslaw n/a Moderator

    Hast du mal den generierten HTML-Code an der Stelle angeschaut, an der der Text fehlt?
     
  11. Spiro

    Spiro Mitglied

    Der wird an den " abgeschnitten, es werden auch die anderen Variablen nicht gefüllt.

    Mal auszugsweise der Seitenquellcode von den 2 Zeilen, wie auf dem Bild oben:
    HTML:
    1. <td><input name="menge01" id="menge" value="1" size="4" onkeydown="replaceLetters(this)"/></td>
    2. <td><input name="artikelnummer01" id="artikelnummer" value="651-149" size="10"/></td>  
    3. <td><textarea name="artikel01" id="artikel" value="">Ansteckschild mit Magnet und Rahmen, 80 x 30 mm
    4. verchromt, silber matt/schwarz</textarea></td>      
    5. <td><input name="einzelpreis01" id="einzelpreis" value="6.99" size="10" onkeydown="replaceLetters(this)"/>
    6. <input type="hidden" name="gesamtpreis01" id="gesamtpreis" value="6.99" size="10" onkeydown="replaceLetters(this)"/></td>
    7. <td><input name="artikelnotiz01" type="hidden" value="" /></td>
    8. </tr><tr style="background-color:#F7819F";>
    9. <td>29193</td>  
    10. <td></td>      
    11. <td></td>          
    12. <td><input name="menge02" id="menge" value="" size="4" onkeydown="replaceLetters(this)"/></td>
    13. <td><input name="artikelnummer02" id="artikelnummer" value="" size="10"/></td>  
    14. <td><textarea name="artikel02" id="artikel" value="">Stempel Trodat Printy 4912,
    15. 47 x 18 , Blau -
    16. <!-- hier müsste eigentlich noch "Kopie" kommen ---- außerdem müssten alle values gefüllt sein -->
    17. </textarea></td>      
    18. <td><input name="einzelpreis02" id="einzelpreis" value="" size="10" onkeydown="replaceLetters(this)"/>
    19. <input type="hidden" name="gesamtpreis02" id="gesamtpreis" value="0" size="10" onkeydown="replaceLetters(this)"/></td>
    20. <td><textarea name="kurzartikel" id="kurzartikel" value=""></textarea>
    21. <input name="artikelnotiz02" type="hidden" value="" /></td>
    22. </tr>
     
  12. Yaslaw

    Yaslaw n/a Moderator

    Hm.. da weiss ich auch grad nicht weiter. Meine letzte PHP-Zeile die ich schrieb müsste inzwischen etwa 6 Jahre alt sein......
     
  13. Spiro

    Spiro Mitglied

    Hallo Yaslaw,

    trotz allem, vielen Dank für deine Mühen. Ich werde mal weiter rum probieren wie ich die " da als Störfaktor raus bekomme.

    Da meine ursprüngliche Frage ja geklärt ist, schließe ich dieses Thema als gelöst :rolleyes::D


    Nachtrag: Lösung gefunden!!
    Meine Auswahlfelder werden ja durch php erzeugt und dort fehlte ein "htmlentities"

    Hier der Code der mir mein letztes Auswahlfeld erzeugt:
    PHP:
    1. $result =  mysqli_query($Connect, "SELECT * FROM $tabelle1a WHERE  unterkategorie='$unterkategorie[1]' AND kategorie='$unterkategorie[0]'  ORDER BY unterkategorie, sort ASC");
    2. while($row = mysqli_fetch_row($result))
    3.     echo '<option value="'.htmlentities($row[5]).'|'.htmlentities($row[7]).'">'.htmlentities($row[7]).'</option>';
    4. mysqli_free_result( $result );
    5. print_r($_POST);
     
    Zuletzt bearbeitet: 19. Dezember 2016
Die Seite wird geladen...
Ähnliche Themen - Datenbank durchsuchen Ergebnis
  1. philsch
    Antworten:
    38
    Aufrufe:
    1.716
  2. p4man
    Antworten:
    3
    Aufrufe:
    1.177
  3. Kalito
    Antworten:
    4
    Aufrufe:
    1.844
  4. TheLuBu
    Antworten:
    14
    Aufrufe:
    5.912
  5. h4dhunTer
    Antworten:
    1
    Aufrufe:
    378