Variablen in SQL Abfragen

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

  • Variablen in SQL Abfragen

    Hallo,

    ich verwende bei einer SQL Abfrage bei "Where" für die Spalte die Variable $branche.

    Der Wert kommt aus einem Formular mit Drop Down Menu. Die erste Abfrage funktioniert. Beim weiterblättern gibt mysql_error() folgende Fehlermeldungen aus:

    [COLOR="Red"]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'x' LIMIT 2, 2' at line 3
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in K:\htdocs\test\suchen.php on line 46

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in K:\htdocs\test\suchen.php on line 63
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= 'x'' at line 3[/COLOR]

    Wenn ich der Variable $branche direkt den Wert "tonstudio" zuweisen, funktioniert das Script ohne Probleme. Ich vermute den Fehler im mysql Query, bin mir aber nicht sicher, weil die Gegenprobe (Variable direkt zuweisen) keinen Fehler zeigte.

    Hier mal der Quelltext. Was mache ich falsch?
    Danke für Eure Hilfe.


    PHP-Code:
    <form action="<?php $PHP_SELF ?>" method="POST">
    <select name='branche'>";
    <option value='label'>Label</option>";
    <option selected value='tonstudio'>Tonstudio</option>
    </select>
    <input type='submit' value='suchen' name='suchen'>
    </form>

    <?php
    //Abfrage auf welcher Seite man ist 
    $seite $_GET["seite"];  

    //Wenn man keine Seite angegeben hat, ist man automatisch auf Seite 1 
    if(!isset($seite)) 

         
    $seite 1


    //Einträge pro Seite: Hier 2 pro Seite 
    $eintraege_pro_seite 2

    //Ausrechen welche Spalte man zuerst ausgeben muss: 
    $start $seite $eintraege_pro_seite $eintraege_pro_seite

    //Verbindung zur Datenbank aufbauen 
    include "inc/connect.php";

    $branche $_POST ["branche"];

    //$branche= 'tonstudio';

    //Tabelle Abfragen 
    $abfrage mysql_query    
    ("
        SELECT  *         
        FROM    tonstudios 
        WHERE    
    $branche = 'x' 
        LIMIT 
    $start$eintraege_pro_seite
    "
    );
                            
    echo 
    mysql_error();    
                                                                
    $ergebnis $abfrage

    //Ausgabe Ergebnisse
    while($row mysql_fetch_object($ergebnis)) 
    {
        echo 
    $row->firma;
        echo 
    $row->plz;
        echo 
    $row->ort;
    }
                                                
    //Jetzt kommt das "Inhaltsverzeichnis", 
    //sprich dort steht jetzt: Seite: 1 2 3 4 5 

    $result =mysql_query    
    ("
        SELECT  *         
        FROM    tonstudios 
        WHERE    
    $branche = 'x' 
    "
    );
                                
    $menge mysql_num_rows($result); 
    echo 
    mysql_error();

    //Errechnen wieviele Seiten es geben wird 
    $wieviel_seiten $menge $eintraege_pro_seite

    //Ausgabe der Seitenlinks: 
    echo "<div align=\"center\">"
    echo 
    "<b>Seite:</b> "


    //Ausgabe der Links zu den Seiten 
    for($a=0$a $wieviel_seiten$a++) 

                   
    $b $a 1

              
    //Wenn der User sich auf dieser Seite befindet, keinen Link ausgeben 
                   
    if($seite == $b
                      { 
                         echo 
    "  <b>$b</b> "
                      } 

              
    //Aus dieser Seite ist der User nicht, also einen Link ausgeben 
                  
    else 
                      { 
                          echo 
    "  <a href=\"?seite=$b\">$b</a> "
                      } 


    echo 
    "</div>"
    ?>

  • #2
    Zitat von mrlack34 Beitrag anzeigen
    Ich vermute den Fehler im mysql Query
    Da vermutest du falsch.

    Du versuchst auf $_POST ["branche"] zuzugreifen – aber einen solchen Parameter gibt es beim Blättern natürlich nicht mehr, weil die Aufrufe der weiteren Seiten per GET geschehen. (Das hätte dir vernünftig eingestelltes error_reporting auch verraten – also bitte schleunigst machen!)

    Entweder speicherst du diesen Wert also beim ersten Aufruf in eine Session; oder du musst ihn mit jedem Blätter-Link als zusätzlichen Parameter mit übergeben.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Variablen in SQL Abfragen

      Danke für die Lösung. Hab es grob verstanden. Da ich mit Sessions bis jetzt noch nicht die Erfahrung habe:

      1. Wenns nicht zuviel Arbeit macht. Kann mir einer bitte sagen, wie ich den Code ändern muß. Ein Beispiel wäre hilfreich, um es nachvollziehen zu können.

      2. Oder wo finde ich ein Beispiel für eine Blätterfunktion mit Sessions?

      Für den Lern- und Versteheffekt brauche ich ein funktionierndes Beispiel, wenn auch sehr einfach gehalten.
      Danke für Eure Hilfe.

      Kommentar


      • #4
        Hi,

        bin mir nicht ganz sicher, da ich auch eher ein Anfänger bin, aber ich mache es so:
        $_SESSION["branche"] = mysql_real_escape_string($_POST["branche"]);
        Damit hast du die SESSION erstellt.
        Das mysql_real_escape_string bringt meines Wissens mehr Sicherheit, da Formular-Daten ganz einfach vom User bösartig verändert werden könnten, um so neue MySQL-Abfragen oder ähnliches zu erstellen.
        Wenn ich mich täusche, berichtigt mich bitte, aber ich glaube das stimmt so
        Mit der SESSION geht das auf jedenfall, also hatte das bei meinen alten Seiten auch so.

        LG

        Kommentar


        • #5
          @ImmerOn:

          Du hast zwar recht, dass Benutzerdaten per se als gefährlich anzusehen sind, aber deren Prüfung, Maskierung, Umcodierung, etc. muss genau dort vorgenommen werden, wo sie verwendet werden sollen. mysql_real_escape_string (mal davon abgesehen, dass es veraltet ist) ist nur in Verbindung mit einer Datenbankabfrage sinnvoll. In einer Session hat es nichts verloren.

          Siehe auch Artikel:Kontextwechsel ? SELFHTML-Wiki

          Gruß,

          Amica
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Ok danke, der TE müsste dann ja die SESSION in seiner MySQL-Abfrage nutzen. Kann man bei SESSIONs auch mysql_real_escape_string verwenden?
            Also mysql_real_escape_string($_SESSION["..."])

            Das dies veraltet ist weiß ich auch, ich arbeite nur noch mit MySQLi Prepared-Statements, da wurde mir gesagt dass dies ziemlich sicher ist.

            LG

            Kommentar


            • #7
              Das wäre der richtige Weg. Genau dann, wenn man eine SQL-Abfrage bastelt, escapet man den Wert. Woher dieser dann kommt (Formular, Session, Cookie, Textdatei, vorherige Datenbankabfrage) ist absolut egal. Kurz: mysql_real_escape_string($_SESSION["irgendwas"]) geht natürlich genauso.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                starke Unterstützung auf jeden Fall nice

                LG
                Zuletzt geändert von TobiaZ; 17.09.2012, 15:25.

                Kommentar

                Lädt...
                X