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

Frage Skill Calculator erstellen

So, habe jetzt mal alle Ideen und Vorschläge versucht selber umzusetzen allerdings ohne derzeit noch ohne CSS und JS.

------------------------------------------------------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Skill Calc</title>
</head>
<link href="stylesheets/common.css" type="text/css" rel="stylesheet">
<body>

<h1>Skill Calc</h1>
<form method="post" action="send.php">

<label for="val">1</label>
<input type="radio" value="1" id="val" name="ship">
<label for="med">2</label>
<input type="radio" value="2" id="med" name="ship">
<label for="str">3</label>
<input type="radio" value="3" id="str" name="ship">

<br>
<label>OB 1</label>
<select name="OB1">
<option value="no"> ?? </option>
<option value="DM" label="DM"> DM.</option>
<option value="FL" label="FL"> FL.</option>
</select>
<label>M 1</label>
<select name="M1">
<option value="no"> ?? </option>
<option value="12" label="12"> 12.</option>
<option value="34" label="34"> 34.</option>
<option value="56" label="56"> 56.</option>
</select><br>

<label>OB 2
<select name="OB2">
<option value="no"> ?? </option>
<option value="SI" label="SI"> SI.</option>
<option value="DC" label="DC"> DC.</option>
</select>
<label>M 2</label>
<select name="M2">
<option value="no"> ?? </option>
<option value="78" label="78"> 78.</option>
<option value="90" label="90"> 90.</option>
</select><br>

<label>OB 3</label>
<select name="OB3">
<option value="no"> ?? </option>
<option value="NS" label="NS"> NS</option>
<option value="NE" label="NE"> NE</option>
</select>

<label>M 3</label>
<select name="M3">
<option value="no"> ?? </option>
<option value="10" label="10"> 10.</option>
<option value="11" label="11"> 11.</option>

</select><br>

<label>OB 4</label>
<select name="OB4">
<option value="no"> ?? </option>
<option value="TS" label="TS"> TS.</option>
<option value="AS" label="AS"> AS.</option>
</select>

<label>M 4</label>
<select name="M4">
<option value="no"> ?? </option>
<option value="98" label="98"> 98.</option>
<option value="99" label="99"> 99.</option>
</select><br>

<input type="submit" value="create" />
<br />
</form>
</body>
</html>
------------------------------------------------------------------------------------------------------------


PHP-Script:
--------------------------------------------------
$ship = $_POST['ship'];
$OB1 = $_POST['OB1'];
$OB2 = $_POST['OB2'];
$OB3 = $_POST['OB3'];
$OB4 = $_POST['OB4'];
$M1 = $_POST['M1'];
$M2 = $_POST['M2'];
$M3 = $_POST['M3'];
$M4 = $_POST['M4'];
exec ( "/test.sh $M1 $M2 $M3 $M4 $OB1 $OB2 $OB3 $OB4 $ship" );
?>
--------------------------------------------------

die Daten werden an die PHP-Datei geschickt und werden angezeigt, soweit funktioniert es nur die Weitergabe an das Script macht noch Probleme.

Wie man an der Uhrzeit sieht versuche ich mir das irgendwie zusammen zu reimen :D aber jetzt heißt es erstmal gute Nacht!
 
Werbung:
nee so geht das auch nicht ,du musst die Zeile löschen.
Code:
$("p").html(arr);

und dafür die hin schreiben
Code:
alert(arr)

dann Bekommst du die Ausgabe als Alert.

EDIT: SORRY ,die Naricht wurde irgendwie zu spät gesendet
 
Zuletzt bearbeitet:
Werbung:
Doch das geht ,Guckst du hier
*** Link entfernt, weil nicht mehr erreichbar ***

du hattest geschrieben das du es so gemacht hast

Code:
$("p").alert(arr);
so geht das leider nicht . sonder so
Code:
alert(arr)
 
Zuletzt bearbeitet:
Du hast recht, sorry!
Aber wie gesagt der Code ist mir ehrlich gesagt noch zu kompliziert daher arbeite ich gerade an dem von mir geposteten Code weiter der bis zum Bashscript ohne Probleme funktioniert.

