Ein ARRAY speichern und abrufen


m.scatello

Mitglied
Ich dachte, wenn man ein Form wie dieses
mit eckiger Klammer, muss mann beim UPDATE immer [$i] schreiben
Aber $i existiert doch an dieser Stelle überhaupt nicht! Und wenn du
PHP:
error_reporting(E_ALL);
ini_set('display_errors', true);
am Anfang stehen hättest, wurde dir PHP das sogar verraten. Genau wie ein
PHP:
echo "Auftragsnummer: $auftragsnummer, Bild: $bild";
hinter der ersten Zuweisung.

Warum verweigerst du dich so standhaft richtig zu debuggen?
 

CreativPur

Erfahrenes Mitglied
PHP:
<?php

error_reporting(E_ALL);
ini_set('display_errors', true);



session_start();
require_once("../inc/config.inc.php");
require_once("../inc/functions.inc.php");
require_once("../inc/system.inc.php");
require_once("../inc/header2.inc.php");

if(isset($_POST['speichern'])){
     $error = false;
     $userid = $_POST['userid'];
     $sicherheitscode = $_POST['sicherheitscode'];
     $auftragsnummer = $_POST['auftragsnummer'];
     $auftragsart = $_POST['auftragsart'];
     $auftragsvergabe = $_POST['auftragsvergabe'];
     $kurzbeschreibung = $_POST['kurzbeschreibung'];
     $beschreibung = $_POST['beschreibung'];
     $vorname = $_POST['vorname'];
     $nachname = $_POST['nachname'];

$statement = $pdo->prepare("INSERT INTO auftraege (userid, sicherheitscode, auftragsnummer, auftragsart, auftragsvergabe, kurzbeschreibung, beschreibung, vorname, nachname)
    VALUES (:userid, :sicherheitscode, :auftragsnummer, :auftragsart, :auftragsvergabe, :kurzbeschreibung, :beschreibung, :vorname, :nachname) ");
    $result = $statement->execute(array('userid' => $userid, 'sicherheitscode' => $sicherheitscode, 'auftragsnummer' => $auftragsnummer, 'auftragsart' => $auftragsart, 'auftragsvergabe' => $auftragsvergabe, 'kurzbeschreibung' => $kurzbeschreibung, 'beschreibung' => $beschreibung, 'vorname' => $vorname, 'nachname' => $nachname));
    }
    
    
    
    
    
$userid = $_SESSION['userid'];

$sql = "SELECT * FROM auftraege WHERE userid = $userid ORDER BY id DESC LIMIT 0,1";
$user = $pdo->query($sql)->fetch();

echo $user['bild'];

    // Funktionen definieren
    // -----------------------------------------------
    function checkUpload($myFILE, $file_extensions, $mime_types, $maxsize)
    {
        $errors = array
 

m.scatello

Mitglied
Ich habe
error_reporting(E_ALL);
ini_set('display_errors', true);

am Anfang stehen, aber es kommt keine Meldung !
In Posting #17 steht das nicht!

Und wenn du kein Warning angezeigt bekommt, vermute ich mal, dass dein PHP entweder das Umsetzen der Error-Reportings nicht zulässt oder die Ausgabe trotz ini_set blockiert. Denn in diese beiden Fällen
PHP:
$bild = $_POST['bild'][$i];  // Wo kommt hier $i her????
$auftragsnummer = $_POST['auftragsnummer'][$i]; // Wo kommt hier $i her????
Ist $i nicht vorhanden und das muss eine Notice-Meldung geben.

Letzter Versuch, debugge endlich richtig und schreibe unter diese beiden Zeilen
PHP:
echo "bild = $bild, auftragsnummer = $auftragsnummer, i = $i");
Aber auch das ändert nichts an der Tatsache, dass du den Wert von bild in der DB innerhalb der Schleife mehrfach überschreibst und somit immer nur ein Bildname in der Datenbank steht.

Und wenn ich schon dabei bin:
PHP:
$sql = "SELECT * FROM auftraege WHERE userid = $userid ORDER BY id DESC LIMIT 0,1";
16.14. Warum soll ich nicht SELECT * schreiben?
 

CreativPur

Erfahrenes Mitglied
kann es sein, dass es so heißen muss ? Fehlt da nicht die offene Klammer ?
PHP:
echo ("bild = $bild, auftragsnummer = $auftragsnummer, i = $i");
 

m.scatello

Mitglied
$i scheint ja offensichtlich nicht gesetzt zu sein, da stellt sich mir die Frage, wie dann
PHP:
$auftragsnummer = $_POST['auftragsnummer'][$i];
funktionieren kann. Und Fakt ist auch, dass das Error-Reporting, warum auch immer, nicht greift.
 

CreativPur

Erfahrenes Mitglied
Sorry...
Ich habe aufgrund meiner zahlreichen Versuche
PHP:
$auftragsnummer = $_POST['auftragsnummer'][$i];
zu
PHP:
$auftragsnummer = $user['auftragsnummer'];
umgewandelt..

das mit dem
PHP:
 [$i] habe ich wahrscheinlich irgendwo mal aufgeschnappt.
Aber...
Wenn ich doch mehrere Daten in den gleichen Spaltennamen speichern möchte, muss ich doch
PHP:
<input type="submit" name="bild[]">
also nach dem Namen [] setzen, oder ??

Denn, wenn ich nur ein Bild speichere, und die eckigen Klammern weg lasse, speichert es mir ja richtig.
Aber ich möchte doch mehrere Bilder gleichzeitig abspeicher, allerdings in die vorhandene Zeile, wo auch die Auftragsnummer hervorgeht.
 

ComFreek

Mod | @comfreek
Moderator
Von all den Problemen mit dem Quelltext ist das wohl das Kleinste :D (Der Quelltext featured übrigens XSS u.a.)
 

CreativPur

Erfahrenes Mitglied
Ich hatte mal vor Jahren das Problem, dass ich z.B. in der Datenbank dann folgende Spalten hatte...
Bild1 | Bild2 | Bild3 | .. usw..
Ich glaube, das waren über 50 Spalten..

Dann sagte man mir, dass dies Idiotisch ist, und dann mann die Bilder als ARRAY verpacken kann..
Aber wie gesagt, das ist schon Jahre her und ich weiß nicht mehr, wie ich das dann umgesetzt habe
 

ComFreek

Mod | @comfreek
Moderator
Bild1 | Bild2 | Bild3 | .. usw..
Ich glaube, das waren über 50 Spalten..

Dann sagte man mir, dass dies Idiotisch ist
Ja, das ist in der Tat (i. Allg.) schlechtes Design. Am besten wäre eine many-to-one Abbildung:
  • Eine Relation bilder(id, pfad, auftragsId[auftraege])
  • Deine bestehende Relation auftraege nur ohne Bildspalte.
 

m.scatello

Mitglied
Dann sagte man mir, dass dies Idiotisch ist,
Aber sowas von.....
und dann mann die Bilder als ARRAY verpacken kann.
Das ist genau so idiotisch. Man legt dazu eine eigene Tabelle an, die ungefähr so aussieht:
Code:
CREATE TABLE `bilder` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `id_auftragsnummer` int(11) NOT NULL,
 `bild` varchar(64) COLLATE utf8_german2_ci NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
 

CreativPur

Erfahrenes Mitglied
Das mit der weiteren Tabelle habe ich mir heute morgen auch gedacht und fast die gleiche wie die von m.scatello angelegt.
Aber ich habe es nur geschafft, immer nur ein "bild" einzufügen.
Aber ich möchte doch gleich mehrere Zeilen (in diesem Sinne) speichern..
 

CreativPur

Erfahrenes Mitglied
Und nun habe ich das Script gefunden, wo mehrere Daten-Zeilen auf einmal eingepflegt werden...

PHP:
if(isset($_GET['bild_speichern'])) {
     $error = false;
     $auftragsnummer = $_POST['auftragsnummer'];
     $bild = $_POST['bild'];
     for ($i = 0; $i < count($_POST['bild']); $i++) {
         $auftragsnummer = $_POST['auftragsnummer'][$i];
         $bild = $_POST['bild'][$i];
         $statement = $pdo->prepare("INSERT INTO bilder (bild,auftragsnummer) VALUES (:bild,:auftragsnummer)");
         $statement->execute(array('bild' => $bild, 'auftragsnummer' => $auftragsnummer));
      }
    }

PHP:
echo " <form ".
"action=\"#?bild_speichern\" ".
"method=\"post\">\n";
echo "  <input type=\"text\" name=\"bild[]\" value=\"".$neuer_name."\" />\n";
echo "  <input type=\"text\" name=\"auftragsnummer[]\" value=\"".$user['auftragsnummer']."\" />\n";
echo "  <input type=\"submit\" name=\"submit\" class=\"btn btn-info\" value=\"Upload\" />\n";
echo " </form>\n";
 
Zuletzt bearbeitet:

m.scatello

Mitglied
Also, ich bin raus, du bist in meinen Augen ein hoffnungsloser Fall.

Du klimperst irgendwelche Zeilen in deinen Editor und wenn es nicht funktioniert, landest du hier.

Aber nicht eine Debug-Ausgabe eingebaut und "funktioniert nicht" ist keine Problembeschreibung.

Wie gesagt, ich bin raus, viel Erfolg noch mit dem Script.
 

Neue Beiträge