Datenbanken (SQL) - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline

Namen aus Gruppen LAden

Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Sonntag den 07.02.2010 um 12:23:01

Moin,

ja ich habe mal wieder ein prob. mit SQL... Ich möchte mir aus meiner SQL Tabelle nur die Namen raus holen die in der jeweiligen Gruppe ein getragen sind, aber irgend wie sagt er mir immer:

 
sql
1
2
SQLFatal error:  Call to a member function fetch_object() on a 
non-object in C:\xampp\htdocs\exis\new\download.php on line 31

Das kann ich aber nun garnicht nach volziehen, weil der Zeiger eigentlich auf der Gruppe stehen müsste. Weil in der Variable "$gruppe" ist ja die Gruppe die ich haben möchte Geladen.

So ich bin nun wie folgt vorgegangen:

download.php?gruppe=SQL  
HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
//config.php:
if (isset($_GET['gruppe'])) {
$gruppe = ($_GET['gruppe']);
}


//SQL.php
<?php
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = '$gruppe'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
echo ($zeile->name);
}
?>

So ich denke der Code ist soweit verständlich?

Gruß eXis


christian
Beiträge: 249

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von christian christian, am Sonntag den 07.02.2010 um 12:29:57

nur ganz schnell überflogen, aber probiers mal so:

 
PHP
1
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';

Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Sonntag den 07.02.2010 um 12:34:02
Zitat von: christian

nur ganz schnell überflogen, aber probiers mal so:

 
PHP
1
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';

Kommt das selbe... Wobei ich nicht glaube das die Variable nicht richtig Indiziert wird. Weil wen ich diese über "echo $gruppe" aufrufe stehts ja drin...

Gruß eXis


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Sonntag den 07.02.2010 um 13:25:44
Zitat von: christian

nur ganz schnell überflogen, aber probiers mal so:

 
PHP
1
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = \''.$gruppe.'\'';

Mann mann Markus man sollte es auch mal richtig abschreiben... xD Also da mit geht es... Versteh ich aber irgend wo nicht, weil an einer anderen stelle habe ich das auch anders gelöst und da ging es super...

Naja evtl kann es mir ja noch mal wer erklären :)

Gruß eXis


Holger V
Beiträge: 574

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Holger V Holger V, am Sonntag den 07.02.2010 um 18:29:10

Strings, man achte auf ' und " und der Verkettungsoperator.


Jannik Zschiesche
Beiträge: 370

PN schreiben
Profil ansehen
User ist online
Link zur Antwort auf "Namen aus Gruppen LAden" von Jannik Zschiesche Jannik Zschiesche, am Sonntag den 07.02.2010 um 23:50:54
Zitat von: Markus B.
download.php?gruppe=SQL  
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
download.php?gruppe=SQLPHP//config.php:
if (isset($_GET['gruppe'])) {
$gruppe = ($_GET['gruppe']);
}


//SQL.php
<?php
$ausgabe = 'SELECT id, gruppe, name FROM download WHERE gruppe = '$gruppe'';
$go = $mysqli->query($ausgabe);
while ($zeile = $go->fetch_object()) {
echo ($zeile->name);
}
?>

Du hast da drei größere Fehler in deinem Script:

  1. Du verwendest als einfache Anführungszeichen in einfachen Anführungszeichen. Bei dir geht der erste String so
    'SELECT id, gruppe, name FROM download WHERE gruppe = '
    danach kommt
    $gruppe
    und danach nochmal ein String:
    ''

    Das hätte eigentlich einen Fatal Error werfen müssen... Nunja, wenn du außen oder innen doppelte Anführungszeichen verwendest, funktioniert es wieder (oder, wie vorgeschlagen, die inneren Anführungszeichen escape-st). Warum in deinem Fall doppelte außen vielleicht geschickter sind ... siehe 2.
  2. In einem String in einfachen Anführungszeichen werden keine Variablen ersetzt, er wird so angezeigt, wie er eingegeben wurde. Lässt sich einfach durch ein
    echo $ausgabe;
    überprüfen.
  3. Du validierst die Eingabe nicht und verwendest auch nicht z.B. mysql_real_escape_string(). Das Script ist derzeit ein offenes Scheunentor für jedweden Angriff.


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Montag den 08.02.2010 um 20:27:53

Naja was heist Eingabe? Jede eingabe die du oben in der URL machst wird über eine If Anweisung geprüft ob diese einen Wer enthält.

Wende nun z.B. das hier "exis/test/download.php?site=<h1>3</h1>" eingibst oder andere Sachen anhängst passiert nix, weil der wert 3 nun keine Nummer mehr entspricht und so die IF Anweisung Flase zurückgibt.

 
HTML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
                                    if(is_numeric($id_out)) {
                                        $ausgabe = 'SELECT id, datum, cat, ueberschrift, intro, text, pic FROM news WHERE id = '.$id_out.'';
                                            $go = $mysqli->query($ausgabe);
                                                while ($zeile = $go->fetch_object()) {
                                                    echo '<span class="date"><img src="icons/calendar.gif" />'. date("d.m.y.",($zeile->datum)) . '</span>';
                                                    echo '<h2>'. ($zeile->ueberschrift).'</h2>';
                                                    echo '<p>' . ($zeile->intro) . '</p><br />';
                                                    echo '<p>'. ($zeile->text) . '</p>';
                                                    $imgurl = ($zeile->pic);
                                                    
                                    }
                                    }

Kannst es auch gern hier testen...