Die Übergabe der Variablen wie gesagt klappt noch nicht:
------------------------------------------------------
<?php
$ship = $_POST['ship'];
$OB1 = $_POST['OB1'];
$OB2 = $_POST['OB2'];
echo "$OB1";
echo "$OB2";
exec ( "./test.sh $OB1 $OB2 $ship" );
?>
------------------------------------------------------
Nach dem betätigen des Buttons werden die Daten an die PHP Datei ohne Probleme übergeben, zur Prüfung lasse ich mir hier die Variablen OB1 und OB2 anzeigen und diese werden angezeigt.
Der externe Scriptaufruf klappt auch (habe es mit festen Werten getestet) aber nicht mit den Variablen die in z.B. $OB1 stehen.
 
Werbung:
Was macht denn test.sh? Kann man das nicht auch mit PHP erledigen?

Das Bashscript erstellt anhand der Variablen ein Foto mit den ausgewählten Modulen und Briefings plus Bild der Klasse (geht über convert +-append).
Ich kenne mich nur mit Bashscripten aus daher versuche ich es so zu realiseren.
Aktuell soll das Bashscript nur die Variablen entgegen nehmen und in eine Textdatei die übergebenen Variablen schreiben um die Funktion zu testen.

Bashscript-Code:
----------------------------------------------------------------------
#!/bin/sh
ship=0
OB1=0
OB2=0

while getopts "OB1:OB2:ship:" ARGV;
do
case ${ARGV} in
OB1) OB1=${OPTARG};;
OB2) OB2=${OPTARG};;
ship) ship=${OPTARG};;
*) echo "Fehler!"
exit 1
;;
esac
done
echo "$OB1" > /pfad/test.txt
echo "$OB2" >> /pfad/test.txt
----------------------------------------------------------------------

die angepasste PHP Datei sieht so aus:

----------------------------------------------------------------------
<?php
$ship = $_POST['ship'];
$OB1 = $_POST['OB1'];
$OB2 = $_POST['OB2'];
echo "$OB1";
echo "$OB2";
exec ( "/test.sh -OB1 $OB1 -OB2 $OB2 -ship $ship" );
?>
----------------------------------------------------------------------
 
Das glaube ich dir, nur sind meine HTML/PHP Kentnisse begrenzt weshalb ich es erstmal versuche so umzusetzen.
Aber du kannst mir gerne einen Denkanstoß in PHP geben.
Das Bashscript soll im Endeffekt die Variablen entgegen nehmen, aus den Werten ein Bild zusammensetzen und eine Randomwert erstellen der als Name für das Bild dient und auf einem FTP zur Verfügung stellt. (Das Verzeichnis würde dann via cronjob nach 30 Tagen gelöscht werden damit es nicht zu voll wird).
Gedacht hatte ich es mir so, dass der Randomwert direkt von der PHP Datei erstellt wird und nach dem Ausführen des Bashscriptes direkt den Link angibt (schließlich wird ja eh nur der Randomwert dafür benötigt).

Aber ich bin natürlich für Optimierungen offen solang ich es verstehe und umsetzen kann :D
 
Werbung:
Eine Beispiel zum Erstellen eines Bildes findest du hier: http://de2.php.net/manual/de/function.imagecreatetruecolor.php
Einen eindeutigen Dateinamen erstellst du mit http://de2.php.net/manual/de/function.uniqid.php

die uniqid Funktion ist schonmal sehr gut danke dafür!
wg. der Bilderstellung, will ich auf bestehende Bilder aus meiner DB oder Dateisystem zugreifen und einfach zusammensetzen oben und seitlich und das kann die erste PHP-Funktion?!
 
