DB Abfrage - Array ausgeben?!

Huaba

Semiprofi
Thread Starter
Mitglied seit
02.06.2007
Beiträge
4.583
Hi,

ich will n result aus ner db ausgeben, aber da funzt nix Oo

Tabelle sieht so aus:
ID|DateiName|Besitzer
und ist NICHT leer!

PHP:
$result2=$dbname->query("select DateiName from uploads where Besitzer = '$besitzer'");
$result2=$result2->fetch_assoc;

while ($result2->fetch_row != FALSE) {
$result2->fetch_row;
echo $result2['DateiName'];
}

wo is mein fehler?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
versuchs mal mit:

PHP:
$result2=$dbname->query("select DateiName from uploads where Besitzer = '$besitzer'"); 
    while ($row = $result2->fetch_assoc()) {
        echo $row["DateiName"];
    }
 
hm, hast du da ne extra sql klasse, ansonsten mit mysql_error() die daten ausgeben.
wenn $result2 nen objekt ist, bekommst du sicherlich nen array von der methode "fetch_row" zurück.

ergo probier mal sowas:

PHP:
$tmp = $result2->fetch_row;
echo $tmp['DateiName'];
 
das Problem an der Sache ist, dass jeder aufruf von fetch_row() den Zeiger im internen Ergebnissarray weiter setzt. Da du nur einen Datensatz hast und der zeiger zweimal weitergesetzt wird, wird nichts angezeigt, da der Zeiger dann schon am Ende ist.

Der Ansatz von Nascar sollte passen.

PHP:
while($row = $result2->fetch_row) {
print_r($row);
}
 
Zuletzt bearbeitet:
danke euch! werd mal rumtesten :)
 
$result2=$dbname->query("select DateiName from uploads where Besitzer = '$besitzer'");
Böser Anfängerfehler. Übergebe niemals Variablen direkt an eine SQL-Abfrage, sondern verwende immer mysql_real_escape_string(). Andernfalls lassen sich deine Abfragen durch SQL-Injections problemlos zweckentfremden.

Oder lerne es von Anfang an richtig und benutz PDO. Es ersetzt automatisch alle Platzhalter mit dem Inhalt der Variablen und "escapet" alle Sonderzeichen mit denen sich die Abfrage manipulieren lässt. Damit sind SQL-Injections ausgeschlossen.

Und ein Tipp zur Übersichtlichkeit: Schreibe immer alle Schlüsselworte GROSS (SELECT .. FROM .. WHERE .. AND .. OR ..). Dadurch fällt es später leichter bei Änderungen die richtigen Stellen zu finden und Syntaxfehler zu erkennen.
 
so also die schleife ging!

danke infinitiy! da smit den schlüsselwörtern is gut, ich versuch e immer richtig einzurücken etc, aber das machts echt besser! :wink:

wegen der sql injection, das hab ich noch nciht ganz kapiert. kannst du meinen code dann mal "umschreiben"?!

ty, mfg

€: und was mich brennend interessieren würde:

wenn ich jetzt z.b. diese seite so lassen würde, wie könnte ein außenstehender hier ne sql injection durchführen? ich meine, er kommt ja nciht an den code ran? das brennt mir schon die ganze zeit unter den nägeln :d
 
Zuletzt bearbeitet:
$sql = "select DateiName from uploads where Besitzer = '" . mysql_real_escape_string($besitzer) . "";

die frage ist halt wo das $besitzer herkommt. wenn das eine variable ist, auf die der Nutzer zugriff hat (per $_GET oder $_POST) dann er eine SQL injection versuchen.
In der Regel probiert man einfach alle Parameter durch, auch ohne den Code zu kennen.
 
$sql = "select DateiName from uploads where Besitzer = '" . mysql_real_escape_string($besitzer) . "";

die frage ist halt wo das $besitzer herkommt. wenn das eine variable ist, auf die der Nutzer zugriff hat (per $_GET oder $_POST) dann er eine SQL injection versuchen.
In der Regel probiert man einfach alle Parameter durch, auch ohne den Code zu kennen.

$besitzer is ne session ->
PHP:
$besitzer=$_SESSION['besitzer'];

wie allerdings so ne injection funktionieren sollte weiß ich nicht Oo kann das mal einer für normale pc user erklären? :d

aber danke für den tipp, werd ich machen! sollt ich das bei jeder variablen machen, die ich in ner sql abfrage benutze??

mfg
 
wie allerdings so ne injection funktionieren sollte weiß ich nicht Oo kann das mal einer für normale pc user erklären? :d
http://de.wikipedia.org/wiki/SQL_Injection
Ist da ausführlich erklärt, wie oben schon verlinkt.

sollt ich das bei jeder variablen machen, die ich in ner sql abfrage benutze??

Das sollte man mindestens bei jeder Variablen machen, die entweder direkt eine Benutzereingabe enthält oder indirekt aus einer Benutzereingabe gewonnen wird. Wenn mans aber konsequent immer einsetzt (was der Ansatz von PDO ist), kann mans nicht vergessen.
 
kurz und knapp: vielen dank, schon wieder was dazugelernt :-)
 
hi, hab nochmal ne frage.. zu dem escape string, WO muss ich das machen?!

codeschnipsel:
PHP:
try {
		$dbname=new mysqli(".",".",".",".");
		
		if (isset($_POST['download'])) {
			$datei = $_POST['datei'];
			if ($_POST['datei']==NULL) {
				echo 'Sie muessen schon eine Datei auswaehlen! <a href="download.php">Zurueck zum Downloadbereich</a><br>';
			}

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


else if (isset($_POST['loeschen'])) {
				$result=$dbname->query("Select ID as id From . where DateiName='$datei'");
				$ID=$result->fetch_assoc();
				$neuerDateiName=$ID['id']."_".$datei;	
				
				$result=$dbname->query("Delete From uploads where DateiName='$datei'");
				$dateipfad = "/pfad/".$neuerDateiName;
				unlink($dateipfad);

und so weiter...
 
in dem fall solltest du $datei escapen, da man andernfalls halt einen query einschleusen könnte. praktisch:
PHP:
$datei = mysql_real_escape_string($_POST['datei']);
 
a... also alles was ich per Post übergebe? danke! :)

muss ich sosnt auf was achten?
 
ja :d du solltest auch alles escapen was per get kommt :)
 
Und alles was irgendwie in irgendeinerform vom User kommt... post, files, cookies.... sicherheitshalber wuerde ich auch noch alle ausgaben escapen.
 
vielen dank. das wird dann e noch ne zeit in anspruch nehmen :d
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh