Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Suchmaschine "Parse error: syntax error, unexpected '$query' (T_VARIAB

Einklappen

Neue Werbung 2019

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

  • #16
    Zitat von hausl Beitrag anzeigen
    BTW: Wenn du den Code sauber formatierst/einrückst, dann fällt dir eine eine Fehlende Klammer auch schneller/leichter auf (falls dein Editor nichts markiert etc.)
    Danke, steige gerade auf Aptana um, habe bis eben mit webocton scriptly gearbeitet, was ich gerne für webdesign verwende.
    meh();

    Kommentar


    • #17
      Zitat von VPh Beitrag anzeigen
      Problem ist jetzt mysqli_fetch_assoc(mysqli_result $query)
      Das steht nur in der Dokumentation, um zu vermitteln was da als Parameter übergeben werden soll.
      Wenn ich nun aber bereits das Ergebnis der Datenbankabfrage in $query abgespeichert habe, wofür brauche ich dann noch einen zweiten Parameter?
      meh();

      Kommentar


      • #18
        welcher zweite Parameter? mit mysqli_result wird an der stelle nur dokumentiert, dass es sich bei $query um ein mysqli_result handelt...
        Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

        Kommentar


        • #19
          Ich habe mal etwas getestet und den code der connect.php an den Anfang der search.php gesetzt. Als ich die search.php dann ausgeführt habe, verschwanden die Notizen, dass fehlende Variablen im Code seien ($link). Ich verstehe hierbei nicht, warum ich meine connect.php nicht mit require_once() einbinden kann.

          EDIT:

          Zudem habe ich zu meinem connect.php Skript mysqli_real_escape_string() Funktionen hinzugefügt:

          PHP-Code:
          <php
          $hs 
          "bla";
          $us "bla";
          $ps "bla";
          $db "bla";

          $link mysqli_connect($hs$us$ps);
          mysqli_select_db($link$db);

          $us mysqli_real_escape_string($link$us);
          $ps mysqli_real_escape_string($link$ps);
          $hs mysqli_real_escape_string($link$hs);

          ?> 
          Habe ich die Funktionen so richtig eingesetzt? Habe mich an die Dokumentation von http://www.w3schools.com/php/func_my...ape_string.asp
          gehalten.
          meh();

          Kommentar


          • #20
            Hi,

            warum ich meine connect.php nicht mit require_once() einbinden kann.
            doch geht, wenn die Pfadangabe korrekt ist. Hängt auch etwas davon ab, an welcher Position du die Datei/Script du einbindest.

            Habe ich die Funktionen so richtig eingesetzt? Habe mich an die Dokumentation von http://www.w3schools.com/php/func_my...ape_string.asp
            gehalten.
            Vom Prinzip her ja. Nur maskierst du hier einfach feste Werte und keine Parameter (GET oder POST). Eleganter ist es dennoch mit prepared statements.

            Ich habe mal etwas getestet und den code der connect.php an den Anfang der search.php gesetzt. Als ich die search.php dann ausgeführt habe, verschwanden die Notizen, dass fehlende Variablen im Code seien ($link). Ich verstehe hierbei nicht, warum ich meine connect.php nicht mit require_once() einbinden kann.
            Bitte aktuellen code nochmal zeigen (stand jetzt).

            mfg wolf29
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #21
              search.php

              PHP-Code:
              <?php
                  ini_set
              ('display_errors'1);
                  
              error_reporting(E_ALL);
                  require_once(
              'connect.php');
                  
              $keywords $_POST['search'];
                             
                             if (isset(
              $keywords)) { 
                              
              $query mysqli_query($link"SELECT * from search WHERE keywords like '%".$keywords."%' or title like '%".$keywords."%'");
                              echo 
              'Ihre Suche nach <i>'.$keywords.'</i> ergab:<br/>';
                              while(
              $d mysqli_fetch_assoc($query)) {
                                  echo 
              '<fieldset><legend><a href="http://x.com/x/x/'.$d['link'].'">'.$d['title'].'</a></legend>'.$d['description'].'</fieldset>';
                                }
                             }
                             else { 
                                echo 
              'Es wurde kein Suchbegriff eingegeben.'
                             }
                  
              ?>
              connect.php

              PHP-Code:
              <?php
              $hs 
              "bla";
              $us "bla";
              $ps "bla";
              $db "bla";

              $link mysqli_connect($hs$us$ps);
              mysqli_select_db($link$db);

              $us mysqli_real_escape_string($link$us);
              $ps mysqli_real_escape_string($link$ps);
              $hs mysqli_real_escape_string($link$hs);

              ?>
              connect.php und search.php liegen im selben verzeichnis
              meh();

              Kommentar


              • #22
                Das hier ...
                PHP-Code:
                    $keywords $_POST['search']; 
                                
                               if (isset(
                $keywords)) 
                ... macht so kaum Sinn, isset gehört auf $_POST['search'] angewendet, denn die Notice bekomst du schon bei der ersten Anweisung / Zugriff auf $_POST.

                Eher so:
                PHP-Code:
                if (isset($_POST['search'])) {

                    
                $keywords $_POST['search'];  
                    
                // ... 

                Info - das hier:

                PHP-Code:
                $link mysqli_connect($hs$us$ps); 
                mysqli_select_db($link$db); 
                geht auch so:

                PHP-Code:
                $link mysqli_connect($hs$us$ps$db); 

                Dazu:

                PHP-Code:
                <?php 
                $hs 
                "bla"
                $us "bla"
                $ps "bla"
                $db "bla";

                // ...

                $us mysqli_real_escape_string($link$us); 
                $ps mysqli_real_escape_string($link$ps); 
                $hs mysqli_real_escape_string($link$hs);
                Du sollst die Parameter die von aussen kommen für/in der Verwendung der query escapen (wenn du schon keine prepared Statements verwenden willst) und nicht die Zugangsdaten die DU sowieso selbst in der Datei da hinterlegt. Fällt dir was auf?
                In deinem Fall gehören die $keywords (die ja via POST von aussen kommen) escaped..

                Und SELECT * ist immer noch pfui.

                LG
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #23
                  Gut, ich habe mysqli_real_string(); nun folgendermaßen in die search.php eingebaut:

                  PHP-Code:
                  <?php
                     
                      
                  require_once('connect.php');
                      if (isset(
                  $_POST['search'])) { 
                                 
                  $keywords $_POST['search'];   
                                 
                  $query mysqli_query($link"SELECT * from search WHERE keywords like '%".$keywords."%' or title like '%".$keywords."%'");
                                  echo 
                  'Ihre Suche nach <i>'.$keywords.'</i> ergab:<br/>';
                                  while(
                  $d mysqli_fetch_assoc($query)) {
                                      echo 
                  '<fieldset><legend><a href="http://x.com/x/x/'.$d['link'].'">'.$d['title'].'</a></legend>'.$d['description'].'</fieldset>';
                                      
                  $keywords mysqli_real_escape_string($link$keywords);
                                    }
                                 }
                                 else { 
                                    echo 
                  'Es wurde kein Suchbegriff eingegeben.'
                                 }
                  ?>
                  EDIT: Kann/Brauche ich meine in der connect.php hinterlegten MySQL Zugangsdaten nicht sicherer schützen? Ich muss mich momentan noch in das Thema prepared Statements einarbeiten, ich würde sie dann gerne verwenden.
                  meh();

                  Kommentar


                  • #24
                    Gut, ich habe mysqli_real_string(); nun folgendermaßen in die search.php eingebaut:
                    Du wendest es zu spät an, du verstehst immer noch nicht warum und was du da machst, oder? Wenn die query mittels mysqli_query(...) an die DB geschickt wird muss es schon escaped worden sein.

                    Und SELECT * ist immer noch pfui.
                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #25
                      PHP-Code:
                      $keywords $_POST['search'];   
                      $keywords mysqli_real_escape_string($link$keywords);
                      $query mysqli_query($link"SELECT * from search WHERE keywords like '%".$keywords."%' or title like '%".$keywords."%'"); 
                      Was genau an SELECT * ist den pfui?
                      meh();

                      Kommentar


                      • #26
                        http://use-the-index-luke.com/blog/2...he-star-stupid
                        http://stackoverflow.com/questions/3...idered-harmful

                        und mehr, Googlesuche: "select * bad"
                        Relax, you're doing fine.
                        RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

                        Kommentar


                        • #27
                          Zitat von Joma Beitrag anzeigen
                          PHP-Code:
                          $keywords $_POST['search'];   
                          $keywords mysqli_real_escape_string($link$keywords);
                          $query mysqli_query($link"SELECT * from search WHERE keywords like '%".$keywords."%' or title like '%".$keywords."%'"); 
                          In der Variante musst du nur ev. vorsichtig sein, wenn du $keywords im späterem Verlauf nochmal benötigst, die Variable ist dann ja "real-escaped". Glaub ich würde in dem Fall (da $keywords in der query 2x vorkommt) eine eigene Variable nur für die query machen. Aber zu aller Erst natürlich Prepared Statements verwenden.

                          Was genau an SELECT * ist den pfui?
                          http://php-de.github.io/jumpto/code-smells/#select-

                          LG
                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #28
                            keywords werden sowieso nicht zufriedenstellen funktionieren. Der Suchende müsste dann exakt die Reihenfolge der Wörter wie in der Datenbank eingeben.
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #29
                              So hier einmal ein kleines Update meinerseits:

                              Ich habe den Code nun soweit fertiggestellt, dass er in der Datenbank sucht und Ergebnisse ausgibt. Allerdings habe ich bei den prepared_statements, dass Problem, dass der Code folgenden Fehler anzeigt:

                              Fatal error: Call to a member function bind_param() on a non-object

                              Ohne die prepared statements funktioniert der Code, allerdings wäre ich naiv auf diese zu verzichten.

                              Hier mein Code:

                              search.php

                              PHP-Code:
                              <?php
                                  
                              include('connect.php');
                                  
                              $keywords $_POST['search'];
                                             
                                             if (isset(
                              $keywords) && $keywords !="") { 
                                             
                              $query mysqli_query($link"SELECT 'title' , 'keywords' from search WHERE keywords like keywords=? or title like keywords=?");
                                              
                                              
                              $stmt $link->prepare($query);
                                              
                              $stmt->bind_param('s'$_POST['search']);
                                              
                              $stmt->execute();
                                              
                              $stmt->close();
                                              
                                              echo 
                              'Ihre Suche nach <i>'.$keywords.'</i> ergab:<br/>';
                                              
                              $query_exists false;
                                              while(
                              $row mysqli_fetch_object($query)) {
                                              
                              $keywords_from_db $row->keywords;
                                              
                              $keywords_from_db preg_split("#,#",$keywords_from_db);
                                              for(
                              $i 0; isset($keywords_from_db[$i]); $i++) {
                                              if(
                              $keywords_from_db[$i] == $keywords) {
                                              
                              $query_exists true;
                                              echo 
                              "<br />";    
                                              echo 
                              "<a class=\"title\" href=\"".$row->link."\">".$row->title."</a> <br /> <p>".$row->description."</p>";
                                              break;
                                              }
                                              }
                                              }
                                              if(!
                              $query_exists) {
                                              echo 
                              "<br /> Es wurden keine &Uuml;bereinstimmungen gefunden.";
                                              }
                                              }
                                              else {
                                              echo 
                              '<br/> Es wurde kein Suchbegriff eingegeben. <br /><br />'
                                              }
                              ?>
                              connect.php

                              PHP-Code:

                              $hs 
                              "Hostadresse";
                              $us "Username";
                              $ps "Passwort";
                              $db "Datenbank";

                              $link = new mysqli($hs$us$ps$db) or die("Keine Verbindung"); 
                              Danke im Voraus!

                              EDIT:
                              Ich habe noch aus

                              PHP-Code:
                              $query mysqli_query($link"SELECT * from search WHERE keywords like keywords=? or title like keywords=?"); 
                              PHP-Code:
                              $query mysqli_query($link"SELECT 'title' , 'keywords' from search WHERE keywords like keywords=? or title like keywords=?"); 
                              gemacht.
                              meh();

                              Kommentar


                              • #30
                                http://php.net/manual/de/mysqli.prepare.php

                                beispiel #1

                                achja, bitte nicht objectorientierten und prozeduralen stil mischen....

                                Kommentar

                                Lädt...
                                X