Werbung:
Hier mal ein simples Beispiel, in dem aus 3 Bildern 1 gemacht wird.
PHP:
<?php
  
   $orientation = 'horizontal';
  
   $filename1 = './images/bild1.jpg';
   $filename2 = './images/bild2.jpg';
   $filename3 = './images/bild3.jpg';
  
   if (file_exists($filename1))
   {
      if (file_exists($filename2))
      {
         if (file_exists($filename1))
         {
             $w = $h = 0;
             $sizes1 = getimagesize($filename1);
             $sizes2 = getimagesize($filename2);
             $sizes3 = getimagesize($filename3);
            
             if ($orientation == 'vertical')
             {
                if ($w < $sizes1[0])
                    $w = $sizes1[0];
                    
                if ($w < $sizes2[0])
                    $w = $sizes2[0];
                    
                if ($w < $sizes3[0])
                    $w = $sizes3[0];
                    
                $h = $sizes1[1] + $sizes2[1] + $sizes3[1];
             }
             else
             {
                $w = $sizes1[0] + $sizes2[0] + $sizes3[0];
                
                if ($h < $sizes1[1])
                    $h = $sizes1[1];
                    
                if ($h < $sizes2[1])
                    $h = $sizes2[1];
                    
                if ($h < $sizes3[1])
                    $h = $sizes3[1];
             }
            
             $img  = imagecreatetruecolor($w, $h);
             $img1 = imagecreatefromjpeg($filename1);
             $img2 = imagecreatefromjpeg($filename2);
             $img3 = imagecreatefromjpeg($filename3);
            
             $x = $y = 0;
            
             ImageCopy ($img, $img1 , $x, $y, 0, 0, $sizes1[0], $sizes1[1]);
            
             if ($orientation == 'vertical')
               $y += $sizes1[1];
             else
               $x += $sizes1[0];
              
             ImageCopy ($img, $img2 , $x, $y, 0, 0, $sizes2[0], $sizes2[1]);
            
             if ($orientation == 'vertical')
               $y += $sizes2[1];
             else
               $x += $sizes2[0];
              
             ImageCopy ($img, $img3 , $x, $y, 0, 0, $sizes3[0], $sizes3[1]);
            
             $filename = './images/' . uniqid() . '.jpg';
            
             imagejpeg($img, $filename);
            
             echo "Fertig, Dateiname: $filename <img src='$filename'>";
         }
         else
           echo "$filename3 exitiert nicht";
      }
      else
        echo "$filename2 exitiert nicht";
   }
   else
      echo "$filename1 exitiert nicht";
?>
 
Hier mal ein simples Beispiel, in dem aus 3 Bildern 1 gemacht wird.
PHP:
<?php
 
   $orientation = 'horizontal';
 
   $filename1 = './images/bild1.jpg';
   $filename2 = './images/bild2.jpg';
   $filename3 = './images/bild3.jpg';
 
   if (file_exists($filename1))
   {
      if (file_exists($filename2))
      {
         if (file_exists($filename1))
         {
             $w = $h = 0;
             $sizes1 = getimagesize($filename1);
             $sizes2 = getimagesize($filename2);
             $sizes3 = getimagesize($filename3);
           
             if ($orientation == 'vertical')
             {
                if ($w < $sizes1[0])
                    $w = $sizes1[0];
                   
                if ($w < $sizes2[0])
                    $w = $sizes2[0];
                   
                if ($w < $sizes3[0])
                    $w = $sizes3[0];
                   
                $h = $sizes1[1] + $sizes2[1] + $sizes3[1];
             }
             else
             {
                $w = $sizes1[0] + $sizes2[0] + $sizes3[0];
               
                if ($h < $sizes1[1])
                    $h = $sizes1[1];
                   
                if ($h < $sizes2[1])
                    $h = $sizes2[1];
                   
                if ($h < $sizes3[1])
                    $h = $sizes3[1];
             }
           
             $img  = imagecreatetruecolor($w, $h);
             $img1 = imagecreatefromjpeg($filename1);
             $img2 = imagecreatefromjpeg($filename2);
             $img3 = imagecreatefromjpeg($filename3);
           
             $x = $y = 0;
           
             ImageCopy ($img, $img1 , $x, $y, 0, 0, $sizes1[0], $sizes1[1]);
           
             if ($orientation == 'vertical')
               $y += $sizes1[1];
             else
               $x += $sizes1[0];
             
             ImageCopy ($img, $img2 , $x, $y, 0, 0, $sizes2[0], $sizes2[1]);
           
             if ($orientation == 'vertical')
               $y += $sizes2[1];
             else
               $x += $sizes2[0];
             
             ImageCopy ($img, $img3 , $x, $y, 0, 0, $sizes3[0], $sizes3[1]);
           
             $filename = './images/' . uniqid() . '.jpg';
           
             imagejpeg($img, $filename);
           
             echo "Fertig, Dateiname: $filename <img src='$filename'>";
         }
         else
           echo "$filename3 exitiert nicht";
      }
      else
        echo "$filename2 exitiert nicht";
   }
   else
      echo "$filename1 exitiert nicht";
?>

Hallo m.scatello,

danke für den Code, funktioniert soweit super!
Habe den Code jetzt nochmal um ein weiteres Bild erweitert so dass ich schonmal den ersten von 4 Blocks habe :)

ich würde jetzt so weiter vorgehen:

