Bilder aus Datenbank in einem Array speichern und in Xcode verwenden

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bilder aus Datenbank in einem Array speichern und in Xcode verwenden

    Hallo Leute,

    ich hab folgendes Problem, ich möchte Bilder aus meiner mysql Datenbank (Xampp) auslesen und in einem Array speichern (PHP). Diese Funktion wird in meiner App bei einem Klick ausgelöst.

    PROBLEM: Die nachfolgende Funktion stimmt doch oder ?


    <?php

    $mysqlhost="localhost"; // MySQL-Host angeben

    $mysqluser="root"; // MySQL-User angeben

    $mysqlpwd="root"; // Passwort angeben

    $mysqldb="bilder"; // Gewuenschte Datenbank angeben



    $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die

    ("Verbindungsversuch fehlgeschlagen");



    mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht

    waehlen.");



    // Funktioniert Anzahl elements

    /*$sql = "SELECT * FROM bild";;

    $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");

    $anzahl = mysql_num_rows($adressen_query);

    echo "Anzahl der Datensätze: $anzahl";
    */
    // *****************************************





    // Abfrage
    $query = "SELECT picture FROM `bild`";

    // Ergebnis der Antwort
    $result=mysql_query($query);

    // ***** Anzahl Elemente *****
    $anzahl = mysql_num_rows($result);
    // ******

    $obj = mysql_fetch_array($result);

    $image = array();
    for ($i = 1; $i <= $anzahl; $i++) {

    $image[$i] = $obj[$i];
    $i++;
    }


    $row = mysql_fetch_array($result);
    $image_type= $row['img_type'];


    header("Content-type: $image_type");
    echo json_encode($image);


    exit;

    ?>

    Aber jetzt ist folgendes Problem wenn ich in Xcode jetzt das Array ausgeb dann hab ich immer die werte [1: NULL, 2: Null] (es sind 2 Bilder in meiner mysql Tabelle)

    kann mir jemand helfen bin echt schon am verzweifeln ??
    Danke
  • Nur mal so auf die Schnelle.

    bitte nicht den root user verwenden.

    ich vermute mal, dass Du einen httprequest machst.
    das php-Script sendet dir einen json kodierten String. Diesen mußt Du noch parsen.

    Nachtrag. sehe gerade hast Du ja scheinbar schon, denn in deinem Array sind ja scheinbar schon zwei Einträge. sorry.
    okay.

    1. Rufe das phpscript auf und prüfe, ob die Daten richtig gesendet werden (also mit Bildnamen)
    2. prüfe dein json-parser.

    Nachtrag:
    dein php script ist falsch.

    1. per while die rows fetchen
    2. ein array beginnt immer mit dem nullten Eintrag (siehe for schleife)
    3. das i++ ist nicht notwendig, denn Du hast das ja schon in der Forschleife definiert.
    4. $row['img_type']; wo soll das herkommen? es gibt nur ein Feld in deiner row (picture).
    5. insbesondere 1. solltest Du Dir angucken.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von margroth ()

  • Ergänzend zu dem, was margroth schrieb:

    - Warum rufst Du mysql_fetch_array zweimal auf? Es sieht so aus, als ob Du nach dem ersten Fetch die Ergebnisse in ein eigenes Array kopieren willst (was allerdings so nur mäßig sinnvoll ist und die von gargroth genannten Fehler hat). Danach solltest Du die Datenbankverbindung nicht mehr benötigen
    - Es ist schwierig zu sagen, was da passiert und was falsch ist, solange man nicht weiß, wie die Tabelle aufgebaut ist und welche Felder sie enthält. Poste mal die Struktur ("SHOW TABLE" oder "select *" -> fetch -> var_dump oder so). Du kannst natürlich nur existierende Felder selektieren und im natürlich stehen im Ergebnis nur die selektierten Spalten.
    - Tu' Dir selbst einen Gefallen und benutze nicht weiter die alte, verkorkste MySQL-API, sondern PDO. Sauberer, sicherer, portabler.
    Multigrad - 360°-Produktfotografie für den Mac
  • ja mit PDO hab ich noch ned gearbeitet sorry :(

    hab jetzt mein PHP-Script umgeschrieben :) wär super wenn ihr nochmal drüber schauen könnts :)

    und welche frage ich noch hab ich muss dann auch das Json-Framework verwenden in Xcode oder ?

    / Abfrage
    $query = "SELECT picture FROM `bild`";

    // Ergebnis der Antwort
    $result=mysql_query($query);

    // ***** Anzahl Elemente *****
    $anzahl = mysql_num_rows($result);
    // ******


    while($obj = mysql_fetch_array($result)) {

    $image[] = $obj['picture'];
    }

    header("Content-type: $image_type");
    echo json_encode($image);

    exit;
  • Was ich ned versteh is wenn ich das Array dann in xcode ausgeben möchte kommt als wert immer null

    2012-11-19 18:10:32.194 Connect[11944:11303] (
    "<null>"
    )

    was mach ich falsch ????

    Xcode quellcode

    NSString *strURL = [NSString stringWithFormat:@"http://localhost:8888/test.php"];

    NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]];

    NSData *strResult = [[NSData alloc] initWithData:dataURL];

    NSArray * json = [NSJSONSerialization JSONObjectWithData:strResult options:0 error:nil];


    NSLog(@"%@", json );
  • Mh, bei mir sieht die Ausgabe so aus

    Quellcode

    1. ["Image1"]


    Auch hiere im Code

    Quellcode

    1. NSArray * array = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost/index.php"]] options:kNilOptions error:nil];
    2. NSLog(@"array %@", array);


    Ausgabe:


    array (
    Image1
    )
  • ich verstehsss einfach ned :(

    kannst du nochmal drüber schauen bitte :)

    PHP-Script

    // Abfrage
    $query = "SELECT picture FROM `bild`";

    // Ergebnis der Antwort
    $result=mysql_query($query);

    // ***** Anzahl Elemente *****
    $anzahl = mysql_num_rows($result);
    // ******


    while($obj = mysql_fetch_array($result)) {

    $image[] = $obj['picture'];
    }

    header("Content-type: $image_type");
    echo json_encode($image);
    exit;

    Xcode:

    NSArray * array = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:8888/test.php"]] options:kNilOptions error:nil];

    NSLog(@"array %@", array);

    dankeee :)
  • Ja aber wie kann ich dann die einzelnen bilder im array ausgeben bzw. zum Beispiel in einem UIImageView ausgeben ?????

    PHP Script

    <?php

    $mysqlhost="localhost"; // MySQL-Host angeben
    $mysqluser="root"; // MySQL-User angeben
    $mysqlpwd="root"; // Passwort angeben
    $mysqldb="bilder"; // Gewuenschte Datenbank angeben

    $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die

    ("Verbindungsversuch fehlgeschlagen");

    mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht

    waehlen.");

    // Abfrage
    $query = "SELECT picture FROM `bild`";

    // Ergebnis der Antwort
    $result=mysql_query($query);

    // ***** Anzahl Elemente *****
    $anzahl = mysql_num_rows($result);
    // ******

    $row = mysql_fetch_array($result);
    while($obj = mysql_fetch_array($result)) {

    $image[] = $obj['picture'];
    }





    $image_type= $row['img_type'];


    header("Content-type: $image_type");
    echo json_encode($image);
    exit;

    ?>
  • Wenn Du die Zeile "header("Content-type: $image_type");" auskommentierst (//)oder löschst, kannst Du die Rückgabe des PHP scripts sehen. Könnteste übrigens auch speichern und angucken.

    Willst Du eigentlich ein Bild/das Bild zurückbekommen oder nur den Bildnamen.

    Diese 'Zeile gibt immernoch keinen Sinn

    Quellcode

    1. $image_type= $row['img_type'];

    du kannst damit nur das rausziehen, was Du aus der MySQL bekommst. Und da machst Du nur einen SELECT auf Picture.

    Das

    Quellcode

    1. header("Content-type: $image_type");

    und die genannte Zeile davor, läßt mich erahnen, was Du vielleicht tatsächlich willst.
    Das PHP-Script soll Dir einen Bild zurückliefern deswegen der Content-Typ und damit verbundene Download-Request.

    Sowas ist eigentlich unüblich und macht man nur in Ausnahmefällen, wo zum Beispiel über PHP eine Grafik erzeugt wird, dann kann man sich zum Beispiel
    so direkt anzeigen lassen <img src="PHPScript-was-eine-Ueberschrift-erzeugt.php?text=Meine Überschrift"> Wenn der Browser darauf trifft, holt er sich vom Webserver
    die dynamische Grafik und zeigt sie direkt an.

    denn json ist vom Header her
    header('Content-type: application/json');

    oder wird einfach als reiner txt/html ausgeliefert.
    dann klappts auch mit der Anzeige.


    also zunächst einmal die Ausgabe des PHP-Scripts prüfen.
    geht übrigens auch mit
    var_dump($image);exit;
    am Besten kurz nach dem Befüllen.
  • es funktioniert einfach nicht....ich hab immer als ausgabe in Xcode im Array den Wert NULL

    so sieht mein code jetzt aus

    PHP:

    <?php

    $mysqlhost="localhost"; // MySQL-Host angeben
    $mysqluser="root"; // MySQL-User angeben
    $mysqlpwd="root"; // Passwort angeben
    $mysqldb="bilder"; // Gewuenschte Datenbank angeben

    $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die

    ("Verbindungsversuch fehlgeschlagen");

    mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht

    waehlen.");

    // Abfrage
    $query = "SELECT picture FROM `bild`";

    // Ergebnis der Antwort
    $result=mysql_query($query);

    while($obj = mysql_fetch_array($result)) {

    $image[] = $obj['picture'];
    }

    echo json_encode($image);
    exit;

    ?>

    und Xcode

    NSArray * array = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:8888/test.php"]] options:kNilOptions error:nil];

    NSLog(@"array %@", array);

    imageView.image = [UIImage imageWithData:[array objectAtIndex:0]];

    if (imageView.image == nil){

    NSLog(@"image wasn't created");
    } else {
    NSLog(@"image was created successfully");
    }


    UIImage *image = [UIImage imageWithData:[array objectAtIndex:0]];

    [imageView setImage:image];

    aber es funktioniert einfach nicht ich bekomm weder ein bild angezeigt noch einen Wert im Array ist immer als Wert NULL