Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Arrays

Einklappen

Neue Werbung 2019

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

  • Problem mit Arrays

    array(1) { [0]=> array(2) { [0]=> string(7) "TWITTER" [1]=> string( "SELFHTML" } } https://hastebin.com/difupeluma.xml -> Warning: strpos(): needle is not a string or an integer in C:\xampp\htdocs\index.php on line 87 Warum? Was muss ich ändern?

  • #2
    Zitat von PlutoHD Beitrag anzeigen
    Warum? Was muss ich ändern?
    Steht beides in der Warningmeldung.
    "Software is like Sex, it's best if it's free." - Linus Torvalds

    Kommentar


    • #3
      Schau mal nach was explode macht (http://ch1.php.net/manual/en/function.explode.php):

      PHP-Code:
       $suchbegriffuppersplit[] = explode(" "$suchbegriffupper); 
      Für strpos müsste $suchbegriffuppersplitinhalt ein String sein, ist es aber nicht.

      Kommentar


      • #4
        JaMa Ich weis, ich bekomme das Problem aber nicht behoben, ich habe immer so meine Probleme mit Arrays. Kannst du mir konkret helfen?

        Kommentar


        • #5
          jonas3344 deswegen ja die 2. foreach

          Kommentar


          • #6
            Der Fehler dürfte sich in der Linie-Code finden lassen, den ich in meinem Post zitiert habe.
            Was liefert explode zurück? Was hast du da hinter $suchbegriffuppersplit?

            Kommentar


            • #7
              explode macht einen Array und jedes Wort ist ein einzelner Eintrag oder wie man das auch immer nennen will.

              Kommentar


              • #8
                PHP-Code:
                $suchbegriffuppersplit[] = explode(" "$suchbegriffupper); 
                Hier wird in ein Array aufgeteilt. Du musst also $suchbegriffuppersplit[0] für den ersten Suchbegriff, $suchbegriffuppersplit[1] für den zweiten Suchbegriff usw verwenden.
                Zu dem solltest du den Code nicht auf fremden Seiten bereitstellen, sondern hier zu deinem Beitrag hinzufügen, ich habe den Code mal unten aufgeführt, für die anderen Teilnehmer.

                Die hier tut auch schon weh
                HTML-Code:
                <div id="inhalt">
                
                <div class="zentrieren">
                
                <div class="ueberschrift">
                
                Suchmaschine<br><br>
                
                </div>
                .
                Es gibt auch die Elemente main, article, und header. Abst'nde statt mit BR lieber mit margin-bottom in CSS erstellen.

                Ansonsten hast du noch ein wenig zu Lernen, zum Beispiel, dass man keine Datenbankyugriffe macht wenn man sich schon bei der Ausgabe von HTML befindet.

                Dein Code
                PHP-Code:
                <?php
                  
                include "include/header.php";
                  include 
                "include/footer.php";
                ?>
                <html>
                <head>

                <link rel="stylesheet" href="css/style.css">
                <title>Suchmaschine</title>
                <meta name="description" content="Eine einfache Suchmaschine">
                <meta name="keywords" content="PlutoHD, Suchmaschine, Suche">
                <meta name="author" content="PlutoHD">
                <meta name="editor" content="Atom">
                <meta charset="utf-8">

                </head>

                <body>

                <?php
                echo $header;
                ?>

                <div id="inhalt">

                <div class="zentrieren">

                <div class="ueberschrift">

                Suchmaschine<br><br>

                </div>

                <?php

                  
                if(isset($_POST['SuchanfrageButton'])) {

                    
                $suchbegriff "%".$_POST["SuchanfrageText"]."%";
                    
                $suchbegriffupper strtoupper($suchbegriff);
                    
                $suchbegriffuppersplit[] = explode(" "$suchbegriffupper);

                    if(
                $suchbegriff == "") {
                      echo 
                'Fehler! Bitte lasse kein Feld leer. <a href="index.php">zurück zur Startseite</a>';
                    } else {
                      
                $pdo = new PDO('mysql:host=HOST;dbname=DBNAME''ACCOUNTNAME''PASSWORT');
                      
                $statement $pdo->prepare("SELECT * FROM Data"); //WHERE UPPER(TITLE) LIKE '%".$suchbegriffupper."%' OR LINK LIKE '%".$suchbegriffupper."%'");
                      
                $statement->execute();
                      while (
                $row $statement->fetch()) {
                          
                $ergebnis[] = array('link' => $row["LINK"], 'title'  => $row["TITLE"]);
                      }
                      if(!isset(
                $ergebnis)) {
                        echo 
                'Keine Suchergebnisse <br><a href="index.php">zurück zur Startseite</a>';
                      } else {

                ?>

                <!-- <table>
                <thead>
                <tr>
                <th>Titel</th>
                <th>Link</th>
                </tr>
                </thead>
                <tbody>
                <?php
                  
                //foreach ($ergebnis as $inhalt) {
                ?>
                <tr>
                <td>
                <?php //echo $inhalt["title"]; ?>
                </td>
                <td>
                <a href="<?php //echo $inhalt["link"]; ?>"><?php //echo $inhalt["link"]; ?></a>
                </td>
                </tr>
                <?php
                  
                //}
                ?>
                </tbody>
                </table> -->

                <hr>

                <?php
                  
                foreach ($ergebnis as $inhalt) {
                    foreach (
                $suchbegriffuppersplit as $suchbegriffuppersplitinhalt) {
                      if (
                strpos($inhalt["title"], $suchbegriffuppersplitinhalt) !== false || strpos($inhalt["link"], $suchbegriffuppersplitinhalt) !== false) {
                ?>

                <div class="linkTitel"><a class="blue" href="<?php echo $inhalt["link"]; ?>"><?php if (strlen($inhalt["title"]) >= 120) { $title substr($inhalt["title"], 0120)."..."; } else { $title $inhalt["title"]; } echo $title?></a></div>
                <div class="linkBeschreibung"><?php echo $inhalt["link"]; ?></div><hr>

                <?php
                        
                break;
                      }
                    }
                  }
                ?>

                <br><a href="index.php">zurück zur Startseite</a>

                <?php
                        
                }
                      }
                  } else {
                ?>

                <form name="SuchanfrageForum" action="" method="post">

                <input type="text" name="SuchanfrageText" placeholder="Deine Suchanfrage">
                <button type="submit" name="SuchanfrageButton">Suchen</button>

                </form>

                <?php
                  
                }
                ?>

                </div>

                </div>

                <?php
                echo $footer;
                ?>

                </body>
                </html>

                Kommentar


                • #9
                  PHP sagt dir doch eh schon was falsch ist. Mach halt mal ein var_dump() auf $suchbegriffuppersplitinhalt und schau was es enthält.
                  The string "()()" is not palindrom but the String "())(" is.

                  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


                  • #10
                    Zitat von protestix Beitrag anzeigen
                    PHP-Code:
                    $suchbegriffuppersplit[] = explode(" "$suchbegriffupper); 
                    Hier wird in ein Array aufgeteilt. Du musst also $suchbegriffuppersplit[0] für den ersten Suchbegriff, $suchbegriffuppersplit[1] für den zweiten Suchbegriff usw verwenden.
                    Zu dem solltest du den Code nicht auf fremden Seiten bereitstellen, sondern hier zu deinem Beitrag hinzufügen, ich habe den Code mal unten aufgeführt, für die anderen Teilnehmer.

                    Die hier tut auch schon weh
                    HTML-Code:
                    <div id="inhalt">
                    
                    <div class="zentrieren">
                    
                    <div class="ueberschrift">
                    
                    Suchmaschine<br><br>
                    
                    </div>
                    .
                    Es gibt auch die Elemente main, article, und header. Abst'nde statt mit BR lieber mit margin-bottom in CSS erstellen.

                    Ansonsten hast du noch ein wenig zu Lernen, zum Beispiel, dass man keine Datenbankyugriffe macht wenn man sich schon bei der Ausgabe von HTML befindet.

                    Dein Code
                    PHP-Code:
                    <?php
                    include "include/header.php";
                    include 
                    "include/footer.php";
                    ?>
                    <html>
                    <head>

                    <link rel="stylesheet" href="css/style.css">
                    <title>Suchmaschine</title>
                    <meta name="description" content="Eine einfache Suchmaschine">
                    <meta name="keywords" content="PlutoHD, Suchmaschine, Suche">
                    <meta name="author" content="PlutoHD">
                    <meta name="editor" content="Atom">
                    <meta charset="utf-8">

                    </head>

                    <body>

                    <?php
                    echo $header;
                    ?>

                    <div id="inhalt">

                    <div class="zentrieren">

                    <div class="ueberschrift">

                    Suchmaschine<br><br>

                    </div>

                    <?php

                    if(isset($_POST['SuchanfrageButton'])) {

                    $suchbegriff "%".$_POST["SuchanfrageText"]."%";
                    $suchbegriffupper strtoupper($suchbegriff);
                    $suchbegriffuppersplit[] = explode(" "$suchbegriffupper);

                    if(
                    $suchbegriff == "") {
                    echo 
                    'Fehler! Bitte lasse kein Feld leer. <a href="index.php">zurück zur Startseite</a>';
                    } else {
                    $pdo = new PDO('mysql:host=HOST;dbname=DBNAME''ACCOUNTNAME''PASSWORT');
                    $statement $pdo->prepare("SELECT * FROM Data"); //WHERE UPPER(TITLE) LIKE '%".$suchbegriffupper."%' OR LINK LIKE '%".$suchbegriffupper."%'");
                    $statement->execute();
                    while (
                    $row $statement->fetch()) {
                    $ergebnis[] = array('link' => $row["LINK"], 'title' => $row["TITLE"]);
                    }
                    if(!isset(
                    $ergebnis)) {
                    echo 
                    'Keine Suchergebnisse <br><a href="index.php">zurück zur Startseite</a>';
                    } else {

                    ?>

                    <!-- <table>
                    <thead>
                    <tr>
                    <th>Titel</th>
                    <th>Link</th>
                    </tr>
                    </thead>
                    <tbody>
                    <?php
                    //foreach ($ergebnis as $inhalt) {
                    ?>
                    <tr>
                    <td>
                    <?php //echo $inhalt["title"]; ?>
                    </td>
                    <td>
                    <a href="<?php //echo $inhalt["link"]; ?>"><?php //echo $inhalt["link"]; ?></a>
                    </td>
                    </tr>
                    <?php
                    //}
                    ?>
                    </tbody>
                    </table> -->

                    <hr>

                    <?php
                    foreach ($ergebnis as $inhalt) {
                    foreach (
                    $suchbegriffuppersplit as $suchbegriffuppersplitinhalt) {
                    if (
                    strpos($inhalt["title"], $suchbegriffuppersplitinhalt) !== false || strpos($inhalt["link"], $suchbegriffuppersplitinhalt) !== false) {
                    ?>

                    <div class="linkTitel"><a class="blue" href="<?php echo $inhalt["link"]; ?>"><?php if (strlen($inhalt["title"]) >= 120) { $title substr($inhalt["title"], 0120)."..."; } else { $title $inhalt["title"]; } echo $title?></a></div>
                    <div class="linkBeschreibung"><?php echo $inhalt["link"]; ?></div><hr>

                    <?php
                    break;
                    }
                    }
                    }
                    ?>

                    <br><a href="index.php">zurück zur Startseite</a>

                    <?php
                    }
                    }
                    } else {
                    ?>

                    <form name="SuchanfrageForum" action="" method="post">

                    <input type="text" name="SuchanfrageText" placeholder="Deine Suchanfrage">
                    <button type="submit" name="SuchanfrageButton">Suchen</button>

                    </form>

                    <?php
                    }
                    ?>

                    </div>

                    </div>

                    <?php
                    echo $footer;
                    ?>

                    </body>
                    </html>
                    Was muss ich jetzt konkret machen, das sagen mir alle, ich weis aber nicht wie.

                    Kommentar


                    • #11
                      PHP-Code:
                      $suchbegriffuppersplit[] = explode(" "$suchbegriffupper); 
                      macht:

                      PHP-Code:
                      array[0][0] = "TWITTER"
                      array[0][1] = "SELFHTML" 
                      Was du gerne hättest ist:
                      PHP-Code:
                      array[0] = "TWITTER"
                      array[1] = "SELFHTML 
                      Mit [] fügst du $suchbegriffuppersplit ein neues Element hinzu, kreierst also einen mehrdimensionalen Array, der da nicht nötig ist.

                      Kommentar


                      • #12
                        Zitat von jonas3344 Beitrag anzeigen
                        PHP-Code:
                        $suchbegriffuppersplit[] = explode(" "$suchbegriffupper); 
                        macht:

                        PHP-Code:
                        array[0][0] = "TWITTER"
                        array[0][1] = "SELFHTML" 
                        Was du gerne hättest ist:
                        PHP-Code:
                        array[0] = "TWITTER"
                        array[1] = "SELFHTML 
                        Mit [] fügst du $suchbegriffuppersplit ein neues Element hinzu, kreierst also einen mehrdimensionalen Array, der da nicht nötig ist.
                        Es können aber auch mehr Wörter im Suchbegriff sein, das muss flexibel sein.

                        Kommentar


                        • #13
                          Magst du mal nachlesen was ein Array ist, wie er genau funktioniert, was ein mehrdimensionaler Array ist, etc.? Das würde Deine Fragen alle beantworten.
                          Die Lösung steht in meinem Post, das ist auch weiterhin extrem flexibel, es korrigiert nur Deinen Denkfehler.

                          Kommentar


                          • #14
                            PHP-Code:
                            $suchbegriffuppersplit explode(" "$suchbegriffupper);
                            var_dump($suchbegriffuppersplit); 
                            Damit sollte es dann klar werden.

                            Suchbegriff 1 steht in?

                            Kommentar


                            • #15
                              Zitat von protestix Beitrag anzeigen
                              PHP-Code:
                              $suchbegriffuppersplit explode(" "$suchbegriffupper);
                              var_dump($suchbegriffuppersplit); 
                              Damit sollte es dann klar werden.

                              Suchbegriff 1 steht in?
                              array(1) { [0]=> array(2) { [0]=> string(7) "TWITTER" [1]=> string( "SELFHTML" } }

                              Kommentar

                              Lädt...
                              X