den Code würde ich zweimal (jeweils mit 4 unterschiedlichen Variablen horizontal ausführen) und dann müsste ich die beiden erstellten Bilder mit zwei Weiteren bereits bestehenden Bildern vertikal zusammenfügen und das entstandene Bild als Link ausgeben.
Nachjedem Script Abschnitt würde ich mir den Pfad für das zusammengefügte Bild in eine neue Variable schreiben und anhand der Variablen das Script ein 3. Mal ausführen mit den 4 neuen Bildern und anschließend den Link (wie bisher) ausgeben. Anschließend würde ich die temporär erstellten Bilder noch löschen damit nur noch das Endbild zur Verfügung steht.

Wäre dieses Vorgehen ok?!
 
okay,

das Zusammenfügen der 2x4 Bilder horizontal hat geklappt, diese versuche ich gerade nochmal zu übergeben um die beiden bereits zusammengefügten Bilder vertikal zu verbinden.



Dafür habe ich das Script wie folgt abgeändert.
Problem ist jetzt nur das neu erstellte Bild ist schwarz? (filename1 und 2 sollen zusammengefügt werden, die Bilder sind soweit auch ok!).

----------------------------------------------------------------------------------------------
<?php
$orientation = 'vertical';
$filename1 = './wp-content/dncalc/M.png';
$filename2 = './wp-content/dncalc/OB.png';

if (file_exists($filename1))
{
if (file_exists($filename2))
{
$w = $h = 0;
$sizes1 = getimagesize($filename1);
$sizes2 = getimagesize($filename2);

if ($orientation == 'vertical')
{
if ($w < $sizes1[0])
$w = $sizes1[0];

if ($w < $sizes2[0])
$w = $sizes2[0];

$h = $sizes1[1] + $sizes2[1];
}
else
{
$w = $sizes1[0] + $sizes2[0];

if ($h < $sizes1[1])
$h = $sizes1[1];

if ($h < $sizes2[1])
$h = $sizes2[1];
}

$img = imagecreatetruecolor($w, $h);
$img1 = imagecreatefrompng($filename1);
$img2 = imagecreatefrompng($filename2);

$x = $y = 0;

ImageCopy ($img, $img1 , $x, $y, 0, 0, $sizes1[0], $sizes1[1]);

if ($orientation == 'vertical')
$y += $sizes1[1];
else
$x += $sizes1[0];

ImageCopy ($img, $img2 , $x, $y, 0, 0, $sizes2[0], $sizes2[1]);

$filename = './wp-content/dncalc/' . uniqid() . '.png';

imagepng($img, $filename);

echo "Fertig, Dateiname: $filename <img src='$filename'>";
}
else
echo "$filename2 exitiert nicht";
}
else
echo "$filename1 exitiert nicht";
?>
----------------------------------------------------------------------------------------------
 
