2 Tabellen selecten (Foreach problem)

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

  • 2 Tabellen selecten (Foreach problem)

    Hallo ich benötige mal eure Hilfe.

    Es geht darum das ich per PHP eine Suchanfrage an die Datenbank(MySql) schicke worauf ich das Ergebnis bekomme.

    userid, username, geschlecht

    Nun würde ich gern auf dieses Ergebnis, aus einer anderen Tabelle das Userbild dazupacken.

    Die Suche ist sehr schmal gehalten und nicht begrenzt man kann nach 3 Kriterien suchen Mann, Frau und Paar.Was bedeutet das wenn man "MANN" sucht derzeit 20 Treffer hat. Ich habe derzeit keinen Ansatz wie ich aus einem ständig sich wechselnden Suchergebnis nun die jeweiligen Bilder der Personen zuordnen soll.

    Einziger Anker ist die userid in Tabelle 'user' und 'bilder'

    Derzeitiger Stand - Ausgabe fehlerfrei
    PHP-Code:
    $sql"SELECT 
            userid,username,geschlecht
                FROM
            date_user
                WHERE 
            geschlecht LIKE ('%"
    .$_POST['geschlecht']."%')
        "
    ;

        
    $result $db->query($sql); 
            
        
    $res_suche = array();

        while(
    $row mysql_fetch_assoc($result)) 
            {
          
    $res_suche[] = $row;
            }

    echo
    "<pre>";
    print_r ($res_suche);
    echo
    "</pre>"
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    userid] => 2
                
    [username] => Meister Lampe
                
    [geschlecht] => Mann
            
    )

        [
    1] => Array
            (
                [
    userid] => 10
                
    [username] => playboy
                
    [geschlecht] => Mann
            
    )

        [
    2] => Array
            (
                [
    userid] => 12
                
    [username] => Sandmann
                
    [geschlecht] => Mann
            
    )

    ............. 

    Wäre für Hilfe sehr dankbar.

    Gruß Thomas
    Zuletzt geändert von escape; 08.10.2010, 22:28.

  • #2
    Versuche es mit einem JOIN:

    Code:
    SELECT 
    user.username, user.geschlecht, bilder.bild
    FROM user JOIN bilder
    ON user.userid = bilder.userid
    WHERE user.geschlecht LIKE 'm'
    GZ,

    Ron

    Kommentar


    • #3
      Boar danke das ware der Anstoss!
      Habe es gleich umgeschrieben und nun passt es perfekt!!!!



      Danke :O)

      Kommentar


      • #4
        Aber was ganz wichtiges fehlt: Das Escaping der Werte.

        Siehe:

        PHP: mysql_real_escape_string - Manual

        PHP: SQL Injection - Manual

        Kommentar


        • #5
          Habe es nun so escaped

          Ich nutze sonst immer addslashes im Verbund mit magic_quotes und Fehlermeldungen aus.

          So:
          PHP-Code:
          $s_ges addslashes(strip_tags($_POST['s_ges'])); 
          Hoffe das ist richtig so?

          Habe den neuen select nun so geschrieben ich hoffe das ist richtig so?
          PHP-Code:

          $suchbegriff 
          $_POST['geschlecht'];
          $suchbegriff mysql_real_escape_string($suchbegriff);


              
          $sql"SELECT 
                      date_user.username, date_user.geschlecht, date_bilder.thumb
                      FROM 
                          date_user 
                      JOIN 
                          date_bilder
                      ON 
                          date_user.userid = date_bilder.userid
                      WHERE 
                          date_user.geschlecht LIKE ('%
          $suchbegriff%')
                      AND
                          hidden = '0'
                  "
          ;
                  
                  
          $result $db->query($sql); 
                  
                  
                  
          $res_suche = array();
                  while(
          $row mysql_fetch_assoc($result))
                  {
                  
          $res_suche[] = $row;

                  } 

          Und was ist nun die Ultimative Lösung?
          Habe nun soviel gelesen über css xss ,... aber genau gescheckt habe ich nicht was nun die beste Lösung ist um sowas zu verhindern.


          Gruß Thomas
          Zuletzt geändert von escape; 09.10.2010, 00:08.

          Kommentar


          • #6
            Zitat von escape Beitrag anzeigen
            Habe nun soviel gelesen über css xss
            Scheinbar nicht genug, bringst nämlich alles durcheinander. Hier gehts um SQL-Injection.

            Wieso vergleichst du das Geschlecht eigentlich mit LIKE? Ist das bei dir im Userprofil und im Suchformular eine Freitexteingabe?

            Kommentar


            • #7
              Nein es ist ein fester Wert aber es sollen noch andere Kriterien hinzugefügt werden. Gebe dir aber Recht im derzeitigen Fall ist die Like@Wildcard überflüssig

              Kommentar


              • #8
                Zitat von escape Beitrag anzeigen
                Habe es nun so escaped

                Ich nutze sonst immer addslashes im Verbund mit magic_quotes und Fehlermeldungen aus.

                So:
                PHP-Code:
                $s_ges addslashes(strip_tags($_POST['s_ges'])); 
                Hoffe das ist richtig so?
                Nein, addslashes() ist die falsche Funktion dafür.

                Kommentar


                • #9
                  Also nehme ich für die $_POST Befehle an die Datenbank

                  PHP-Code:
                  $suchbegriff $_POST['geschlecht']; 
                  $suchbegriff mysql_real_escape_string($suchbegriff); 
                  Ist das so richtig oder funktioniert das mysql_real_escape__query nur innerhalb eines querys?

                  PHP-Code:
                  $suchbegriff*=*mysql_real_escape_string($suchbegriff); 
                  Gruss Thomas
                  Zuletzt geändert von escape; 09.10.2010, 14:30.

                  Kommentar


                  • #10
                    Zitat von escape Beitrag anzeigen
                    Ist das so richtig oder funktioniert das mysql_real_escape_string nur innerhalb einer Query?
                    Das ist so korrekt (vom unsinnigen umkopieren des Parameters abgesehen), und nein, die Funktion funktioniert nicht nur „innerhalb einer Query“ - es gibt überhaupt kein „innerhalb einer Query“, weil du aus Sicht von PHP da zunächst mal nur Strings erzeugst.
                    Allerdings muss für diese Funktion bereits eine geöffnete Datenbankverbindung vorliegen.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Ah ok das habe ich nun verstanden.
                      Aber wie kann ich nun testen ob das mysql real escape string nun auch funktioniert?

                      Gruss Thomas

                      Kommentar


                      • #12
                        Zitat von escape Beitrag anzeigen
                        Aber wie kann ich nun testen ob das mysql real escape string nun auch funktioniert?
                        Bspw. in dem du dir einen Testfall erstellst, von dem du weißt, dass er ohne dieses Escaping nicht funktionieren würde.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar

                        Lädt...
                        X