Ankündigung

Einklappen
Keine Ankündigung bisher.

einfache PHP abfrage

Einklappen

Neue Werbung 2019

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

  • einfache PHP abfrage

    halli hallo

    ich habe ein formular mit

    2 input feldern für eine erweiterte suche. einmal soll man nach username und einmal nach richtigem namen suchen können

    Code:
    <form method="post" action="">
    User Name:  <input type="text" name="username" value="" />
    Normaler Name:<input type="text" name="normalname" value="" />
    <input type="submit" value="suchen" name="submit">
    </form>

    mein zugehöriges sql script

    Code:
    $sql = "
    SELECT u.id, u.username, c.avatar, u.name, c.hits 
    FROM #__users AS u RIGHT JOIN  #__comprofiler AS c 
    ON u.id = c.user_id WHERE u.username LIKE '". mysql_real_escape_string($_POST['username']) ."%' 
    OR u.name LIKE '". mysql_real_escape_string($_POST['normalname']) ."%'
    LIMIT 30
    ";
    irgend etwas funktioniert hier nicht

    kann mir jemand helfen


  • #2
    Gibts keine Fehler? Schreib doch bitte mal was von MySQL an Fehlern kommt.

    Ich bin bei deinen Tabellennamen etwas skeptisch. Ist '#' nicht auch ein MySQL Zeilenkommentar?

    Kommentar


    • #3
      Zitat von dominik_1984 Beitrag anzeigen
      irgend etwas funktioniert hier nicht
      Dann ist das wohl irgendwo irgendein Fehler...

      Symptome? Fehler-/Warn-Meldungen?
      Steht
      PHP-Code:
      <?php
      error_reporting
      (E_ALL);
      ini_set('display_errors'1);
      am Anfang des Skripts? Wenn nicht, nachholen.

      Hast Du
      PHP-Code:
      $result mysql_query($sql$mysqlconn) or die(mysql_error()) 
      in Deinem Skript stehen?

      Kommentar


      • #4
        es kommt gar kein fehler jedoch sucht er auch nicht nach den usern. wenn ich folgendes script benütze funktioniert es :

        Code:
        SELECT u.id, u.username, c.avatar, u.name, c.hits 
        FROM #__users AS u RIGHT JOIN  #__comprofiler AS c 
        ON u.id = c.user_id WHERE u.username LIKE '". mysql_real_escape_string($_POST['username']) ."%' 
        
        LIMIT 30
        ";
        d.h. irgendwie funktioniert die OR verknüpfung nicht. Ich möchte einfach nur, dass er entweder beim usernamen oder beim normalen namen etwas eingeben kann und jenachdem in dem feld in der DB sucht. Später sollen noch mehr felder folgen.

        was mach ich bei der or verknüpfung hier falsch???

        Code:
        OR u.name LIKE '". mysql_real_escape_string($_POST['normalname']) ."%'

        Kommentar


        • #5
          seh gerade das folgendes kommt

          Code:
          Notice: Undefined index: username user-suche.php on line 40
          
          Notice: Undefined index: normalname in user-suche.php on line 41
          wo liegt hier der fehlerß

          Kommentar


          • #6
            Zitat von dominik_1984 Beitrag anzeigen
            seh gerade das folgendes kommt

            Code:
            Notice: Undefined index: username user-suche.php on line 40
            
            Notice: Undefined index: normalname in user-suche.php on line 41
            wo liegt hier der fehlerß
            wäre schon nett gewesen zeile 40 und 41 nochmal zu posten
            aber das heißt das es einen array-index nicht gibt. mach doch mal vor deine mysql-anfrage ein
            print_r($_POST);
            und schau was das ausgibt. bzw. es ist generell bei sowas ne gute idee die mysql-query in eine variable zu schreiben und dann auszugeben. da sieht man dann oft ob was an der erstellten query nicht stimmt.

            mfg

            Kommentar


            • #7
              also ich weiss jetzt woran es liegt jedoch nicht wie ich das technisch behebe

              das problem ist das bei folgendem script

              Code:
              $sql = "
              	SELECT u.id, u.username, c.avatar, u.name, c.hits 
              	FROM #__users AS u, #__comprofiler AS c 
              	WHERE u.id = c.user_id 	AND (u.username LIKE '". mysql_real_escape_string($_POST['username']) ."%'
              	OR u.name LIKE '". mysql_real_escape_string($_POST['normalname']) ."%')
              	LIMIT 30
              ";
              also das Problem liegt darin, dass wenn natürlich ich nur im ersten feld etwas eingebe das zweit trotzdem noch erfüllt ist. Nun kam mir die Idee mittels

              if ($username = null) abzufragen ob der wert null ist und wenn nicht dann mit einer AND Verknüpfung zu ergänzen. aber wie mache ich das technisch aslo im script.

              Also der User sucht z.b. einmal nach Username "Blubb" dann erhält er den user mit diesem Username.

              Das andere sucht er nach dem normalen Namen "Hugo" und bei Usernamen nach dem Anfangsbuchstaben "a" und erhält dann eine auswahl von mehreren.

              Ich komm hier einfach nicht weiter. Kann mir jemand helfen ?

              Hoff das war jetzt verständlich was ich möchte.

              einfach eine advanced searchfunktion die mir 2 tabellen durchsucht

              Kommentar


              • #8
                Ich verstehe nicht wo dein Problem ist, du kannst doch einfach [man]isset[/man] und einfache Stringverkettung benutzen?

                PHP-Code:
                $sql "SELECT ... ";

                if(isset(
                $_POST['username']) || isset($_POST['normalname'])){
                  
                $sql .= " WHERE ";
                }

                if(isset(
                $_POST['username'])){
                  
                $sql .= " ... ";
                }

                if(isset(
                $_POST['username']) && isset($_POST['normalname'])){
                  
                $sql .= " OR ";
                }

                if(isset(
                $_POST['normalname'])){
                  
                $sql .= " ... ";

                Kommentar


                • #9
                  ich bin kein php freak

                  habs jetzt so:

                  Code:
                  $sql = "SELECT u.id, u.username, c.avatar, u.name, c.hits 
                  	FROM #__users AS u, #__comprofiler AS c 
                  	WHERE u.id = c.user_id";
                  
                  if(isset($_POST['username']) || isset($_POST['normalname'])){
                    $sql .= " WHERE ";
                  }
                  
                  if(isset($_POST['username'])){
                    $sql .= " u.username LIKE '". mysql_real_escape_string($_POST['username']) ."%'";
                  }
                  
                  if(isset($_POST['username']) && isset($_POST['normalname'])){
                    $sql .= " OR ";
                  }
                  
                  if(isset($_POST['normalname'])){
                    $sql .= "u.name LIKE '". mysql_real_escape_string($_POST['normalname']) ."%'";
                  }

                  jetzt kommt jedoch als fehler

                  Code:
                  Invalid argument supplied for foreach() in /user-suche.php on line 69
                  diese zeile schaut so aus:

                  Code:
                  foreach ($rows as $row) {
                  	echo renderPhoto($row['id'], $row['username'], $row['avatar'], $row['name'], $row['hits']) . "\n";
                  }

                  Kommentar


                  • #10
                    nun das wird wohl daran liegen das dein gebastel da oben 2 mal WHERE in deinen SQL-String schreibt, sowas sieht man wenn man sich mal $sql ausgibt und wenn man mit mysql_error arbeitet, dann wird einem auch gesagt das man einen Syntaxfehler hat

                    bisschen überlegen bitte

                    Kommentar


                    • #11
                      Also ich würde die Query etwas anders gestalten:
                      PHP-Code:
                      $sql "
                        SELECT 
                          u.id, 
                          u.username, 
                          c.avatar, 
                          u.name, 
                          c.hits 
                        FROM 
                          #__users u, 
                          #__comprofiler c 
                        WHERE u.id = c.user_id"
                      ;

                      if(isset(
                      $_POST['username']) || isset($_POST['normalname'])){
                        
                      $sql .= " AND ( ";
                      }

                      if(isset(
                      $_POST['username'])){
                        
                      $sql .= " u.username LIKE '"mysql_real_escape_string($_POST['username']) ."%'";
                      }

                      if(isset(
                      $_POST['username']) && isset($_POST['normalname'])){
                        
                      $sql .= " OR ";
                      }

                      if(isset(
                      $_POST['normalname'])){
                        
                      $sql .= "u.name LIKE '"mysql_real_escape_string($_POST['normalname']) ."%')";
                      }

                      $result mysql_query$sql ) or die ( 'SQL Error: ' mysql_error( ) . '. Statment: ' $sql );

                      while( 
                      $row mysql_fetch_assoc$result ) )
                      {
                        echo 
                      renderPhoto($row['id'], $row['username'], $row['avatar'], $row['name'], $row['hits']) . "\n";
                      }

                      mysql_free_result$result ); 
                      Mfg Tomtaz
                      "Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."

                      Kommentar


                      • #12
                        @tomtaz: das wird mit der klammer so nicht funktionieren, aber ich verrat unserem hilflosen hier mal nix...

                        Kommentar


                        • #13
                          @cycap: Jap stimmt da hast du recht... Seine Konstruktionen werdem dem ganzen ein Strich durch die Rechnung machen...
                          Ich versuche auch Still zu sein...
                          Mfg Tomtaz
                          "Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."

                          Kommentar

                          Lädt...
                          X