Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Stringausgabe in einer Funktion

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Stringausgabe in einer Funktion

    Hallo,

    ich hab mal wieder ein Problem. Und zwar geht es
    um den Import mehrerer CSV-Dateien in eine MySql-Datanbank.

    Den Import habe ich in eine Funktion namens
    Code:
    csv_import("Datei","Tabelle");
    gepackt.

    Innerhalb dieser Funktion will ich ein Backup der gewählten Tabelle anlegen.
    Das sieht folgendermaßen aus:
    PHP-Code:
    system(sprintf('mysqldump -u'.$DB['user'].' -p'.$DB['pass'].' '.$DB['databas'].$tabelle.' > %s/'.$tabelle.'.sql',$path),$retVal); 
    Jetzt soll es aber so sein, das wenn das Backup fehlschlägt, eine Meldung ausgegeben wird, dass das Backup nicht erstellt wurde.
    So sieht das bei mir aus:
    PHP-Code:
    if($retVal!=0){
         echo 
    "Das Backup der Tabelle ".$tabelle." ist fehlgeschlagen!";
      exit;
     } 
    Leider wird nichts ausgegeben.
    Wie bekomme ich das hin, das die Meldung angezeigt wird?


  • #2
    hm... ich weiß jetzt nicht, ob system(xyz) einen Rückgabewert hat - aber wenn dann müsste

    $retVal=system(bla);

    es tun ...
    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

    Kommentar


    • #3
      Zitat von eagle275 Beitrag anzeigen
      hm... ich weiß jetzt nicht, ob system(xyz) einen Rückgabewert hat ...
      Da hilft ein Blick ins Handbuch: [MAN]system[/MAN]

      Da steht sogar drin, dass system nicht das als Rückgabewert liefert, was du vermutest.
      Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

      Kommentar


      • #4
        Die Funktion zum import sieht so aus:
        PHP-Code:
        $was=csv_import("files/vereine.csv","vereine");
        $wer=csv_import("files/dirigenten.csv","dirigenten");
        $wie=csv_import("files/schrift.csv","schrift");
        $wo=csv_import("files/1vorstand.csv","vorstand1");
        $wu=csv_import("files/2vorstand.csv","vorstand2");
        $we=csv_import("files/jugendleiter.csv","jugendleiter");
        $wi=csv_import("files/kassierer.csv","kassierer");
        if(
        $was==AND $wer==AND $wie==AND $wo==AND $wu==AND $we==AND $wi==1){
           echo 
        '<script language="javascript">alert("Aktualisierung erfolgreich!");</script>';

        Nicht schimpfen wegen den Variablen

        Innerhalb der Funktion sieht der Quelltext für das Backup so aus:
        PHP-Code:
        /*-------------------Backup der Tabelle anlegen-------------------------------*/
        $date date("G.i.s_d.m.Y");
        $dateiname $date."_".$DB['database']."_backup.sql";
        $path "../../backup/"

        system(sprintf('mysqldump -u'.$DB['user'].' -p'.$DB['pass'].' '.$DB['databas'].$tabelle.' > %s/'.$tabelle.'.sql',$path),$retVal);

        if(
        $retVal!=0){
             echo 
        "Das Backup der Tabelle ".$tabelle." ist fehlgeschlagen!";
          exit;
        }
        /*-------------------Backup der Tabelle anlegen-------------------------------*/ 
        Das funktioniert leider nicht. Die Meldung wird nicht ausgegeben.

        Kommentar


        • #5
          Teile die einzelnen Anweisungen auf, damit du prüfen kannst, was da eigentlich vor sich geht:

          PHP-Code:
          $command sprintf(/* ... */);  // Anweisung generieren
          $output system($command$retVal); // Anweisung ausführen

          echo 'Command: ' htmlspecialchars($command) . '<br>'// Für's Debugging
          echo 'Command Result: ' $retVal '<br>'// Für's Debugging
          echo 'Last Line of the Output: ' var_export($outputtrue) . '<br>'// Für's Debugging 
          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

          Kommentar


          • #6
            aus eben jenem Manual ..

            Rückgabewerte

            Gibt im Fehlerfall hingegen FALSE zurück .. . das sollte doch brauchbar sein

            PHP-Code:
            if ($retVal===FALSE) {
               echo 
            "Mecker , Fehlgeschlagen<br>";

            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

            Kommentar


            • #7
              Also meine index.php sieht jetzt so aus:

              PHP-Code:
              <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
                "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
              <html>
                  <head>
                      <title>Mitgliedsvereine-Admin</title>
                      <script type="text/javascript"  src="../sides/script.js">
                    </script>
                  </head>
                  <body>
              <?php    
                
              include("test.php");
                
                
              $zufall=md5(rand());  //Zufallshash erzeugen

                
              echo "<pre><input type='button' class='aktuell' value='Liste aktuallisieren' onclick=\"pruefe('$zufall');\" /></pre>";

              if(isset(
              $_GET["action"]) AND $_GET["action"]!=""){
                
              $was=csv_import("files/vereine.csv","vereine");
                
              $wer=csv_import("files/dirigenten.csv","dirigenten");
                
              $wie=csv_import("files/schrift.csv","schrift");
                
              $wo=csv_import("files/1vorstand.csv","vorstand1");
                
              $wu=csv_import("files/2vorstand.csv","vorstand2");
                
              $we=csv_import("files/jugendleiter.csv","jugendleiter");
                
              $wi=csv_import("files/kassierer.csv","kassierer");

                if(
              $was==AND $wer==AND $wie==AND $wo==AND $wu==AND $we==AND $wi==1){
                  echo 
              '<script language="javascript">alert("Aktualisierung erfolgreich!");</script>';
                } 
              }
              ?>     
                  </body>
              </html>
              Die csv_import so:

              PHP-Code:
              include("../sides/db_connect.php");
              include(
              "../sides/dbdaten.php");

              function 
              csv_import($file,$tabelle,$db="db269347718"){
                
              $error="";
                if(!
              file_exists($file)) {
                  
              $error="Die Datei ".$file." ist nicht vorhanden";     //Pfad + Name der Datei 
                  
              return $error;
                }  
              //if File_Exists 
                
                /*-------------------Backup der Tabelle anlegen-------------------------------*/
                
              global $DB;
                
              $date date("G.i.s_d.m.Y");
                
              $dateiname $date."_".$DB['database']."_backup.sql";
                
              $path "../backup/";
                      
                
              $command sprintf('mysqldump -u'.$DB['user'].' -p'.$DB['pass'].' '.$DB['database'].' '.$tabelle.' > %s'.$tabelle.'.sql',$path);
                echo 
              'Command: ' htmlspecialchars($command) . '<br>';

                
              $output system($command$retVal);
                echo 
              'Command Result: ' $retVal '<br>';
                
                echo 
              'Last Line of the Output: ' var_export($outputtrue) . '<br>'
                       
                return 
              $retVal;
              ... 
              Leider ohne Erfolg. Die Echos werden einfach nicht ausgegeben.
              Und was noch komischer ist, das Backup wird auch nicht ausgeführt.

              Packe ich den Quelltext für das Backup in eine eigene Funktion
              und rufe ihn in der index.php z.B. so auf:
              PHP-Code:
              backup_tb("Tabellenname"); 
              funktioniert das backup und auch die Echo's

              Kommentar


              • #8
                uarg .. hab ich da eben GLOBAL gelesen ? ...*kopfschüttel*
                hast du mal geschaut, dass mysqldump überhaupt in das verzeichnis schreiben darf, wenn es als apache-user ausgeführt wird?
                "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                Kommentar


                • #9
                  uarg .. hab ich da eben GLOBAL gelesen ? ...*kopfschüttel*
                  Wieso?

                  Das ist ja das komische. Wenn ich den Quelltext in eine
                  eigene Funktion stecke, funktioniert ja alles.
                  Nur wenn's in der csv_import mit drinsteckt nicht!?

                  Kommentar


                  • #10
                    das könnte wohl daran liegen, dass die Funktion als Bestandteil deiner index.php über Informationen (= Variablen) verfügt, die in der import-php nicht bekannt sind - warum aber ein GLOBAL DB in der Import-Funktion das beheben soll ... würde mich arg wundern - weil die import-Funktion ja gerade NICHT über die nötigen Daten zu verfügen scheint...

                    dreh mal error-reporting hoch .. nicht dass es daran scheitert, dass "er" includes nicht findet
                    "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                    Kommentar


                    • #11
                      Also ich hab jetzt das global rausgenommen
                      und die Variablen durch Benutzer bzw. Passwort ersetzt.

                      Innerhalb der Funktion csv_import funktioniert trotzdem
                      kein echo und kein Backup.

                      Innerhalb der Funktion backup_tb($tabelle) funktionierts jedoch.

                      Ich hab wirklich keine Ahnung woran das liegen soll

                      Kommentar


                      • #12
                        pack mal bitte

                        PHP-Code:
                        error_reporting(E_ALL);
                        ini_set('display_errors'1); 
                        direkt VOR den Aufruf deiner CSV-import FUnktion
                        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                        Kommentar


                        • #13
                          Ich sag dir ich bin der volle Vollpfosten

                          Wenn du dir die csv_import() anschaust, siehst du folgendes:
                          PHP-Code:
                            if(!file_exists($file)) {
                              
                          $error="Die Datei ".$file." ist nicht vorhanden";     //Pfad + Name der Datei 
                              
                          return $error;
                            }  
                          //if File_Exists 
                          Leider stimmt die Pfadangeabe nicht.
                          Darum wird die Funktion beendet bevor sie richtig anfängt!!

                          Jetzt funktioniert auch das echo wie es soll

                          Aber eine Frage bleibt noch. Als Rückgabewert von [MAN]system()[/MAN]
                          erhalte ich bei Erfolg eine 0, bei Fehler je nach dem eine 2 oder eine 6
                          oder was weiß ich. Müßte da nicht aber eigentlich FALSE erscheinen?

                          Kommentar


                          • #14
                            der Returnwert von system (x,$retVal) ....

                            $retVal ist FALSE bei Fehler,

                            sonst unbestimmt bzw die Letzte Ausgabezeile des ausgeführten Befehls ....

                            was system selbst liefert ... könnte einer von den uralten errorlevels sein, auch bekannt aus der Batch-Programmierung unter MS-DOS und ähnlichen .... da ist meist 0 = kein Fehler , alles andere kann auf Fehler hindeuten ..
                            aber ich würd mich nicht so drauf verlassen
                            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste

                            Kommentar


                            • #15
                              Zitat von pfump Beitrag anzeigen
                              PHP-Code:
                                  echo '<script language="javascript">alert("Aktualisierung erfolgreich!");</script>'
                              Das ist offensichtlich zum Debuggen gedacht. Du solltest in deinem Beitrag erwähnen, ob du die alert-Meldung siehst oder nicht.

                              Zitat von pfump Beitrag anzeigen
                              Die Echos werden einfach nicht ausgegeben.
                              Dann wird die Funktion wahrscheinlich schon vorher verlassen, wegen
                              PHP-Code:
                                if(!file_exists($file)) {
                                  
                              $error="Die Datei ".$file." ist nicht vorhanden";     //Pfad + Name der Datei 
                                  
                              return $error;
                                } 
                              Zitat von pfump Beitrag anzeigen
                              PHP-Code:
                              $output system($command$retVal); 
                              Üblicherweise ist danach $retVal == 0, wenn $command erfolgreich beendet wurde. In der index.php verlangst du aber $retVal == 1;
                              Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

                              Kommentar

                              Lädt...
                              X