Suche in Mysql

  • geschlossen
  • MySQL

  • Taxel
  • 1610 Aufrufe 6 Antworten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Suche in Mysql

    Seid wieder einmal gegrüßt,
    oh ihr, die ihr mir hoffentlich auch dieses mal helfen könnt.

    Dieses Script hier

    PHP-Quellcode

    1. <?php
    2. $search = $_POST['search'];
    3. if(!isset($search)){
    4. ?>
    5. <h1>Suche</h1><br />
    6. <form action="suche.php" method="post">
    7. <input name="search" type="hidden" value="1" />
    8. <input name="name" type="text" value="Mapname" maxlength="30" /><br />
    9. <input name="uploader" type="text" value="Autor" maxlength="30" /><br />
    10. Spieler:<br />
    11. <select name="players">
    12. <option value="4-8">4-8</option>
    13. <option value="8-12">8-12</option>
    14. <option value="12-16">12-16</option>
    15. </select><br />
    16. Spielmodi:
    17. <input name="dm" type="checkbox" value="dm" checked /><label>dm</label>
    18. <input name="tdm" type="checkbox" value="tdm" checked /><label>tdm</label>
    19. <input name="ctd" type="checkbox" value="ctd" checked /><label>ctd</label>
    20. <input name="upr" type="checkbox" value="upr" checked /><label>upr</label>
    21. <br />
    22. <br /><input name="submit" type="submit" value="Suche!" />
    23. </form>
    24. <?php }
    25. else{
    26. $players = $_POST['players'];
    27. $type_dm = $_POST['dm'];
    28. $type_tdm = $_POST['tdm'];
    29. $type_ctd = $_POST['ctd'];
    30. $type_upr = $_POST['upr'];
    31. $name = $_POST['name'];
    32. $uploader = $_POST['uploader'];
    33. $sql = "SELECT * FROM maps WHERE ";
    34. if(isset($players)){$sql.= "players = '$players'";}
    35. if(isset($type_dm)){$sql.= "AND type_dm = '1'";}
    36. if(isset($type_tdm)){$sql.= "AND type_tdm = '1'";}
    37. if(isset($type_ctd)){$sql.= "AND type_ctd = '1'";}
    38. if(isset($type_upr)){$sql.= "AND type_upr = '1'";}
    39. if(isset($name)){$sql.= "AND name = '$name' ";}
    40. if(isset($uploader)){$sql.= "AND uploader = '$uploader' ";}
    41. $sql .= "LIMIT $start, $eintraege_pro_seite";
    42. ?>
    Alles anzeigen

    soll eigentlich, wenn über POST die Variable $search übergeben wurde, alle Tabelleneinträge, in denen das im Suchformular Gesuchte steht, abgefragt werden.
    aber geht nicht.

    nichts wird durch die (funktionierende und auf den geposteten Scriptabschnitt folgende) Ausgabe ausgegeben.
    hab ich irgendwo nen Syntaktischen Fehler?
    oder was anderes?


    Danke im Vorraus

    Taxel
    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    Irren ist menschlich, doch im Irrtum zu verharren ist ein Zeichen von Dummheit.

    -Cicero
  • Hi,
    was soll denn ausgegeben werden? Der SQL-String oder was?
    Dass du das Wichtigste weg lässt, trägt nicht besonders gut zum Thema bei. Poste einfach mal das gesamte Werk.
    btw. Wenn keine POST-Daten vorhanden sind, du aber wie in Zeile 2 darauf zugreifst, ist das ein notice-Fehler.

    btw2. $start und $eintraege_po_seite sind nirgends deklariert.

    btw3. mit SQL-Injection hast du dich, wie ich sehe, immer noch nicht beschäftigt. Jedes Script-Kiddie kann deine DB auslesen und Schlimmeres.

    btw4. dein letztes Thema ist immer noch geöffnet, wenn das allerdings erledigt ist, so kennzeichne das auch so.

    Gruß
    Broken Sword
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Broken Sword ()

  • PHP-Quellcode

    1. <?php
    2. $db = @new mysqli('localhost', 'user', 'pw', 'db');
    3. if (mysqli_connect_errno()) {
    4. die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
    5. }
    6. $seite = $_GET['seite']; //Abfrage auf welcher Seite man ist
    7. //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1
    8. if(!isset($seite))
    9. {
    10. $seite = 1;
    11. }
    12. $eintraege_pro_seite = 60;
    13. //Ausrechen welche Spalte man zuerst ausgeben muss:
    14. $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
    15. //Tabelle Abfragen
    16. $sql = "SELECT * FROM maps LIMIT $start, $eintraege_pro_seite";
    17. $search = $_POST['search'];
    18. if(!isset($search)){
    19. ?>
    20. <h1>Suche</h1><br />
    21. <form action="suche.php" method="post">
    22. <input name="search" type="hidden" value="1" />
    23. <input name="name" type="text" value="Mapname" maxlength="30" /><br />
    24. <input name="uploader" type="text" value="Autor" maxlength="30" /><br />
    25. Spieler:<br />
    26. <select name="players">
    27. <option value="4-8">4-8</option>
    28. <option value="8-12">8-12</option>
    29. <option value="12-16">12-16</option>
    30. </select><br />
    31. Spielmodi:
    32. <input name="dm" type="checkbox" value="dm" checked /><label>dm</label>
    33. <input name="tdm" type="checkbox" value="tdm" checked /><label>tdm</label>
    34. <input name="ctd" type="checkbox" value="ctd" checked /><label>ctd</label>
    35. <input name="upr" type="checkbox" value="upr" checked /><label>upr</label>
    36. <br />
    37. <br /><input name="submit" type="submit" value="Suche!" />
    38. </form>
    39. <?php }
    40. else{
    41. $players = $_POST['players'];
    42. $type_dm = $_POST['dm'];
    43. $type_tdm = $_POST['tdm'];
    44. $type_ctd = $_POST['ctd'];
    45. $type_upr = $_POST['upr'];
    46. $name = $_POST['name'];
    47. $uploader = $_POST['uploader'];
    48. $sql = "SELECT * FROM maps WHERE ";
    49. if(isset($players)){$sql.= "players = '$players'";}
    50. if(isset($type_dm)){$sql.= "AND type_dm = '1'";}
    51. if(isset($type_tdm)){$sql.= "AND type_tdm = '1'";}
    52. if(isset($type_ctd)){$sql.= "AND type_ctd = '1'";}
    53. if(isset($type_upr)){$sql.= "AND type_upr = '1'";}
    54. if(isset($name)){$sql.= "AND name = '$name' ";}
    55. if(isset($uploader)){$sql.= "AND uploader = '$uploader' ";}
    56. $sql .= "LIMIT $start, $eintraege_pro_seite";
    57. ?>
    58. <h1>Ergebnisse:</h1>
    59. <table width="600" border="2px" cellpadding="2px" cellspacing="0px" bordercolor="#996633" bordercolorlight="#999966" bordercolordark="#993300" rules="cols">
    60. <tr bgcolor="#8E7049">
    61. <th scope="col">Name</th>
    62. <th scope="col">Autor</th>
    63. <th scope="col">Bewertung</th>
    64. <th>Spieler</th>
    65. <th scope="col">Modi</th>
    66. </tr>
    67. <?php $result = $db->query($sql);
    68. if (!$result) {
    69. die ('Etwas stimmte mit dem Query nicht: '.$db->error);
    70. }
    71. while ($row = $result->fetch_assoc()) { // NULL ist äquivalent zu false
    72. // $row ist nun das Array mit den Werten
    73. $rate = $row['rating'] / $row['multiplier'];
    74. $rate2 = round($rate,1);
    75. $mode = 'bla';
    76. if(isset($row['type_dm'],$row['type_tdm'], $row['type_ctd'], $row['type_upr'])){$mode = 'Alle';}
    77. else{
    78. $mode = 'dm';
    79. if(isset($row['type_tdm'])){$mode .= '/tdm';};
    80. if(isset($row['type_ctd'])){$mode .= '/ctd';};
    81. if(isset($row['type_upr'])){$mode .= '/upr';};
    82. }
    83. echo '<tr><td><a href="./map.php?ID='.$row['ID'].'">'.$row['name'].'</td><td>'.$row['uploader'].'</td><td>'.$rate2.'</td><td>'.$row['players'].'</td><td>'.$mode.'</td></tr>';
    84. }?>
    85. <?php }?>
    86. </table>
    87. <BR />
    88. <?php
    89. $result = mysql_query("SELECT ID FROM maps");
    90. $menge = mysql_num_rows($result);
    91. //Errechnen wieviele Seiten es geben wird
    92. $wieviel_seiten = $menge / $eintraege_pro_seite;
    93. //Ausgabe der Seitenlinks:
    94. echo "<div align=\"center\">";
    95. echo "<b>Seite:</b> ";
    96. echo 1;
    97. //Ausgabe der Links zu den Seiten
    98. for($a=0; $a < $wieviel_seiten; $a++)
    99. {
    100. $b = $a + 1;
    101. //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
    102. if($seite == $b)
    103. {
    104. echo " <b>$b</b> ";
    105. }
    106. //Aus dieser Seite ist der User nicht, also einen Link ausgeben
    107. else
    108. {
    109. echo " <a href=\"?seite=$b\">$b</a> ";
    110. }
    111. }
    112. echo "</div>";
    113. ?>
    Alles anzeigen


    Hier in vollständig.
    Mit SQL-Injection befass ich mich in Kürze, erst muss ich die Basics können.
    (Natürlich kann man sagen, das gehört zu den Basics, aber erstmal mach ichs jetz mal so - modifiziert wird die Site eh mit der Zeit noch werden)
    Cuiusvis hominis est errare, nullius nisi insipientis in errore perseverare.
    Irren ist menschlich, doch im Irrtum zu verharren ist ein Zeichen von Dummheit.

    -Cicero
  • Setze mal

    Quellcode

    1. error_reporting(E_ALL);
    am Anfang.
    btw, warum arbeitest du unten auf einmal mit mysql, wenn du doch oben mit mysqli gearbeitet hast?

    Ach und gibt es denn überhaupt irgendeine Ausgabe?
    Auf dem Abstellgleis sah man ihn liegen,
    Auf dem Abstellgleis zwischen Schwelle und Gestein,
    Auf dem Abstellgleis im strömenden Regen,
    Auf dem Abstellgleis allein.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Broken Sword ()

  • Nicht getestet, sollte aber funktionieren.

    PHP-Quellcode

    1. <?php
    2. /**
    3. * Welche Seite soll angezeigt werden? Überprüfung ob auch ein nummerischer Wert
    4. * übergeben wurde (SQL Injection). Wurde kein Wert übergeben, oder kein nummerischer
    5. * befindet sich der Benutzer automatisch auf Seite 1.
    6. */
    7. if (isset($_GET['seite']) && is_int($_GET['seite'])) {
    8. $seite = $_GET['seite'];
    9. }
    10. else {
    11. $seite = 1;
    12. }
    13. $eintraege_pro_seite = 60;
    14. /**
    15. * Berechnung der Spalte welche zuerst ausgegeben werden soll.
    16. *
    17. * @var int
    18. */
    19. $start = $seite * $eintraege_pro_seite - $eintraege_pro_seite;
    20. /**
    21. *
    22. */
    23. if (!isset($_POST['action']) || empty($_POST['action']) || $_POST['action'] != 'Suchen') {
    24. echo '<h1>Suche</h1>';
    25. echo '<form action="suche.php" method="post">';
    26. echo '<p><input name="name" type="text" value="Mapname" maxlength="30" />';
    27. echo '<input name="uploader" type="text" value="Autor" maxlength="30" /></p>';
    28. echo '<h2>Spieler:</h2>';
    29. echo '<p><select name="players">';
    30. echo '<option value="4-8">4-8</option>';
    31. echo '<option value="8-12">8-12</option>';
    32. echo '<option value="12-16">12-16</option>';
    33. echo '</select></p>';
    34. echo '<h2>Spielmodi:</h2>';
    35. echo '<p><input id="dm" name="dm" type="checkbox" value="dm" checked="checked" /> <label for="dm">dm</label>';
    36. echo '<input id="tdm" name="tdm" type="checkbox" value="tdm" checked="checked" /> <label for="tdm">tdm</label>';
    37. echo '<input id="ctd" name="ctd" type="checkbox" vlaue="ctd" checked="checked" /> <label for="ctd">ctd</label>';
    38. echo '<input id="upr" name="upr" type="checkbox" value="upr" checked="checked" /> <label for="upr">upr</label></p>';
    39. echo '<p><input name="action" type="submit" value="Suchen" /></p>';
    40. echo '</form>';
    41. }
    42. else {
    43. $sql_where = sql_prepare( 'name', $_POST['name'], $sql_where );
    44. $sql_where = sql_preprae( 'uploader', $_POST['uploader'], $sql_where );
    45. $sql_where = sql_prepare( 'players', $_POST['players'], $sql_where );
    46. $sql_where = sql_prepare( 'dm', $_POST['dm'], $sql_where );
    47. $sql_where = sql_prepare( 'tdm', $_POST['tdm'], $sql_where );
    48. $sql_where = sql_prepare( 'ctd', $_POST['ctd'], $sql_where );
    49. $sql_where = sql_prepare( 'upr', $_POST['upr'], $sql_where );
    50. $db = db_connect();
    51. if (is_resource($db)) {
    52. $result = $db->query("SELECT * FROM maps WHERE $sql_where LIMIT $start, $eintraege_pro_seite");
    53. $db->close();
    54. echo '<h1>Ergebnisse:</h1>';
    55. echo '<table cellpadding="2" cellspacing="0" style="width:600px;border:1px solid #963">';
    56. echo '<tr>';
    57. echo '<th>Name</th>';
    58. echo '<th>Autor</th>';
    59. echo '<th>Bewertung</th>';
    60. echo '<th>Spieler</th>';
    61. echo '<th>Modi</th>';
    62. echo '</tr>';
    63. while ($row = $result->fetch_assoc()) {
    64. $rate = $row['rating'] / $row['multiplier'];
    65. $rate2 = round($rate, 1);
    66. $mode = 'bla';
    67. if (isset($row['type_dm'], $row['type_tdm'], $row['type_ctd'], $row['type_upr'])) {
    68. $mode = 'Alle';
    69. }
    70. else {
    71. $mode = 'dm';
    72. if (isset($row['type_tdm'])) {
    73. $mode .= '/tdm';
    74. }
    75. if (isset($row['type_ctd'])) {
    76. $mode .= '/ctd';
    77. }
    78. if (isset($row['type_upr'])) {
    79. $mode .= '/upr';
    80. }
    81. }
    82. echo '<tr>';
    83. echo '<td><a href="./map.php?ID='.$row['ID'].'">'.$row['name'].'</a></td>';
    84. echo '<td>'.$row['uploader'].'</td>';
    85. echo '<td>'.$rate2.'</td>';
    86. echo '<td>'.$row['players'].'</td>';
    87. echo '<td>'.$mode.'</td>';
    88. echo '</tr>';
    89. }
    90. echo '</table>';
    91. }
    92. else {
    93. echo '<p>Etwas stimmte mit der Datenbankabfrage nicht.</p>');
    94. }
    95. }
    96. $db = db_connect();
    97. $result = $db->query("SELECT ID FROM maps");
    98. $db->close();
    99. $menge = mysql_num_rows($result);
    100. // Errechnen wieviele Seiten es geben wird
    101. $wieviel_seiten = $menge / $eintraege_pro_seite;
    102. // Ausgabe der Seitenlinks:
    103. echo '<div style="text-align:center">';
    104. echo '<b>Seite:</b> ';
    105. echo 1;
    106. // Ausgabe der Links zu den Seiten
    107. for ($a = 0; $a < $wieviel_seiten; $a++) {
    108. $b = $a + 1;
    109. // Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben
    110. if ($seite == $b) {
    111. echo " <b>$b</b> ";
    112. }
    113. // Auf dieser Seite ist der User nicht, also einen Link ausgeben
    114. else {
    115. echo " <a href=\"?seite=$b\">$b</a> ";
    116. }
    117. }
    118. echo '</div>';
    119. /*****************************************************************************/
    120. /**
    121. * Verbindung zur Datenbank erstellen.
    122. */
    123. function db_connect() {
    124. $return = @new mysqli('localhost', 'my_user', 'my_password', 'my_db');
    125. if (mysqli_connect_error()) {
    126. die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().' ('.mysqli_connect_errno().')');
    127. }
    128. else {
    129. return $return;
    130. }
    131. }
    132. /**
    133. * Gegebenen String aufbereiten um ihn an unsere Datenbank zu übergen.
    134. *
    135. * @param string $name
    136. * @param string $string
    137. * @param string $sql
    138. * @return string
    139. */
    140. function sql_prepare($name, $string = '', $sql = '') {
    141. if (isset($string) && !empty($string)) {
    142. $string = addslashes(strip_tags($string));
    143. if (!empty($sql)) {
    144. $sql .= ' AND';
    145. }
    146. $sql .= " $name = \"$string\"";
    147. return $sql;
    148. }
    149. else {
    150. return;
    151. }
    152. }
    153. ?>
    Alles anzeigen