Suchscript funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suchscript funktioniert nicht

    Hallo

    Ich arbeite als absoluter Anfänger an einem kleinen Suchscript das ein feld in einer sql datenbank durchsuchen soll.

    Habe schon einige fehler beseidigen können aber dieser bleibt hartnäckig.

    also hier mal der Code

    PHP-Code:
    <html>
    <head>
    <titel>PHP Suche</titel>
    <link rel="stylsheet"type="type=text/css" href=2design.css"/>
    </head>
    <body>
    <header>HTMLworld</header>
    <section>
    <form method="get">
    <input type="text" class="suchfeld" name= "search" />
    <input type="submit" class="suchbutton" name= "Suche" />
    <form>
    <p>
    <?php
    if (isset($_GET["search"])){
    $suchwort =$_GET["search"];
    $abfrage "";

    echo 
    "$suchwort";

    $suchwort =explode(" "$suchwort);
    for (
    $i $i sizeof($suchwort) ; $i++)

    {
    $abfrage .= "'keywort' like '%" $suchwort[$i] ."%'";


    if(
    $i < (sizeof($suchwort) - 1)) {
    $abfrage .="or";

    }
    }



    $db = @new mysqli (  'localhost''root1''####''suche1');
    if (
    mysqli_connect_errno() == 0
    echo 
    "Die datenbank verbindung hat geklappt";
    {
    $sql " SELECT * FROM 'linkliste' WHERE " .abfrage  ;
    $ergebniss $db->query($sql);

    while (
    $zeile $ergebnis->fetch_object()) {
    echo 
    "<p>";
    echo 
    $zeile->linknr;
    echo 
    "<nbsp;nbsp>";
    echo 
    $zeile->keywort;
    echo 
    "nbsp;nbsp;<b>";
    echo 
    $zeile->link;
    echo 
    "</b></p>";
    }
    }
    $db->close;

    }



    ?>
    </p>
    </section>
    </body>
    und hier die fehlermeldung.
    Fatal error: Uncaught Error: Call to a member function fetch_object() on null in C:\WTServer\WWW\suche\test3.php:43 Stack trace: #0 {main} thrown in C:\WTServer\WWW\suche\test3.php on line 43


    Ich denke es liegt daran das halt nur null in der Abfrage produziert wird.
    oder halt bei der $db. Aber das sind nur Vermutungen. Das ist das erstemal mit PHP7 und ich bräuchte eure hilfe.

    Gruss aus Kaiserslautern
    micha

  • #2
    Deine SQL-Query ist fehlerhaft. Den genauen Fehler kannst du dir anzeigen lassen:

    - PHP: mysqli::$error - Manual

    Die einfachen Anführungszeichen um Tabellenname und Feldnamen sind falsch. Das DBMS hält das so sicherlich für Strings. Entweder ganz auslassen oder Backticks (`…`) verwenden.

    Das ist in der Form zudem anfällig für SQL-Injections. Kontextwechsel korrekt durchführen:

    - http://wiki.selfhtml.org/wiki/PHP/An...Kontextwechsel
    - http://php.net/manual/en/mysqli.real-escape-string.php
    Zuletzt geändert von mermshaus; 22.03.2017, 16:42.

    Kommentar


    • #3
      Hallo
      Welche Anführungszeichen meinst du genau.
      PHP-Code:
      'keywort' 
      oder
      PHP-Code:
       '%" . $suchwort[$i] ."%'" 
      wenn ich bei
      PHP-Code:
      $sql " SELECT * FROM 'linkliste' WHERE " .abfrage  
      linkliste ohne anführungszeichen setze er halte ich noch eine weitere Fehlermeldung.
      Warning: mysqli::query(): Couldn't fetch mysqli in C:\WTServer\WWW\suche\test3.php on line 41

      Kommentar


      • #4
        Um den Tabellennamen (linkliste) und um die bzw. den Feldname(n) (keywort) gehören keine Anführungszeichen (im Sinne von '…' oder "…").

        Du schreibst auch einmal $ergebniss und einmal $ergebnis, sehe ich gerade noch.

        Und bei $abfrage fehlt einmal das Dollarzeichen.

        Kommentar


        • #5
          Und bei
          PHP-Code:
          $abfrage .="or"
          fehlen 2 Blanks

          Kommentar


          • #6
            Hallo
            hab mal geändert was du gesagt hast aber leider ohne Besserung.
            Hier mal der geänderte code

            PHP-Code:
            <header>HTMLworld</header>
            <section>
            <form method="get">
            <input type="text" class="suchfeld" name= "search" />
            <input type="submit" class="suchbutton" name= "Suche" />
            <form>
            <p>
            <?php
            if (isset($_GET["search"])){
            $suchwort =$_GET["search"];
            $abfrage "";

            echo 
            "$suchwort";

            $suchwort =explode(" "$suchwort);
            for (
            $i 0$i sizeof($suchwort); $i++)

            {
            $abfrage .= "keywort like '%" $suchwort[$i] . "%'";


            if(
            $i < (sizeof($suchwort) - 1)) {
            $abfrage .="or";

            }
            }



            $db = @new mysqli (  'localhost''root1''####''suche1');
            if (
            mysqli_connect_errno() == 0
            echo 
            "Die datenbank verbindung hat geklappt";
            {
            $sql " SELECT * FROM linkliste WHERE  .$abfrage.  ";
            $ergebnis $db->query($sql);

            while (
            $zeile $ergebnis->fetch_object()) {
            echo 
            "<p>";
            echo 
            $zeile->linknr;
            echo 
            "<nbsp;nbsp>";
            echo 
            $zeile->keywort;
            echo 
            "nbsp;nbsp;<b>";
            echo 
            $zeile->link;
            echo 
            "</b></p>";
            }
            }
            $db->close;

            }



            ?>
            </p>
            </section>
            </body>
            fehlercode:
            Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in C:\WTServer\WWW\suche\test3.php:37 Stack trace: #0 {main} thrown in C:\WTServer\WWW\suche\test3.php on line 37

            gruss micha

            Kommentar


            • #7
              Lass dir mal $sql anzeigen und die Blanks bei or sind immer noch nicht drin.

              Und lass dir mal den Fehler von der DB anzeigen:

              PHP-Code:
              $ergebnis $db->query($sql)
                or die (
              "SQL: $sql <br>Error: " $db->error); 
              Zuletzt geändert von bandit600; 23.03.2017, 15:10.

              Kommentar


              • #8
                hallo bandit
                was sind blanks ?

                und der inhalt von echo $sql ist
                PHP-Code:
                SELECT FROM linkliste WHERE  .keywort like '%haus%'
                und ich hatte wirklich nach haus gesucht. also das freud mich schon das es bis dahin schonmal funktioniert
                gruss micha

                Kommentar


                • #9
                  Achso noch der fehlercode von der DB
                  Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'like '%hund%'orkeywort like '%haus%'.' at line 1

                  Kommentar


                  • #10
                    Blanks sind Leerzeichen. Nicht "or", sondern " or ".

                    Zudem passt deine String-Verkettung nicht:

                    PHP-Code:
                    $sql " SELECT * FROM linkliste WHERE  .$abfrage.  "
                    Richtig ist eine dieser Varianten:

                    PHP-Code:
                    $sql "SELECT * FROM linkliste WHERE $abfrage"
                    PHP-Code:
                    $sql "SELECT * FROM linkliste WHERE " $abfrage

                    Kommentar


                    • #11
                      Hallo
                      Der code funktioniert soweit .

                      Ich wollte ihn jetzt einstellen, sodas andere ihn auch nutzen können. Aber vorher wollte ich noch das linkinjektion problem angehen. und schon gehts wieder nicht.PHP]<section>
                      <form method="get">
                      <input type="text" class="suchfeld" name= "search" />
                      <input type="submit" class="suchbutton" name= "Suche" />

                      <form>
                      <p>
                      <?php
                      if (isset($_GET["search"])){
                      $suchwort = mysqli_real_escape_string ($_GET['search']);

                      $abfrage = "";

                      echo "$suchwort";

                      $suchwort =explode(" ", $suchwort);
                      for ($i = 0; $i < sizeof($suchwort); $i++)

                      {
                      $abfrage .= "keywort like '%" . $suchwort[$i] . "%'";


                      if($i < (sizeof($suchwort) - 1)) {
                      $abfrage .=" or ";

                      }
                      }



                      $db = @new mysqli ( 'localhost', 'root', '', 'suche');
                      if (mysqli_connect_errno() == 0)
                      echo "Die datenbank verbindung hat geklappt";
                      {
                      $sql = "SELECT * FROM linkliste WHERE " . $abfrage; ;
                      echo "$sql";

                      $ergebnis = $db->query($sql)

                      or die ("SQL: $sql <br>Error: " . $db->error);


                      while ($zeile = $ergebnis->fetch_object()) {
                      echo "<p>";
                      echo $zeile->linknr;
                      echo "&nbsp;&nbsp";
                      echo $zeile->keywort;
                      echo "&nbsp &nbsp<b>";
                      echo $zeile->link;
                      echo "</b></p>";
                      }
                      }
                      $db->close;

                      }



                      ?>
                      </p>
                      </section>[/PHP]

                      fehlermeldung:
                      Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\WTServer\WWW\suche\index.php on line 27

                      Bei php 5.5. funktionirt das noch ( ohne (i))
                      gruss micha

                      Kommentar


                      • #12
                        Man darf aber auch mal die Doku bemühen!

                        Siehe PHP: mysqli::real_escape_string - Manual

                        Kommentar


                        • #13
                          Hallo nochmal

                          Allso ich raffs nicht.

                          Erwartet mysqli_real_escape_string immer 2 Variable??? Aber ich habe doch nur eine ( Get ... ). Die erklarung auf deiner verlinkten seite verstehe ich nicht.

                          Grus Micha

                          Kommentar


                          • #14
                            Beachte doch mal die Beispiele in der Doku, was anderes könnten wir dir auch nicht schreiben.

                            Kommentar


                            • #15
                              Also ich verstehe das Beispiel so

                              PHP-Code:
                              $city mysqli_real_escape_string($link$city); 
                              $link ist die datenbank verbindung. Die habe ich ja nicht, den die kommt ja erst später. und das würde keinen sinn machen. $city ist eigentlich eine feste größe die unabhängig von sonstigen werten hier durch einen wert ergänzt wird.

                              Ich brauche aber doch nur den get wert. Miuss ich die datenbank verbindung vorher machen. aber das ist ja eigentlich blödsinn.
                              Mein neuster versuch ist also dieser
                              PHP-Code:
                              $suchwort mysqli_real_escape_string ($_GET['search'], $suchwort); 
                              Aktuelle felermeldung
                              Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in C:\WTServer\WWW\suche\index.php on line 27


                              Immer hin nur noch einfehlender Parameter . Also Ich glaube das dies an der get Übergabe liegt . Nur ich habe kein ahnung wieso.

                              gruss aus Kaiserslautern
                              Micha

                              Kommentar

                              Lädt...
                              X