Werbung:
Wenn du unterschiedliche Anzahlen von Bilder zusammenfügen willst, warum machst du keine Funktion daraus?
Du hast Glück, dass ich im Moment etwas Langeweile habe, denn ich bin kein Freund davon, fertigen Quellcode zu liefern, weil der Lerneffekt meist gleich Null ist, wie auch hier. Mit Copy/Paste ohne Mitdenken lernt man nichts.
PHP:
<?php
   //**************************************************************************
   function createImage($orientation, $filenames, $destination, $type)
   {
       $result = true;
      
       $errors = array();
      
       $fileData = array();
      
       // Dateien prüfen
       foreach ($filenames as $file)
       {
           if (! file_exists($file))
               $errors[] = "$file existiert nicht";
           else
               $fileData[] = getImageSize($file);
       }
      
       // Dateien scheinen vorhanden zu sein
       if (count($errors) == 0)
       {
           // Größe des neuen Bildes bestimmen
           $w = $h = 0;
           foreach ($fileData as $data)
           {
              if ($orientation == 'vertical')
              {
                 if ($w < $data[0])
                   $w = $data[0];
              
                 $h += $data[1];
              }
              else
              {
                 $w += $data[0];
                
                 if ($h < $data[1])
                   $h = $data[1];
              }
           }
          
           // Neues Image
           $img  = imagecreatetruecolor($w, $h);
          
           if ($img)
           {
              $x = $y = 0;
              
              for($i = 0; $i < count($fileData); $i++)
              {
                  $data = $fileData[$i];
                  $filename = $filenames[$i];
                  
                  switch($data[2])
                  {
                     case IMAGETYPE_GIF:
                             $src = imagecreatefromgif($filename);
                             break;
                     case IMAGETYPE_JPEG:
                             $src = imagecreatefromjpeg($filename);
                             break;
                     case IMAGETYPE_PNG:
                            $src = imagecreatefrompng($filename);
                            break;
                    default:
                            $src = false;
                            break;
                  }
                  
                  if ($src)
                  {
                     if (! ImageCopy ($img, $src , $x, $y, 0, 0, $data[0], $data[1]))
                         $errors[] = "Kopieren von $filename fehlgeschlagen";
                    
                     if ($orientation == 'vertical')
                        $y += $data[1];
                     else
                        $x += $data[0];
                  }
                  else
                    $errors[] = "Erzeugen von Image $filename fehlgeschlagen";
              }
              
              if (count($errors) == 0)
              {
                  switch ($type)
                  {
                     case IMAGETYPE_GIF:
                             $ok = imagegif($img, $destination);
                             break;
                     case IMAGETYPE_JPEG:
                             $ok = imagejpeg($img, $destination);
                             break;
                     case IMAGETYPE_PNG:
                            $ok = imagepng($img, $destination);
                            break;
                     default:
                            $ok = false;
                            break;
                     if (! $ok)       
                       $errors[] = "Datei $destination konnte nicht erstellt werden";
                  }
              }
           }
           else
             $errors[] = "Neues Image konnte nicht erstellt werden";
       }
      
       if (count($errors))
           $result = "Folgende(r) Fehler ist aufgetreten:<br>" . implode("<br>", $errors);
      
       return $result;
   }
   //**************************************************************************
  
   $orientation = 'vertical';
   $filenames = array('./images/bild1.jpg', './images/bild2.jpg', './images/bild3.jpg');
   $destination = './images/' . uniqid() . '.jpg';
   $type = IMAGETYPE_JPEG;
  
   $result = createImage($orientation, $filenames, $destination, $type);
  
   if ($result !== true)
       echo $result;
   else
       echo "$destination erzeugt";
?>
 
Um ehrlich zu sein habe ich auch nirgends um einen fertigen Code gebeten ;) ich nehme ihn natürlich gerne an um zu sehen wie es funktioniert^^ In den vorherigen Posts habe ich ja versucht selber mitzudenken nur wenn Codes kommen wo ich noch nicht alles verstehe kommt es halt auch zu fragen dazu^^ Es hat mich aber aufjedenfall schon gut voran gebracht und über PHP ist es deutlich eleganter!
 
Du schreibst
Problem ist jetzt nur das neu erstellte Bild ist schwarz?
Aber warum das so ist, hast du nicht versucht herauszufinden. In deinem Quellcode wird nirgendwo auf Fehler überprüft. Habe ich im ersten Script auch nicht gemacht, aber ich erwarte auch etwas Eigenleistung und eben nicht nur Copy/Paste.
 
Werbung:
ich hatte mir mit Echo die Inhalte der Variablen anzeigen lassen um zu schauen ob irgendwo die bereits erstellten Bilder aus evtl. Berechtigungsproblemen oder so nicht angezeigt werden können, dies konnte ich allerdings ausschließen. (letzte Post: "die Bilder sind soweit auch ok!)."
Ich bin dir wirklich dankbar für deine Hilfe und auch deinen Code, nur ist es irgendwie auch komisch das du von dir aus 2 fast fertige Codes postest (ohne Aufforderung) und dann aber sagst "ohne mitdenken lernt man nix". Ist doch klar, dass dann auch Fragen dazu kommen weil du jemanden einen Code gepostet hast der derzeit nur Basics versteht.
 
nur ist es irgendwie auch komisch das du von dir aus 2 fast fertige Codes postest (ohne Aufforderung) und dann aber sagst "ohne mitdenken lernt man nix".
Da ist nix komisches dran. Wenn du gewollt hättest, hättest du dir mal die benutzten Funktionen in der Doku ansehen können und dabei hättest du feststellen können, das alle einen Return-Wert haben. Diesen hättest du locker alleine prüfen können. Ich turne schon seit Jahren in Foren rum und stelle immer wieder fest, dass lieber Fragen in einem Forum gestellt werden, anstatt zuerst mal in der Doku nachzusehen.
 
Zurück
Oben