• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

function() mit zwei foreaches funktioniert nicht

syuam

Neues Mitglied
PHP:
  function my_function()
  {
    $states = array('schwarz', 'rot', 'blau');
    $transactionIDs = array('1', '2', '3');
    $result = '<img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.$transactionID" />';
    foreach ($transactionIDs as $transactionID) {
      foreach ($states as $state) {
        $testPath = sprintf('<img src="transactions/Ordner.%s/%s.png",$transactionID ,$state />');
        if (file_exists($testPath)) {
          $result = $testPath;
          break;
        }
        return $result;
      }
    }
  }
Die angesprochene Datei existiert nicht, daher ist file_exists=false.
Also wird return $result; gelesen:
PHP:
name="nummer.$transactionID"
name="nummer.$transactionID"
name="nummer.$transactionID"
sollte aber eher so sein:...
PHP:
name="nummer.1"
name="nummer.2"
name="nummer.3"
kann mir da jmd helfen?
lg
 
Werbung:
sprintf benutzt du total falsch. Die Parameter müssen außerhalb der Zeichenkette stehen.
Warum benutzt du überhaupt sprintf? Das macht mit %s gar keinen Sinn, weil du direkt einfach die Variable in die Zeichenkette schreiben kannst mit Doublequotes.
 
ok meine Funktion sieht jetzt so aus:
PHP:
  function my_function()
  {
    $states = array('schwarz', 'rot', 'blau');
    $transactionIDs = array('1', '2', '3');
    $result = '<img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.$transactionID" />';
    foreach ($transactionIDs as $transactionID) {
      foreach ($states as $state) {
        $testPath = '<img src="transactions/Ordner.$transactionID/$state.png" />';
        if (file_exists($testPath)) {
          $result = $testPath;
          break;
        }
        return $result;
      }
    }
  }
Folgende Ausgabe von $result:
PHP:
<img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.$transactionID" />
die hochkommas sind doch richtig gesetzt, was stimmt nicht?
lg
 
Werbung:
aber ausklammern kann ich die doch auch nicht, wenn ich will, dass im quelltext weiterhin z.b: name="dieVariable"; steht...wie sollte ich es also hier angehen?
lg
 
Werbung:
PHP:
$result = '<img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.' . $transactionID . '" />';
oder
PHP:
$result = "<img src='inventory_images/8.jpg' onclick='changecolor(this)' name='nummer.$transactionID' />";
 
ok nun wollte ich überprüfen ob in einem der Verzeichnisse: Ordner1, Ordner2 oder Ordner3 die Dateien: schwarz.png,rot.png oder blau.png existieren.
Jedoch ist meine Funktion falsch, da file_exists=false ergibt, obwohl ein solcher Pfad existiert.
hier die Funktion:
PHP:
  function my_function()
  {
    $states = array('schwarz', 'rot', 'blau');
    $transactionIDs = array('1', '2', '3');
    foreach ($transactionIDs as $transactionID) {
      foreach ($states as $state) {
        $result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$transactionID\" />";
        $testPath = '<img src="transactions/Ordner$transactionID/$state.png" />';
        if (file_exists($testPath)) {
          $result = $testPath;
          break;
        }
        return $result;
      }
    }
  }
kannst du mir noch da kurz helfen?? lg und danke
 
Nu mach doch mal die Augen auf!!! Diese Datei '<img src="transactions/Ordner$transactionID/$state.png" />' gibt es garantiert nicht, höchstens transactions/Ordner$transactionID/$state.png
 
Werbung:
ah ja sorry, nicht mitgedacht... abgeändert in:
PHP:
$result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$transactionID\" />";
$testPath = "transactions/Ordner$transactionID/$state.png";
Also, es existiert die die Datei: transactions/Ordner1/rot.png,
trotzdem wird file_exists=false. wieso nun?
lg
 
ok habs hingekriegt...nun habe ich den code leicht abgeändert in :
PHP:
  function my_function()
  {
    $states = array('schwarz', 'rot', 'blau');
    foreach(range(0, 12) as $number) {
      foreach ($states as $state) {
        $result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$number\" />";
        $testPath = "transactions/Ordner$number/$state.png";
        if (file_exists($testPath)) {
          $result = $testPath;
          break;
        }
        return $result;
      }
    }
  }
  $imagesPerLine = array(1=>1, 2=>2); $default = 3;
  $lines = array(1, 2, 3);
  $html="";
  foreach ($lines as $line) {
    if (!isset($imagesPerLine[$line])) {
      $imagesPerLine[$line] = $default;
    }
    $html.= "<tr>\n";
    for ($i = 1; $i <= $imagesPerLine[$line]; $i++) {
      $html.=sprintf("<td>%s</td>\n", my_function());
    }
    $html.="</tr>\n";

  }
  echo $html;
ergibt folgende Ausgabe:
PHP:
<tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr> <tr> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> <td><img src="inventory_images/8.jpg" onclick="changecolor(this)" name="nummer.0" /></td> </tr>
Nun wollte ich jedoch, dass nummer(n+1) gilt,also eher:
PHP:
name="nummer.0"
name="nummer.1"
name="nummer.2" 
etc..
jedoch weiß ich einfach nicht wie ich meine Schleife umkonsturieren soll dafür :/ wo muss ich meine Schleife ändern?
lg
 
Und schon wieder Sprintf. Lerne Grundlagen. Es kann absolut nicht sein, dass du für jedes Problem in diesem UND im php.de-Forum um Hilfe bettelst.
 
Werbung:
mit sprintf funktioniert es wunderbar, stellt auch keine Sicherheitslücke dar und langsamer wirds dadruch auch nicht, trotzdem danke, problem immer noch nicht gelöst... :(
 
Doch wird es und ganz davon abgesehen, solltest du wirklich aufhören mit deinen lästigen Crosspostings.
 
PHP:
  function my_function()
  {
    $states = array('schwarz', 'rot', 'blau');
    foreach(range(0, 12) as $number) {
      foreach ($states as $state) {
        $result = "<img src=\"inventory_images/8.jpg\" onclick=\"changecolor(this)\" name=\"nummer.$number\" />";
        $testPath = "transactions/Ordner$number/$state.png";
        if (file_exists($testPath)) {
          $result = $testPath;
          break;
        }
        return $result;
      }
    }
  }

Tja, warum gibt das wohl mehr oder weniger immer etwas zurück mit $number=0?

Man beachte die Position der return-Zeile.

(Auch das break ist Quatsch.)

Ich kann es auch noch mal sagen: Du musst mehr Gefühl für Programmierung bekommen. Du musst erfahrener im grundlegenden Umgang mit der Syntax werden.

Es hat einfach keinen Sinn, wenn du dir nur mithilfe von Foren Sachen zusammenkopierst, die du nicht verstehst. (Dem gezeigten Code gehen schon etliche Threads voraus.) Das ist nur Zeitverschwendung für alle Beteiligten.

Deshalb, in deinem eigenen Interesse: Lerne bitte erst mal weiterhin die Grundlagen mit Büchern oder Tutorials. Auf die Weise, auf die du es momentan versuchst, wird es nicht klappen. Du musst dich da viel mehr selbst durchbeißen.

- Lerne Grundlagen | Quellensammlung - php.de
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben