Bilder Upload
Hazel
- php
3 dedlfix0 Dosenmensch0 TSO
Guten Morgen,
ich hab ein kleines Problem mit meinem Bilder Upload, mein Script sieht derzeit so aus:
$files = array();
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$sql = mysql :: instance();
$_SESSION["form_data"] = $_POST;
$sql->table('user_alben_bilder')->data($_POST)
->ignore(array('abschicken'))
->checkRequiredFields()
->callback(
function($data){
if(count($data->error))
return;
$upload = upload :: instance($_FILES['bild']);
$token = helper :: instance() -> token('bild_',1,'32');
if($upload->uploaded){
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$data->data('bild',$upload->file_dst_name);
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
$upload->clean();
}
}
}
)
->callback(
function($data){
$profil = mysql::instance()->UserDaten()->user_id;
$album = $_GET['album'];
$data->data('uab_ip',$_SERVER['REMOTE_ADDR'])
->data('uab_albenID',$album)
->data('uab_userID',$profil);
}
)
->insert();
}
Folgende Felder werden RICHTIG eingetragen:
Das Feld bild bleibt leer, es wird auch kein Bild in den Ordner geschoben. Schau ich mir die Log Datei an, sehe ich diesen Eintrag:
[Fri Apr 25 10:18:32 2014] [error] [client 78.48.xxx.xxx] PHP Warning: mime_content_type(): Can only process string or stream arguments in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 2866, referer: xxx
[Fri Apr 25 10:18:32 2014] [error] [client 78.48.xxx.xxx] PHP Warning: getimagesize() expects parameter 1 to be string, array given in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 2886, referer: xxx
[Fri Apr 25 10:18:32 2014] [error] [client 78.48.xxx.xxx] PHP Warning: preg_match() expects parameter 2 to be string, array given in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 2913, referer: xxx
Hat wohl etwas mit meiner Schleife zu tun. Nehme ich diese wieder raus, sprich diese Zeilen:
$files = array();
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
}
läuft das Script wieder brav durch. Seht ihr zufällig den Fehler?
Tach!
Seht ihr zufällig den Fehler?
Mit Zufall programmiert und fehlersucht es sich ziemlich ungewiss. Kontrollausgaben (zum Beispiel mit var_dump()) deiner Variableninhalte sollten zielführender sein. Finde zunächst heraus, wo Wunsch und Wirklichkeit auseinanderlaufen.
dedlfix.
Hello,
[code lang=php]
$files = array();
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
gucks dir mal genau an.
mach mal print_r($files) bzw. var_dump($files). Ist u.a. auch ein typischer Fall von keine geschweifte Klammer bei if setzen, weil man ja sowieso nur eine Anweisung hat. Hat man aber Anweisungen > 1, vergessen die Leute dann die Klammer.
Hallo,
mach mal print_r($files) bzw. var_dump($files). Ist u.a. auch ein typischer Fall von keine geschweifte Klammer bei if setzen, weil man ja sowieso nur eine Anweisung hat. Hat man aber Anweisungen > 1, vergessen die Leute dann die Klammer.
wenn ich das var_dump ausgeben lasse, erhalte ich folgendes
array(2) { [0]=> array(5) { ["name"]=> string(14) "Lighthouse.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpsTwR6B" ["error"]=> int(0) ["size"]=> int(561276) } [1]=> array(5) { ["name"]=> string(12) "Penguins.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(14) "/tmp/phpeuzr81" ["error"]=> int(0) ["size"]=> int(777835) } }
Hi,
mach mal print_r($files) bzw. var_dump($files). Ist u.a. auch ein typischer Fall von keine geschweifte Klammer bei if setzen, weil man ja sowieso nur eine Anweisung hat. Hat man aber Anweisungen > 1, vergessen die Leute dann die Klammer.
wenn ich das var_dump ausgeben lasse, erhalte ich folgendes
Du zitierst drei Sätze und zwei getrennte Aussagen – und schaffst es immerhin, auf den/die erste davon ein zu gehen – Respekt!
MfG ChrisB
AHA! Mehr fällt mir da nicht ein. Ich hab das gemacht, was man von mir verlangt hat. Die Klammern stimmen, ich kann wohl noch zählen!
Hallo Hazel,
Die Klammern stimmen, ich kann wohl noch zählen!
Da sind zu wenig Klammern (die beiden Zeilen nach if (!array_key_exists($i, $files)) sollen wohl nur ausgeführt werden wenn die Bedingung true gibt, momentan wird die zweite der Zeilen nach dem if immer ausgeführt - ich weiß nicht ob das Absicht ist) - und wo nix ist kann man auch nix zählen ...
Gruß,
Tobias
Hallo,
nein es sind wirklich nicht zu wenig klammern, sonst wurden doch auf der Seit ein Fehler kommen, dass Klammern zu wenig bzw. zu viele sind.
Es liegt an diesen Zeilen wohl:
Warning: move_uploaded_file(/tmp/phpJGTpU0): failed to open stream: No such file or directory in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 3644 Warning: move_uploaded_file(): Unable to move '/tmp/phpJGTpU0' to 'media/bilder/gross/6497355cf81d9b7794f65f29c16d501e.jpg' in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 3644
Hallo Hazel,
nein es sind wirklich nicht zu wenig klammern, sonst wurden doch auf der Seit ein Fehler kommen, dass Klammern zu wenig bzw. zu viele sind.
Nein. Der Fehler ist logischer Art, der Syntax ist richtig deswegen gibt es auch keine Fehlermeldung.
Warning: move_uploaded_file(/tmp/phpJGTpU0): failed to open stream: No such file or directory in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 3644 Warning: move_uploaded_file(): Unable to move '/tmp/phpJGTpU0' to 'media/bilder/gross/6497355cf81d9b7794f65f29c16d501e.jpg' in /data/www/b1/xxx/html/WebSeite/include/classes/upload.class.php on line 3644
Existieren alle angegebenen Verzeichnisse mit ausreichenden Rechten?
Gruß,
Tobias
Hallo,
... der Syntax ist richtig ...
arrrgh, autsch.
DIE Syntax!!
Ciao,
Martin
Mahlzeit,
arrrgh, autsch.
DIE Syntax!!
Findest du das nicht sexistisch?
Hallo,
arrrgh, autsch.
DIE Syntax!!
Findest du das nicht sexistisch?
nö, höchstens genial. ;-)
*scnr*
Martin
Hallo,
Existieren alle angegebenen Verzeichnisse mit ausreichenden Rechten?
ja die Ordner und auch die Rechte sind vorhanden. Hab das Gefühl, dass es an diesem hier liegt:
->callback(
function($data){
.....
ein ex Freund meinte auch, ja daran liegt es, meinte dazu nur "ich weiß, wurde schon in der neuen version gefixt da gibts nun is_submited()" Ich verstehe die Funktion nicht, muss mit dem leben was ich habe.
Irgendwie hat $data keine Daten mehr, wenn er die foreach durchgeht, aber ich weiß es nicht. Kann nur sagen was in der Datenbank und in den Logs ankommt.
Tach!
nein es sind wirklich nicht zu wenig klammern, sonst wurden doch auf der Seit ein Fehler kommen, dass Klammern zu wenig bzw. zu viele sind.
Wenn da nicht ein Klammernpaar zu wenig ist, dann ist die Einrückung falsch. Statt
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
müsste es so sein:
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
dedlfix.
Ich habe Die mal einen *asterix verpasst, weil Einrückungen ein wichtiges, oft unterschätztes Thema sind. Es gibt sogar Namen dafür!
# Einrückung nach Java/Sun
foreach my $e(keys %ENV){
if($e eq 'OS'){
say "$e => $ENV{$e}";
}
}
# Einrückung nach Whitesmith
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
Von einem Style zum Anderen geschaut, entsteht rein optisch der Eindruck, dass die Zuordnung der Matching-Braces eine Andere ist, jedoch: Beide Styles sind legitim und gängige Praxis. Der Code macht in beiden Fällen, was er soll.
@@hotti:
nuqneH
Einrückung nach Java/Sun
Einrückung nach Whitesmith
[code lang=perl]
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
Meine bevorzugte Variante.
Qapla'
--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
Hello,
Einrückung nach Allman
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
>
> Meine bevorzugte Variante.
Glückwunsch!
Da bin ich ja nicht der einzige alte Knochen hier, der lieber etwas mehr Luft lässt für die Lesbarkeit :-))
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bikers-lodge.com>
Hallo
Einrückung nach Allman
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
>
> Meine bevorzugte Variante.
Hier die meine (wenn auch mit PHP statt Perl). [@Tom](https://forum.selfhtml.org/?t=217257&m=1492161): so find ich's noch ein wenig fluffiger.
~~~perl
# Einrückung nach WeißNichtWer
' Einrückung mit Tabs statt wie hier mit Leerzeichen
foreach my $e (keys %ENV)
{
if ($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
Tschö, Auge
Hallo
' Einrückung mit Tabs statt wie hier mit Leerzeichen
Mist, Kommentare in Perl (oder auch PHP) natürlich mit '#' und nicht mit '''. Scheiß VB!
Tschö, Auge
--
Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
Terry Pratchett, "Wachen! Wachen!"
ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
[Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
hi,
Hallo
Einrückung nach Allman
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
> >
> > Meine bevorzugte Variante.
>
> Hier die meine (wenn auch mit PHP statt Perl). [@Tom](https://forum.selfhtml.org/?t=217257&m=1492161): so find ich's noch ein wenig fluffiger.
>
> ~~~perl
# Einrückung nach WeißNichtWer
> ' Einrückung mit Tabs statt wie hier mit Leerzeichen
> foreach my $e (keys %ENV)
> {
> if ($e eq 'OS')
> {
> say "$e => $ENV{$e}";
> }
> }
Zumindest bei Javascript gibt es die Ansicht:
"The unit of indentation is four spaces. Use of tabs should be avoided because there still is not a standard for the placement of tabstops"
http://webreflection.blogspot.de/2010/02/jslint-bad-part.html
mfg
tami
Hallo
# Einrückung mit Tabs statt wie hier mit Leerzeichen
Zumindest bei Javascript gibt es die Ansicht:
"The unit of indentation is four spaces. Use of tabs should be avoided because there still is not a standard for the placement of tabstops"
http://webreflection.blogspot.de/2010/02/jslint-bad-part.html
Entsprechende Streitschriften findest du auch im hiesigen Archiv zuhauf. Das ist mir aber Wurscht. Nutze ich Leerzeichen, wird der Quelltext in jedem Editor gleich, aber eventuell entgegen den Gewohnheiten und Vorlieben des jeweiligen Nutzers, angezeigt.
Nehme ich stattdessen Tabs, deinem Beispiel folgend in der Vorlage mit vier Leerzeichen für ein Halle… ähhh Tab, dann kann ein anderer Beteiligter den Quelltext z.B. mit einer Tablaufweite von zwei Leerzeichen öffnen und bearbeiten (so, wie es z.B. meiner Vorliebe entspricht) und beim ursprünglichen Entwickler würde der nun bearbeitete Quelltext hinterher wieder mit seiner gewohnten Einrückung (1 Tab entspricht 4 Leerzeichen) angezeigt.
Alle sind's zufrieden und gut is.
Tschö, Auge
hi,
Hallo
# Einrückung mit Tabs statt wie hier mit Leerzeichen
Zumindest bei Javascript gibt es die Ansicht:
"The unit of indentation is four spaces. Use of tabs should be avoided because there still is not a standard for the placement of tabstops"
http://webreflection.blogspot.de/2010/02/jslint-bad-part.htmlEntsprechende Streitschriften findest du auch im hiesigen Archiv zuhauf. Das ist mir aber Wurscht. Nutze ich Leerzeichen, wird der Quelltext in jedem Editor gleich, aber eventuell entgegen den Gewohnheiten und Vorlieben des jeweiligen Nutzers, angezeigt.
Nehme ich stattdessen Tabs, deinem Beispiel folgend in der Vorlage mit vier Leerzeichen für ein Halle… ähhh Tab, dann kann ein anderer Beteiligter den Quelltext z.B. mit einer Tablaufweite von zwei Leerzeichen öffnen und bearbeiten (so, wie es z.B. meiner Vorliebe entspricht) und beim ursprünglichen Entwickler würde der nun bearbeitete Quelltext hinterher wieder mit seiner gewohnten Einrückung (1 Tab entspricht 4 Leerzeichen) angezeigt.
Alle sind's zufrieden und gut is.
Ich glaube, mein Scite kann alles Tabs mit 4, Tabs mit 8, Tabs in Leerzeichen umwandeln ...; und umgekehrt meine ich auch. Aber Geschmackssache, sicherlich. Bei Jslint regen sich ja auch einige darüber auf.
mfg
tami
hi,
hi,
Hallo
# Einrückung mit Tabs statt wie hier mit Leerzeichen
Zumindest bei Javascript gibt es die Ansicht:
"The unit of indentation is four spaces. Use of tabs should be avoided because there still is not a standard for the placement of tabstops"
http://webreflection.blogspot.de/2010/02/jslint-bad-part.htmlEntsprechende Streitschriften findest du auch im hiesigen Archiv zuhauf. Das ist mir aber Wurscht. Nutze ich Leerzeichen, wird der Quelltext in jedem Editor gleich, aber eventuell entgegen den Gewohnheiten und Vorlieben des jeweiligen Nutzers, angezeigt.
Nehme ich stattdessen Tabs, deinem Beispiel folgend in der Vorlage mit vier Leerzeichen für ein Halle… ähhh Tab, dann kann ein anderer Beteiligter den Quelltext z.B. mit einer Tablaufweite von zwei Leerzeichen öffnen und bearbeiten (so, wie es z.B. meiner Vorliebe entspricht) und beim ursprünglichen Entwickler würde der nun bearbeitete Quelltext hinterher wieder mit seiner gewohnten Einrückung (1 Tab entspricht 4 Leerzeichen) angezeigt.
Alle sind's zufrieden und gut is.
Ich glaube, mein Scite kann alles Tabs mit 4, Tabs mit 8, Tabs in Leerzeichen umwandeln ...; und umgekehrt meine ich auch. Aber Geschmackssache, sicherlich. Bei Jslint regen sich ja auch einige darüber auf.
http://jarrodoverson.com/blog/spaces-vs-tabs/
"And here is the example that doesn’t include tabs at all, just spaces and a 2 tab indentation level. The benefit here is unmistakable intent. ... There is no chance for confusion and what you see is what you get."
Das scheint mir der Punkt bei Crockford auch. Es ist unmissverständlich mit Spaces. Die Fehleranfälligkeit sinkt bzw. ist in diesem Punkt dann ausgeschlossen.
mfg
tami
Hello,
Einrückung nach Allman
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
> > >
> > > Meine bevorzugte Variante.
> >
> > Hier die meine (wenn auch mit PHP statt Perl). [@Tom](https://forum.selfhtml.org/?t=217257&m=1492161): so find ich's noch ein wenig fluffiger.
> >
> > ~~~perl
# Einrückung nach WeißNichtWer
> > ' Einrückung mit Tabs statt wie hier mit Leerzeichen
> > foreach my $e (keys %ENV)
> > {
> > if ($e eq 'OS')
> > {
> > say "$e => $ENV{$e}";
> > }
> > }
Nee, das ist Unsinn.
Es geht bei Coding-Styles um "Structure at first sight" und nicht darum, ob man etwas "fluffig" findet, oder ob man beim Tippen alles möglichst schön kryptisch verkapselt, damit es kein Anderer versteht.
Der Block wird durch die Kopfzeile "foreach()" eingeleitet. Der Body gehört direkt zur Kopfzeile. Ein einem Editor, wie z.B. Notepad++, kann man, wen man die Blockklammern direkt auf der Ebene der Kopfzeile setzt, auf einen Blick sehen, wo der Block beginnt und wo er zuende ist.
Das kann man nicht, wenn sich da ein "if()" dazwischen mogelt.
Außerdem "i bäh" ist das Schachteln von Funktionen, die außer einem Ergebnis auch einen Fehlerwert zurückgeben können. Wenn die nächst äußere Funktion allerdings den Fehlerwert definiert durchreicht und keinen eigenen Fehlercode setzt, ist es OK. Das ist aber in PHP nicht Fall. Die Fehlerbehandlung lässt hier seeeehr zu wünschen übrig. Dabei könnte man sie mit ein paar klitzekleinen chirurgischen Eingriffen sehr viel strukturierter gestalten.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo
Hello,
Einrückung nach Allman
foreach my $e(keys %ENV)
{
if($e eq 'OS')
{
say "$e => $ENV{$e}";
}
}
> > > >
> > > > Meine bevorzugte Variante.
> > >
> > > Hier die meine (wenn auch mit PHP statt Perl). [@Tom](https://forum.selfhtml.org/?t=217257&m=1492161): so find ich's noch ein wenig fluffiger.
> > >
> > > ~~~perl
# Einrückung nach WeißNichtWer
> > > ' Einrückung mit Tabs statt wie hier mit Leerzeichen
> > > foreach my $e (keys %ENV)
> > > {
> > > if ($e eq 'OS')
> > > {
> > > say "$e => $ENV{$e}";
> > > }
> > > }
Nee, das ist Unsinn.
Es geht bei Coding-Styles um "Structure at first sight" und nicht darum, ob man etwas "fluffig" findet,
Oh, entschuldige meine deinem „etwas mehr Luft lässt für die Lesbarkeit“ geschuldete Ausdrucksweise. Es ging mir nicht um Fluffigkeit der Fluffigkeit willen. Ich halte das für gut lesbar, weswegen ich das so verwende. Zudem vermag ich nicht zu erkennen, an welcher Stelle meine Schreibweise, gegenüber der von Gunnar gezeigten, schlechter ist. Bis auf die Position der Klammern unterscheiden sie sich so gut wie nicht.
oder ob man beim Tippen alles möglichst schön kryptisch verkapselt, damit es kein Anderer versteht.
Ich kann keine Kryptischkeit finden.
Der Block wird durch die Kopfzeile "foreach()" eingeleitet. Der Body gehört direkt zur Kopfzeile. Ein einem Editor, wie z.B. Notepad++, kann man, wen man die Blockklammern direkt auf der Ebene der Kopfzeile setzt, auf einen Blick sehen, wo der Block beginnt und wo er zuende ist.
Das kann man nicht, wenn sich da ein "if()" dazwischen mogelt.
Der Notepad++ findet auch in meiner Schreibweise, wie jeder andere Editor, der Blöcke findet, Anfang und Ende des jeweiligen Blocks. Ich mit meiner Schreibweise im übrigen auch ohne Editor.
Außerdem "i bäh" ist das Schachteln von Funktionen, …
Diese Kritik richtest du bitte an hotti. Es ist schließlich sein für die Beispiele wiederverwendeter Code.
Tschö, Auge
Hello,
Es geht bei Coding-Styles um "Structure at first sight" und nicht darum, ob man etwas "fluffig" findet,
[...] Zudem vermag ich nicht zu erkennen, an welcher Stelle meine Schreibweise, gegenüber der von Gunnar gezeigten, schlechter ist. Bis auf die Position der Klammern unterscheiden sie sich so gut wie nicht.
Eben genau die Position der Klammern ist es, die deine Schreibweise schlechter lesbar macht, als den Allman-Style. Den Grund habe ich aber im letzten Posting substantiiert benannt!
oder ob man beim Tippen alles möglichst schön kryptisch verkapselt, damit es kein Anderer versteht.
Ich kann keine Kryptischkeit finden.
Das bezog sich auch weder auf Dich, noch auf die hier abgebildeten Styles.
Das war eine zusätzliche Bemerkung von mir bezüglich Coding-Practices.
Der Notepad++ findet auch in meiner Schreibweise, wie jeder andere Editor, der Blöcke findet, Anfang und Ende des jeweiligen Blocks. Ich mit meiner Schreibweise im übrigen auch ohne Editor.
Aber das menschliche Auge nicht, und einzig und alleine geht es bei Coding-Styles. Wenn der Mensch nicht wäre, könnte man alles hintereinanderweg schreiben, Leerzeichen, Klammern und Zeilenumbrüche nur noch dort, wo der zuständige Parser das für erforderlich hält.
Außerdem "i bäh" ist das Schachteln von Funktionen, …
Diese Kritik richtest du bitte an hotti. Es ist schließlich sein für die Beispiele wiederverwendeter Code.
TSAA: Ich schreibe selten gegen Jemanden, sondern nur gegen oder für die Gesamtheit der mir bis zu meiner Antwort bekannten Statements aus dem Thread. Dabei isst mir vollkommen wurscht, von dem die stammen. Und ich schreibe auch gegen meine eigenen Statements, wenn ich erkennen konnte, dass ich daneben gelegen habe...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo
[...] Zudem vermag ich nicht zu erkennen, an welcher Stelle meine Schreibweise, gegenüber der von Gunnar gezeigten, schlechter ist. Bis auf die Position der Klammern unterscheiden sie sich so gut wie nicht.
Eben genau die Position der Klammern ist es, die deine Schreibweise schlechter lesbar macht, als den Allman-Style. Den Grund habe ich aber im letzten Posting substantiiert benannt!
Der Notepad++ findet auch in meiner Schreibweise, wie jeder andere Editor, der Blöcke findet, Anfang und Ende des jeweiligen Blocks. Ich mit meiner Schreibweise im übrigen auch ohne Editor.
Aber das menschliche Auge nicht, und einzig und alleine geht es bei Coding-Styles. Wenn der Mensch nicht wäre, könnte man alles hintereinanderweg schreiben, Leerzeichen, Klammern und Zeilenumbrüche nur noch dort, wo der zuständige Parser das für erforderlich hält.
Als Meinungsäußerung könnte ich das ohne weiteres akzeptieren. Als Tatsachenbehauptung ist das ob meiner Aussage, ich finde diese Art der Formatierung besser lesbar offensichtlich falsch. Wenn es nach dir geht, ist die Art, die für mich besser lesbar ist, für mich entweder schlechter lesbar oder ich habe keine menschlichen Augen.
Tschö, Auge
Hello,
Als Meinungsäußerung könnte ich das ohne weiteres akzeptieren. Als Tatsachenbehauptung ist das ob meiner Aussage, ich finde diese Art der Formatierung besser lesbar offensichtlich falsch. Wenn es nach dir geht, ist die Art, die für mich besser lesbar ist, für mich entweder schlechter lesbar oder ich habe keine menschlichen Augen.
Es hat keinen Sinn, dass wir hier die Diskussion der letzten 30 Jahre in fünf Zeilen-Streitgesprächen wiederholen. DU darfst DEINE Scripte so formatieren, wie Du willst, aber in einem Team wirst Du dich immer an Vorgaben halten müssen.
Diejenigen Teams, die den Allman-Style benutzt haben, waren bezüglich der Fehlerquoten "Verstehen", "Übertragen", "Verändern" immer am erfolgreichsten.
Das hat nichts mit "Kreativität", oder "Fachkenntnis" zu tun!
Ich suche noch nach den veröffentlichen Studien. Es gab welche! Jedenfalls hat mir mein (neuer) Chef damals vorgeschrieben, den Allman-Style zu benutzen (den hatte ich sowieso schon immer benutzt) und die Fehlerquote der Abteilung sank auf zweierlei Weise:
* Andere Programmierer konnten nahezu sofort verstehen, was gemeint war
* Hintertüren waren selbst für Newbies nahezu sofort erkennbar. Zumindest kamen die dann
angelaufen und fragten: was bedeutet dieser Code?
Das sind jetzt nur massive Erfahrungen aus der Vergangenheit, kein Beweis dafür, dass andere Formatvorschläge nicht auch gut sein könnten.
Unser Psychologe (damals gab es noch "Software-Psychologen") hat jedenfalls mal gesagt:
"Den Allman-Style benutzen echte Männer deshalb nicht, weil den ja jedes Kind verstehen könnte"
Denk Dir selber deinen Teil.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo
DU darfst DEINE Scripte so formatieren, wie Du willst,
Ich habe nirgendwo etwas anderes behauptet oder propagieren wollen. Ich habe den gezeigten Stilen einen weiteren (den übrigens nicht nur ich verwende) hinzugefügt.
aber in einem Team wirst Du dich immer an Vorgaben halten müssen.
Selbstverständlich. Dabei ist egal, welchem Coding Style das entsprechende Team folgt und ob der mir gefällt. Momentan folge ich daher mehr oder weniger stolperarm drei Stilen.
Tschö, Auge
hi,
Selbstverständlich. Dabei ist egal, welchem Coding Style das entsprechende Team folgt und ob der mir gefällt. Momentan folge ich daher mehr oder weniger stolperarm drei Stilen.
Mir gefällt nach wie vor: http://framework.zend.com/manual/1.12/de/coding-standard.php-file-formatting.html#coding-standard.php-file-formatting.general mit 4 Leerzeichen, wie auch bei jslint.
mfg
tami
Hallo
Selbstverständlich. Dabei ist egal, welchem Coding Style das entsprechende Team folgt und ob der mir gefällt. Momentan folge ich daher mehr oder weniger stolperarm drei Stilen.
Mir gefällt nach wie vor: http://framework.zend.com/manual/1.12/de/coding-standard.php-file-formatting.html#coding-standard.php-file-formatting.general mit 4 Leerzeichen, wie auch bei jslint.
Sowas in der Art habe ich mit VB. Wobei ich immer mit einem Tab (Laufweite: 4) arbeite, den die Access-IDE beim speichern und schließen eines Moduls automatisch in vier Leerzeichen umwandelt. Schöner, wenn auch zwieschneidiger Automatismus. Denn wehe, ich setze unbewusst und aus Versehen ein Semikolon ans Ende einer Anweisung oder ein # statt des ' als Kommentarzeichen. Dann Mimimit die IDE nach verlassen der Zeile rum wie ein kleines Mädchen. Das ist syntaktisch natürlich völlig korrekt, aber es nervt wie Hulle.
Tschö, Auge
@@tami:
nuqneH
mit 4 Leerzeichen
Warum Tabs ganz klar besser sind und was Thomas J.S. sagte.
Qapla'
hi,
@@tami:
nuqneH
mit 4 Leerzeichen
Jo.
Zend-Framework: Indentation should consist of 4 spaces. Tabs are not allowed.
JSLint (Crockford): The unit of indentation is four spaces. Use of tabs should be avoided because (as of this writing in the 21st Century) there still is not a standard for the placement of tabstops.
Jedem seins ;-).
mfg
tami
Meine bevorzugte Variante.
Mein Style 1995-1996. Glücklich war ich nicht damit ;)
Die korrespondierende Klammmer ist zwar eindeutig sichtbar (beide sind vertikal untereinader ausgerichtet mit dergleichen Einrückung), nicht eindeutig sichtbar ist jedoch, zu welchem if, else, sub, function... die schließende Klammer gehört.
Und: Im Team müssen sich alle auf diegleiche Einrückung einigen.
if($was)
{
# viele Zeilen Code
} # Klammer gehört zum if, steht aber eingerückt
else
{
# Ein Kollege hat nur einen Space auf der Tabulatortaste
}
function extrem
{ # Klammer setzt Willi
} # Fritz schreibt die Funktion fertig und schließt die Klammer
Java/Sun legt das eindeutiger fest:
if($was){
# Code von Willi
}
else{
# Code von Fritz
}
^ Klammer gehört zu else, gucke ich nach oben, sehe ich e wie else ;)
# verschiendene Einrückungstiefen stören den Code-Fluß nicht wirklich
@@hotti:
nuqneH
Die korrespondierende Klammmer ist zwar eindeutig sichtbar (beide sind vertikal untereinader ausgerichtet mit dergleichen Einrückung), nicht eindeutig sichtbar ist jedoch, zu welchem if, else, sub, function... die schließende Klammer gehört.
Doch. Zu dem unmittelbar über {.
# Ein Kollege hat nur einen Space auf der Tabulatortaste
Das kommt davon, wenn Tabs von IDEs in Leerzeichen umgewandelt werden.
^ Klammer gehört zu else, gucke ich nach oben, sehe ich e wie else ;)
Ich verstehe dein Problem nicht, den Blick eine Zeile höher schweifen zu lassen.
Qapla'
hi,
Ich verstehe dein Problem nicht, den Blick eine Zeile höher schweifen zu lassen.
Nicht nur weil es auch mal sehr vielen Zeilen sein können. Es ist tatsächlich eine Problem:
else
{
}
Der Klammerbezug beruht auf Gegenseitigkeit. Einen sichbaren Bezug zu else gibt es nicht. Die schließende Klammer zeigt auf die öffnende Klammer.
Java/Sun
else{
{
Die schließende Klammr zeigt nicht auf die öffnenden Klammer sondern auf else.
Des Weiteren siehe meine Anmerkung bez. Teamarbeit. Verschiedene Einrückungstiefen wirken sich im Style Java/Sun nicht unbedingt störend aus, weil sie unabhängig vom Klammerbezug sind ;)
Java/Sun
else{
}
Teamarbeit: Es gibt Perl-Tidy, was die Wogen der Erregung glätten kann. Ich habe neulich einen Unternehmer kennengelernt, der hat meinen Hinweis auf Perl-Tidy nicht verstanden. Offensichtlich legt er keinen Wert auf Teamarbeit, was ich auch an anderen Indizien festmachen konnte und was besonders verantwortungslos in seinem Fall ist: als Programmierer hat er sich unersetzlich gemacht.
Jeder ist ersetzbar. Ein Manager, der dies nicht beachtet, begeht einen schwerwiegenden Fehler und gefährdet sogar das Unternehmen.
@@hotti:
nuqneH
else{
{
>
> Die schließende Klammr zeigt nicht auf die öffnenden Klammer sondern auf else.
Welche schließende Klammer? SCNR.
> Verschiedene Einrückungstiefen wirken sich im Style Java/Sun nicht unbedingt störend aus, weil sie unabhängig vom Klammerbezug sind ;)
Das ist bei Allman-Stil nicht anders. (Die Klammern sind ja nicht eingerückt.)
Qapla'
--
„Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
@@dedlfix:
nuqneH
müsste es so sein:
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
eher so:
~~~php
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files)) {
$files[$i] = array();
}
$files[$i][$k] = $v;
}
}
mit dem Hinweis, dass man einzeilige Anweisungen ohne Klammern nach if
udgl. vermeiden sollte.
Qapla'
hi,
@@dedlfix:
nuqneH
müsste es so sein:
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
>
> eher so:
>
> ~~~php
> foreach ($_FILES['bild'] as $k => $l) {
> foreach ($l as $i => $v) {
> if (!array_key_exists($i, $files)) {
> $files[$i] = array();
> }
> $files[$i][$k] = $v;
> }
> }
>
Jo. If ohne geschweifte Klammern weder bei Javascript noch bei PHP verwenden wäre meine Ansicht ;-).
http://framework.zend.com/manual/1.12/de/coding-standard.coding-style.html
mfg
tami
hi,
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files)) {
$files[$i] = array();
}
$files[$i][$k] = $v;
}
}
Wobei nicht nur der Coding-Stil sondern auch die Variablenbenennung ja wichtig ist. Ich persönlich kann jetzt mit $k, $l und $i nix anfangen.
mfg
tami
Tach!
Die Diskussion um Einrückungen und Klammerungen ist müßig. Nimmt man eine IDE reicht ein Tastendruck und das Dokument ist so formatiert, wie es den eigenen Vorlieben entspricht. Fertig. Arbeitet der nächste damit, macht er bei sich diesen einen Tastendruck. Problem gelöst. Die passenden Klammern finde ich auch lieber über die optische Hervorhebung als über Klammernsetzungsstile, die zwar eine Zugehörigkeit suggerieren, dies aber nicht garantieren können.
dedlfix.
hi,
Tach!
Die Diskussion um Einrückungen und Klammerungen ist müßig. Nimmt man eine IDE reicht ein Tastendruck und das Dokument ist so formatiert, wie es den eigenen Vorlieben entspricht. Fertig. Arbeitet der nächste damit, macht er bei sich diesen einen Tastendruck. Problem gelöst. Die passenden Klammern finde ich auch lieber über die optische Hervorhebung als über Klammernsetzungsstile, die zwar eine Zugehörigkeit suggerieren, dies aber nicht garantieren können.
Naja, es macht schon Sinn, auch für die Lesbarkeit, sich auf einen Stil zu einigen. Es kommt ja nicht von ungefähr, dass das Zend-Framework sich einen einheitlichen Coding-Style zu gelegt hat. Hätten wir hier im Forum oder in der Wiki öfter Codebeispiele, wäre es eigentlich der Übersichtlichkeit halber sinnvoll, die in einem einheitlichen Stil anzubieten und sich dabei an einen "gängigen" Stil (zB. den vom Zend Framework) anzulehnen bzw. den zu übernehmen.
mfg
tami
Tach!
Naja, es macht schon Sinn, auch für die Lesbarkeit, sich auf einen Stil zu einigen.
Ich zitiere mich selbst:
Nimmt man eine IDE reicht ein Tastendruck und das Dokument ist so formatiert, wie es den eigenen Vorlieben entspricht. Fertig.
Damit ist so lesbar, wie es jeder für sich definiert.
Es kommt ja nicht von ungefähr, dass das Zend-Framework sich einen einheitlichen Coding-Style zu gelegt hat.
Mit Lesbarkeit zu argumentieren würde bedeuten, dass es nur eine einzige Art wahrer Lesbarkeit gäbe. Wenn das so wäre, gäbe es solche Diskussionen nicht. Lesbarkeit kann deshalb nur ein sehr subjektives Kriterium sein, das alle anderen Vorlieben benachteiligt. Ich denke, der Sinn ist nur, nach außen hin ein einheitliches Auftreten zu gewährleisten. Der Nutzen ist gering, einfach nur eine Art von Schönheit, die einem gewissen Teil der Leser zugutekommt, den anderen weniger.
Hätten wir hier im Forum oder in der Wiki öfter Codebeispiele, wäre es eigentlich der Übersichtlichkeit halber sinnvoll, die in einem einheitlichen Stil anzubieten und sich dabei an einen "gängigen" Stil (zB. den vom Zend Framework) anzulehnen bzw. den zu übernehmen.
Sinnvoll für Ordungsliebhaber. Um Code zu verstehen, reicht es nicht unbedingt immer nur, ihn zu lesen, auch das Ausführen und damit zu experimentieren ist wichtig, und da sind wir wieder bei den individuellen Vorlieben, die eher helfen als die Vorgaben anderer.
dedlfix.
hi,
Tach!
Naja, es macht schon Sinn, auch für die Lesbarkeit, sich auf einen Stil zu einigen.
Ich zitiere mich selbst:
Nimmt man eine IDE reicht ein Tastendruck und das Dokument ist so formatiert, wie es den eigenen Vorlieben entspricht. Fertig.
Damit ist so lesbar, wie es jeder für sich definiert.
Mit Lesbarkeit zu argumentieren würde bedeuten, dass es nur eine einzige Art wahrer Lesbarkeit gäbe.
Nee, aber es macht schon Sinn, sich da zum Beispiel in einer Wiki an einen Style anzuschließen. Mmn.
Hätten wir hier im Forum oder in der Wiki öfter Codebeispiele, wäre es eigentlich der Übersichtlichkeit halber sinnvoll, die in einem einheitlichen Stil anzubieten und sich dabei an einen "gängigen" Stil (zB. den vom Zend Framework) anzulehnen bzw. den zu übernehmen.
Sinnvoll für Ordungsliebhaber. Um Code zu verstehen, reicht es nicht unbedingt immer nur, ihn zu lesen, auch das Ausführen und damit zu experimentieren ist wichtig, und da sind wir wieder bei den individuellen Vorlieben, die eher helfen als die Vorgaben anderer.
Na, mit der Lesbarkeit fängt es an. Aber ich denke, soviel Codebeispiele haben wir hier ja nicht und es ist auch nicht möglich, da einen Nenner zu finden ...;
mfg
tami
hi,
Tach!
Naja, es macht schon Sinn, auch für die Lesbarkeit, sich auf einen Stil zu einigen.
Ich zitiere mich selbst:
Nimmt man eine IDE reicht ein Tastendruck und das Dokument ist so formatiert, wie es den eigenen Vorlieben entspricht. Fertig.
Damit ist so lesbar, wie es jeder für sich definiert.
Ja, aber ich kopiere mir die Codebeispiele von PEAR oder php.net oder hier doch nicht erst in meine IDE ...;
mfg
tami
Tach!
Ja, aber ich kopiere mir die Codebeispiele von PEAR oder php.net oder hier doch nicht erst in meine IDE ...;
Deine Arbeitsweise ist nicht mein Problem (genausowenig wie dein Codingstil zu meinem Problem werden sollte). Ich finde das Kopieren gelegentlich sinnvoll, weil mir eine IDE sehr schnell syntaktische Fehler aufzeigen kann, die ich sonst erst mühsam selbst aus dem Code parsen müsste. Außerdem bin ich kein PHP-Interpreter, so dass ich zum inhaltlichen Fehlersuchen und Nachvollziehen dann doch lieber das Original verwende.
dedlfix.
Hello,
Mit Lesbarkeit zu argumentieren würde bedeuten, dass es nur eine einzige Art wahrer Lesbarkeit gäbe.
Klar, den Allman-Style. Alle anderen sind schwerer lesbar. :-DD
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Morgen,
also ich habe zugegebenermaßen von Objektorientiertem PHP nicht allzuviel Ahnung, aber trotzdem sieht dein Code irgendwie merkwürdig aus:
$files = array(); foreach ($_FILES['bild'] as $k => $l) { foreach ($l as $i => $v) { if (!array_key_exists($i, $files)) $files[$i] = array(); $files[$i][$k] = $v; } }
Also soweit ich das hier sehe, iterierst du hier über das Array $\_FILES['bild'] und kopierst dessen Inhalte in dein eigenes Array. Soweit so gut.
Nun startest du eine foreach-Schleife über dein neues Array, greifst aber innerhalb dieser Schleife nicht ein einziges Mal auf irgendeinen der Werte deines neuen Arrays zu. Stattdessen wird innerhalb der Schleife wieder auf $\_FILES zugegriffen.
Wozu überhaupt eine Schleife über ein Array, wenn du dieses dann nicht benutzt?
Hallo,
ich hab es jetzt etwas umgebaut und auch auf das Einrücken geachtet
if($_POST["abschicken"]){
$sql = mysql :: instance();
$_SESSION["form_data"] = $_POST;
$files = array();
foreach ($_FILES['bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$sql->table('user_alben_bilder')->data($_POST)
->ignore(array('abschicken'))
->checkRequiredFields()
->callback(
function($data){
if(count($data->error))
return;
$upload = upload :: instance($file);
$token = helper :: instance() -> token('albenImage_',1,'32');
if($upload->uploaded){
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$data->data('uab_bild',$upload->file_dst_name);
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
}
}$upload->clean();}
)
->callback(
function($data){
$profil = mysql::instance()->UserDaten()->user_id;
$album = $_GET['album'];
$data->data('uab_ip',$_SERVER['REMOTE_ADDR'])
->data('uab_albenID',$album)
->data('uab_userID',$profil);
}
)
->insert();
}
if($sql->isError()){
$_SESSION["flash_notice"] = array('Beim speichern der Daten sind leider Fehler entstanden'=>$sql->isError());
}else{
$_SESSION["flash_notice"] = 'Bilder wurden erfolgreich gespeichert';
unset($_SESSION["form_data"]);
}
header('location:/fotos-hochladen.php?album='.$album);
}
in meiner Datenbank kommen Werte an, wie die UserID und auch die AlbenID zwei Bilder wurden hochgeladen und es sind zwei Einträge in der Datenbank. Allerdings Bilder werden weiter nicht eingetragen. Ich sehe den Fehler einfach nicht.
Hello,
in meiner Datenbank kommen Werte an, wie die UserID und auch die AlbenID zwei Bilder wurden hochgeladen und es sind zwei Einträge in der Datenbank. Allerdings Bilder werden weiter nicht eingetragen. Ich sehe den Fehler einfach nicht.
Wir kennen weder deine Upload-Klasse noch dein HTML-Formular.
Beides müsstest Du uns mal zeigen.
Außerdem wären die Angaben zu:
* memory_limit
* post_max_size
* upload_max_filesize
* max_input_time
* file_uploads
* upload_tmp_dir
* open_basedir
Wenn sie nicht alle zusammen passen, hat es keinen Sinn, im Script nach Fehlern zu suchen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Wir kennen weder deine Upload-Klasse noch dein HTML-Formular.
Ich nutze diese Klasse http://www.verot.net/php_class_upload.htm
Mein HTML Formular sieht so aus:
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<fieldset>
<label for="bild">Bild</label>
<input type="file" name="bild[]" id="bild" /><br />
<input type="button" id="bilder" value="Weitere Bilder hinzufügen" />
<input type="submit" name="abschicken" id="abschicken" value="hochladen" />
</fieldset>
</form>
Außerdem wären die Angaben zu:
Die Werte habe ich von meinem Provider bekommen
upload_max_filesize = 500M;
post_max_size = 500M;
ich kann auch große Videos hochladen. Wenn ich nur ein bild zulasse, sprich ohne der Schleife geht der Upload, nur eben mit mehreren Bildern nicht. Die Schleife wird angesprochen, denn ID + UserID + AlbenID wird richtig eingetragen.
Ich hab mir jetzt mal alles ausgeben lassen, was in $sql steht:
object(db_helper)#6 (15) {
["error"]=>
array(0) {
}
["errorMessage"]=>
string(0) ""
["table"]=>
string(17) "user_alben_bilder"
["required"]=>
array(0) {
}
["data"]=>
array(4) {
["abschicken"]=>
string(16) "Bilder jetzt hochladen"
["ip"]=>
string(13) "xx.xx.xxx.xxx"
["albenID"]=>
string(8) "GaN5bI8E"
["userID"]=>
string(1) "2"
}
["ignore"]=>
array(1) {
[0]=>
string(10) "abschicken"
}
["where"]=>
array(0) {
}
["order"]=>
array(0) {
}
["type"]=>
string(4) "AUTO"
["limit"]=>
bool(false)
["last_id"]=>
string(2) "14"
["db_prefix"]=>
string(0) ""
["db":"db_helper":private]=>
object(db)#3 (4) {
["query"]=>
string(102) "Insert into user_alben_bilder set ip = 'xx.xx.xxx.xxx', albenID = 'GaN5bI8E', userID = '2'"
["error"]=>
NULL
["type"]=>
string(4) "AUTO"
["conn":protected]=>
object(PDO)#4 (0) {
}
}
["query"]=>
NULL
["conn":protected]=>
NULL
}
da fällt mir auf, dass mein Feld Bilder überhaupt nicht ankommt!
Hello,
Ich nutze diese Klasse http://www.verot.net/php_class_upload.htm
Ganz schön wuselig.
Mein HTML Formular sieht so aus:
[...]
Und für Multiupload dann so?:
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<fieldset>
<label for="bild">Bild</label>
<input type="file" name="bild[]" id="bild"><br>
<input type="file" name="bild[]" id="bild"><br>
<input type="file" name="bild[]" id="bild"><br>
<input type="button" id="bilder" value="Weitere Bilder hinzufügen">
<input type="submit" name="abschicken" id="abschicken" value="hochladen">
</fieldset>
</form>
Sonst passt nämlich deine Array-Konvertierung nicht.
Warum machst Du das mit der Instantiierung dann nicht so, wie in der Anleitung zur Klasse beschrieben? Da kann ich jetzt nicht folgen, warum die die Methode instance() statisch aufrufst.
Das gleiche bei mysql. Sollte das nicht auch lieber mysqli sein?
$upload = new upload($file);
if ($upload->uploaded)
{
$upload->file_new_name_body = 'image_resized';
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('/home/user/files/');
if ($upload->processed) {
echo 'image resized';
$upload->clean();
}
else
{
echo 'error : ' . $upload->error;
}
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
ich bin ein Schritt weiter, hab alles aus dem Script gelöscht was ablenkt, meines sieht derzeit wie folgt aus:
$album = $_GET['album'];
if($_POST["abschicken"]){
$files = array();
foreach ($_FILES['uab_bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$upload = upload :: instance($file);
$token = helper :: instance() -> token('albenImage_',1,'32');
if($upload->uploaded){
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$upload->file_dst_name;
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
}}
echo "<pre>";
print_r($file);
echo "</pre>";
}
$upload->clean();
}
Wenn ich mir $files ausgeben lasse, erhalte ich folgendes:
Array
(
[name] => Chrysanthemum.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpiGX4gA
[error] => 0
[size] => 879394
)
Array
(
[name] => Hydrangeas.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpj0zJhI
[error] => 0
[size] => 595284
)
Array
(
[name] => Koala.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpUuPikQ
[error] => 0
[size] => 780831
)
sieht meiner Meinung nach recht gut aus. Nun dachte ich, schau mal nach was kommt in dem Ordner an, diese sieht so aus:
hab mir den kompletten Ordner auf die Festplatte gezogen und schaute ob es wirklich 3 verschieden Bilder sind, sind es leider nicht, es sind 3 mal die gleichen Bilder. Wie kann das denn bitte sein? Siehst du, wo ich den Fehler habe? Ich hab die Vermutung, dass es an $upload->clean(); liegen könnte, bin mir aber nicht sicher, bzw. ich weiß nicht wie ich hier noch eine Kontrolle einbauen könnte.
Hello,
$upload = upload :: instance($file);
$token = helper :: instance() -> token('albenImage_',1,'32');
Du hast die Frage noch nicht beantwortet, was das soll?
Warum steht da nicht
$upload = new upload($file);
$helper = new helper();
$token = $helper -> token(('albenImage_',1,'32');
?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Du hast die Frage noch nicht beantwortet, was das soll?
Ich kann es dir nicht sagen, mit dem Kollegen mit dem ich früher die Seite gemacht habe, meinte man muss dieses immer davor schreiben, dass es richtig funktioniert.
Aber ich denke damit hat das nichts zu tun, dass die Bilder alle die gleichen sind.
Hallo Tom,
Warum steht da nicht
$upload = new upload($file);
$helper = new helper();
$token = $helper -> token(('albenImage_',1,'32');
du hattest wohl recht, wenn ich deinen Code nehme, dann wird auch das Bild bzw. die Bilder richtig gespeichert, mein Script sieht nun wie folgt aus und alle Uploads die ich bis jetzt gemacht habe funktionieren.
$album = $_GET['album'];
$user = mysql::instance()->UserDaten()->user_id;;
if($_POST["abschicken"]){
$files = array();
foreach ($_FILES['uab_bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$upload = new upload($file);
$helper = new helper();
$token = $helper -> token('albenImage_',1,'32');
if($upload->uploaded){
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$upload->file_dst_name;
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
if ($upload->processed) {
$filename = $upload->file_dst_name;
}}
echo "<pre>";
print_r($file);
echo "<br>";
echo $filename;
echo "<br>";
echo $album;
echo "<br>";
echo $user;
echo "</pre>";
}
}
$upload->clean();
}
Hello,
$album = $_GET['album'];
$user = mysql::instance()->UserDaten()->user_id;;if($_POST["abschicken"]){
$files = array(); foreach ($_FILES['uab_bild'] as $k => $l) { foreach ($l as $i => $v) { if (!array_key_exists($i, $files)) $files[$i] = array(); $files[$i][$k] = $v; } }
#...
Jetzt musst Du das Gleiche nur noch bei $user und $mysql machen:
~~~php
$dbs = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
$user = $dbs -> UserDaten()->user_id;
Damit Du mysqli benutzen kannst, musst Du aber wohl die gesamte Datenbankklasse durcharbeiten, bzw. die Funktionen dafür. Wo stehen die denn?
die alten mysql (ohne i am Ende)-Funtionen solltest Du nicht mehr unbedingt benutzten.
Und "$album = $_GET['album']" ist auf den ersten Blick gefährlich. Wird das $album noch irgendwo auf schädlichen Inhalt untersucht?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Und "$album = $_GET['album']" ist auf den ersten Blick gefährlich. Wird das $album noch irgendwo auf schädlichen Inhalt untersucht?
Nein, bis jetzt noch nicht, ich habe es mal erweitert, so sollte es nun sicher sein?
$album = htmlspecialchars($_GET['album']);
Hello,
Und "$album = $_GET['album']" ist auf den ersten Blick gefährlich. Wird das $album noch irgendwo auf schädlichen Inhalt untersucht?
Nein, bis jetzt noch nicht, ich habe es mal erweitert, so sollte es nun sicher sein?
$album = htmlspecialchars($_GET['album']);
Nee, htmlspecialchars() ist erst bei der Ausgabe im HTML-Kontext sinnvoll.
Lies Dir mal Dedlfix' Artikel im Wiki durch:
http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel
Ich habe jetzt nicht untersucht, was mit $_GET['album'] im weitren Scriptverlauf angestellt wird. Wenn daraus aber ein Pfad (Dateiname) erstellt wird, dann muss man sich den Parameter ganz genau ansehen, dass nicht nachher '/etc/passwd' oder ähnlich dabei herauskommt.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Jetzt habe ich mein Insert wieder eingebaut und das Feld Bild bleibt in der Datenbank wie gestern wieder frei. Zwei Tage Arbeit umsonst, denn es hat sich nichts, aber auch gar nichts geändert!
if($_POST["abschicken"]){
$files = array();
foreach ($_FILES['uab_bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$upload = new upload($file);
$helper = new helper();
$token = $helper -> token('albenImage_',1,'32');
if($upload->uploaded){
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$upload->file_dst_name;
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
if ($upload->processed) {
$filename = $upload->file_dst_name;
}}
$sql = mysql :: instance();
$sql->table('user_alben_bilder')->data($_POST)
->ignore(array('abschicken'))
->callback(
function($data){
$profil = mysql::instance()->UserDaten()->user_id;
$album = $_GET['album'];
$data->data('uab_ip',$_SERVER['REMOTE_ADDR'])
->data('uab_albenID',$album)
->data('uab_bild',$filename)
->data('uab_userID',$profil);
}
)
->insert();
}
}
$upload->clean();
}
ich fass es einfach nicht mehr! Seit zwei Tagen komme ich nicht weiter! Was kostet mich das, wenn einer von euch mir das fertig macht?
Hello,
Jetzt habe ich mein Insert wieder eingebaut und das Feld Bild bleibt in der Datenbank wie gestern wieder frei. Zwei Tage Arbeit umsonst, denn es hat sich nichts, aber auch gar nichts geändert!
Besser umsonst, als sinnlos.
Und Du hattest doch schon einen schönen Erfolg.
Nun musst Du nur noch verstehen, woran das lag :-)
Und dazu solltest Du auch mal lesen, was man Dir schreibt.
> $sql = mysql :: instance();
> $sql->table('user_alben_bilder')->data($_POST)
> ->ignore(array('abschicken'))
> ->callback(function($data)
> {
> $profil = mysql::instance()->UserDaten()->user_id;
> $album = $_GET['album'];
>
# ... Ich weiß leider nicht, wohin die Klammern gehören.
# daher weiß ich auch nicht, was der Code bedeuten soll.
# Außerdem kann ich immer noch nicht verstehen, was das mysql :: instance() bewirken soll
>
Schreib doch einfach mal Zeile für Zeile als Kommentar dazwischen, was der Code bewirken soll. Bitte im Klartext und nicht "verprogrammierspracht".
Du musst Dir ja was dabei gedacht haben.
Überigens würde man eine Datenbankverbindung nicht in jedem Schleifendurchlauf neu aufbauen. Die merkt man sich. Bei der Upload-Klasse war das was anderes, da sie für jedes Bild neu initialisiert werden muss - soweit ich bisher sehen konnte. Könnte natürlich sein, dass ich eine Methode init(), oder reset() oder so übersehen habe.
Hast Du denn noch eine extra Datenbankklasse in Gebrauch?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Es hat wohl etwas mit diesem zu tun:
->callback(
function($data){
lege ich z.B. dieses $Hazel = "Hallo"; außerhalb von callback fest und will diese dann so ->data('uab_bild',$Hazel) aufrufen bekomme ich einen leeren Wert. Ich hab keine Ahnung an was das liegt.
Am besten ich treten einfach alles in die Tonne und sag meinen paar Usern die ich habe es geht nicht, fertig.
Hallo,
hab es doch noch nicht aufgeben, so geht es
if($_POST["abschicken"]){
$files = array();
foreach ($_FILES['uab_bild'] as $k => $l) {
foreach ($l as $i => $v) {
if (!array_key_exists($i, $files))
$files[$i] = array();
$files[$i][$k] = $v;
}
}
foreach ($files as $pos=>$file) {
$upload = new upload($file);
if($upload->uploaded){
$helper = new helper();
$token = $helper -> token('albenImage_',1,'32');
$upload->file_new_name_body = $token;
$upload->process('media/bilder/gross/');
if($upload->processed){
$upload->file_dst_name;
$upload->file_new_name_body = $token;
$upload->image_resize = true;
$upload->image_x = 100;
$upload->image_ratio_y = true;
$upload->process('media/bilder/klein/');
if ($upload->processed) {
$filename = $upload->file_dst_name;
$sql = mysql :: instance();
$sql->table('user_alben_bilder')
->data($_POST)
->data('uab_ip',$_SERVER['REMOTE_ADDR'])
->data('uab_albenID',$album)
->data('uab_bild',$filename)
->data('uab_userID',$user)
->ignore(array('abschicken'))
->insert();
}
$upload->clean();
unset($upload);
}
}
}
}