Gruß eXis


Jannik Zschiesche
Beiträge: 370

PN schreiben
Profil ansehen
User ist online
Link zur Antwort auf "Namen aus Gruppen LAden" von Jannik Zschiesche Jannik Zschiesche, am Montag den 08.02.2010 um 23:54:14
Zitat von: Markus B.

Wende nun z.B. das hier "exis/test/download.php?site=<h1>3</h1>" eingibst oder andere Sachen anhängst passiert nix, weil der wert 3 nun keine Nummer mehr entspricht und so die IF Anweisung Flase zurückgibt.

Moment - wenn sich der Quellcode mittendrin grundlegend ändert, macht es keinen Sinn, dir helfen zu wollen. Der Quellcode in deinem letzten und der Quellcode in deinem ersten Posting sind einfach grundlegend andere.

Poste doch einfach mal den aktuellsten Code, um den es hier auch geht.


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Dienstag den 09.02.2010 um 17:27:29

Joa gut hier der Code, aber viel anders sieht dieser auch nicht aus

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
      <?php
                            if (isset ($gruppe)) {
                                $ausgabe = 'SELECT id, datum, name FROM download WHERE gruppe = \''.$gruppe.'\'';
                                            $go = $mysqli->query($ausgabe);
                                            while ($zeile = $go->fetch_object()) {
                                            ?>
      <p><a href="download.php?site=<?php echo ($zeile->id); ?>"><?php echo ($zeile->name); ?></a></p>
      <?php
                                            }
                            
                            } elseif (is_numeric ($id_out)) {

                            $ausgabe = 'SELECT id, datum, intro, name FROM download WHERE id = \''.$id_out.'\'';
                                            $go = $mysqli->query($ausgabe);
                                            while ($zeile = $go->fetch_object()) {
                                                echo ($zeile->name);
                                                echo ($zeile->intro);
                                            } 
                                            } else {
                                                ?>

Jannik Zschiesche
Beiträge: 370

PN schreiben
Profil ansehen
User ist online
Link zur Antwort auf "Namen aus Gruppen LAden" von Jannik Zschiesche Jannik Zschiesche, am Dienstag den 09.02.2010 um 17:54:26

Wie wird $gruppe befüllt?


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Dienstag den 09.02.2010 um 18:30:06

Durch:

 
PHP
1
2
3
if (isset($_GET['gruppe'])) {
$gruppe = ($_GET['gruppe']);
}

Jannik Zschiesche
Beiträge: 370

PN schreiben
Profil ansehen
User ist online
Link zur Antwort auf "Namen aus Gruppen LAden" von Jannik Zschiesche Jannik Zschiesche, am Dienstag den 09.02.2010 um 19:51:19

... du gibst es also wirklich ungeprüft weiter an die Datenbank. Ich empfehle einmal folgende Website wirklich zu lesen.

http://de.wikipedia.org/wiki/SQL-Injection


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Dienstag den 09.02.2010 um 19:58:20
Zitat von: Jannik Zschiesche

... du gibst es also wirklich ungeprüft weiter an die Datenbank. Ich empfehle einmal folgende Website wirklich zu lesen.

http://de.wikipedia.org/wiki/SQL-Injection

Ach mann ej... Teste es doch einfach, dann wirst du sehen das es einfacht nicht geht... Gib nen beliebigen SQL Code in die URL ein oder versuch meinetwegen ne Shell auf das System zu laden... Es wird dir einfach nicht gelingen, weil ich dies schon alles probiert habe... Und im großen und ganzen ist sin und zweck der Gesichte irgend welche Kiddis fern zu halten, denn wen jemand deine Seite knacken will dann schaft er es auch, es fliegen schließlich genug Sploits (für alle Distributionen) im Netz herum.

Gruß eXis


Jannik Zschiesche
Beiträge: 370

PN schreiben
Profil ansehen
User ist online
Link zur Antwort auf "Namen aus Gruppen LAden" von Jannik Zschiesche Jannik Zschiesche, am Dienstag den 09.02.2010 um 21:41:26
Zitat von: Markus B.

Und im großen und ganzen ist sin und zweck der Gesichte irgend welche Kiddis fern zu halten, denn wen jemand deine Seite knacken will dann schaft er es auch, es fliegen schließlich genug Sploits (für alle Distributionen) im Netz herum.

Das ist ein gutes Argument. Ich kann meine Haustüre ja einfach offen lassen, da man sie ja einfach mit einem Auto einfahren könnte - da bringt das Schloss ja wenig. "... denn wenn jemand meine Haustür aufbrechen will, dann schafft er es auch, es fahren schließlich genug Autos (in allen Marken) auf der Straße herum."

---

Tut mir leid, ich werde es nicht testen. Wenn man die grundlegenden Sicherheitsmaßnahmen beim Programmieren mit einer solchen Vehemenz ablehnt, dann will ich mir auch keinen Aufwand machen, diese aufzuzeigen.


Markus B.
Beiträge: 416

PN schreiben
Profil ansehen
Homepage besuchen
User ist offline
Link zur Antwort auf "Namen aus Gruppen LAden" von Markus B. Markus B., am Mittwoch den 10.02.2010 um 19:50:57

Na gut gehe ich mal auf deine Lösung ein! Was meinst denn was man tuen müsste um einen Cracker aus zu sperren?
Also in wie fern sol ich den noch meine $_GET Vraible prüfen das es in deinen Augen Sicher ist?

Gruß eXis