kostenloser Webspace werbefrei: lima-city


MySQL sieht einen Fehler, den ich nicht sehe...

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    webfreclan

    Kostenloser Webspace von webfreclan

    webfreclan hat kostenlosen Webspace.

    Die Fehlermeldung: 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 'WHERE id =1' at line 13

    Mein Code:
    <?php
    error_reporting(0);
    include 'data.php';
    include 'config.php';
    mysql_connect($HOST,$USER,$PW)or die(mysql_error());
    mysql_select_db($DB)or die(mysql_error());
        $sql = "SELECT
               id,
               autor,
               title,
               news,
               date,
    		   description,
    		   keywords
            FROM
               wronnay_news
            ORDER BY
               date DESC
    	    WHERE
               id ={$_GET['id']}";
        $result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
        while ($row = mysql_fetch_assoc($result)) {
    	$comments = mysql_num_rows(mysql_query("SELECT id FROM wronnay_news_comments WHERE news_id = '".$row['id']."'"));
    ?>


    Kann mir jemand helfen? - Ich finde den Fehler nicht!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. webfreclan schrieb:
    Kann mir jemand helfen? - Ich finde den Fehler nicht!


    Ich weiß nicht in wiefern das wichtig ist, aber ich würde WHERE und ORDER BY tauschen und evtl das $_GET anders schreiben (denke das ist noch Gewohnheitssache funktionieren bestimmt beide Versionen), scheint mir zumindest das einzige zu sein wo der Fehler liegen könnte:
    $sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id  = '".$_GET['id']."' ORDER BY date DESC";


    Beitrag zuletzt geändert: 8.2.2012 16:20:12 von alfr3d
  4. alias-jongleur

    alias-jongleur hat kostenlosen Webspace.

    verdreh mal das Oder by und Where
    dann drfte es SQL - standart sein
    (@quelle http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html)

    mfg jongleur
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    alfr3d hat den Fehler indirekt behoben, so würde es aber reichen:
    $sql = "SELECT
    	id,
    	autor,
    	title,
    	news,
    	date,
    	description,
    	keywords
    	FROM
    		wronnay_news
    	WHERE
    		id = {$_GET['id']}
    	ORDER BY
    		date DESC";
    ORDER BY muss an letzter Stelle stehen.
  6. Und mit der ungefilterten Verwendung von $_GET['id'] ist jedem Angreifer Tür und Tor geöffnet. :scared:
  7. Autor dieses Themas

    webfreclan

    Kostenloser Webspace von webfreclan

    webfreclan hat kostenlosen Webspace.

    Danke, Problem gelöst!

    alfr3d schrieb:
    webfreclan schrieb:
    Kann mir jemand helfen? - Ich finde den Fehler nicht!


    Ich weiß nicht in wiefern das wichtig ist, aber ich würde WHERE und ORDER BY tauschen und evtl das $_GET anders schreiben (denke das ist noch Gewohnheitssache funktionieren bestimmt beide Versionen), scheint mir zumindest das einzige zu sein wo der Fehler liegen könnte:
    $sql = "SELECT id, autor, title, news, date, description, keywords FROM wronnay_news WHERE id  = '".$_GET['id']."' ORDER BY date DESC";
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    webfreclan schrieb:
    Danke, Problem gelöst!
    Du sollstest statt der direkten Übernahme des GET-Parameters die Funktion mysql_real_escape_string anwenden()! Ansonsten kann jeder ein beliebiges SQL-Kommando ausführen.
  9. Autor dieses Themas

    webfreclan

    Kostenloser Webspace von webfreclan

    webfreclan hat kostenlosen Webspace.

    hackyourlife schrieb:
    webfreclan schrieb:
    Danke, Problem gelöst!
    Du sollstest statt der direkten Übernahme des GET-Parameters die Funktion mysql_real_escape_string anwenden()! Ansonsten kann jeder ein beliebiges SQL-Kommando ausführen.


    Ok, hinzugefügt!

    Beitrag zuletzt geändert: 8.2.2012 16:31:15 von webfreclan
  10. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    So reicht es:
    $sql = "SELECT
    	id,
    	autor,
    	title,
    	news,
    	date,
    	description,
    	keywords
    	FROM
    		wronnay_news
    	WHERE
    		id = ".mysql_real_escape_string($_GET['id'])."
    	ORDER BY
    		date DESC";
  11. Wieso lasst Ihr immer ungeprüfte Abfragen auf eure Datenbanken los? mysql_real_escapestring () ist nicht die Lösung aller Problem.

    hackyourlife schrieb:
    So reicht es:
    $sql = "SELECT
    	id,
    	autor,
    	title,
    	news,
    	date,
    	description,
    	keywords
    	FROM
    		wronnay_news
    	WHERE
    		id = ".mysql_real_escape_string($_GET['id'])."
    	ORDER BY
    		date DESC";


    z.B. einfachste Prüfungen vorher:
    $error = false ;
    
    if ( isset ( $_GET [ 'id' ] ) && is_numeric ( $_GET [ 'id' ] ) )  {
        $nID =  mysql_real_escape_string ( $_GET [ 'id' ] );
    } else {
        $error = true ;
    }
    
    if ( !$error ) {
        // ....
    }


    Ist zwar bei einem numerischen ID relativ, aber wieso die SQL Abfrage ausführen, wenn sie sowieso nicht klappt?

    Beitrag zuletzt geändert: 8.2.2012 20:18:02 von bdsg
  12. bdsg schrieb:
    Wieso lasst Ihr immer ungeprüfte Abfragen auf eure Datenbanken los? mysql_real_escapestring () ist nicht die Lösung aller Problem.

    [...]

    z.B. einfachste Prüfungen vorher:
    $error = false ;
    
    if ( isset ( $_GET [ 'id' ] ) && is_numeric ( $_GET [ 'id' ] ) )  {
        $nID =  mysql_real_escape_string ( $_GET [ 'id' ] );
    } else {
        $error = true ;
    }
    
    if ( !$error ) {
        // ....
    }


    Ist zwar bei einem numerischen ID relativ, aber wieso die SQL Abfrage ausführen, wenn sie sowieso nicht klappt?


    Das "is_numeric()" hätte gereicht, danach brauch man nichts mehr überprüfen, entweder es ist eine Zahl oder nicht...
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!