php try catch?

Code - (programmieren, PHP)

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Bei PHP geht das. Da sind die Typen von Variablen nicht festgelegt und können mittendrin wechseln ;-).

In Zeile 21 wird dein String ohne Murren in Float umgewandelt, zugewiesen und von da an ist $b ein Float (Allerdings mit dem Wert "NaN" oder 0 (weiß ich grad nicht), weil dein String Blödsinn enthält :-D)

Super, Wert 0 hab ich raus gefunden.

Kann man das auch irgendwie machen, dass nen Fehler entsteht :D

1
@ichbimseinpeter

Vllt. der gute alte "if"?

Wenn das eine Benutzereingabe ist, solltest du das ohnehin vernünftig auf Korrektheit überprüfen. Sonst können da auch ziemlich leicht Sicherheitslücken entstehen.

try... catch... ist eher dazu gedacht, um schwer vorhersehbare Laufzeitfehler abzufangen und nicht, um die Korrektheit zu überprüfen. Ist also kein If-Ersatz für Programmierer, die zu faul sind, eine if-Bedingung zu formulieren ;-).

1
@Franky12345678

Ja schon, bin halt noch Anfänger und das erschien mir leicht.

Wusste nicht, dass es is_numeric() gibt. Sonst wäre es ja viel zu umständlich geworden

1
@ichbimseinpeter

Das sind halt die Übergabeparameter.

Wie soll er die Werte, die beim Funktionsaufruf in der Klammer mitübergeben werden, denn sonst an die Funktion übergeben, wenn nicht mit den Variablen?

Ist genau das gleiche, wie bei C# ;-)

Du verwendest es allerdings falsch bzw. eher missverständlich. Bitte beschäftige dich nochmal mit "Übergabeparameters"

1
@Franky12345678

Gar nicht übergeben. Der soll ja nur in der rechnen.php das ausrechnen, da wo die Variablen auch deklariert sind.

Das Ergebnis dann mit erganz(); einfach ausgeben.

Bei C# musste man da nicht alles übergeben


Und ich weiß schon wie man die  normalerweise übergibt, hier ist es halt total unnötig, weil ich ja nur die Parameter aus der rechnen.php an die Funktion in der selben Datei übergebe

1
@ichbimseinpeter

C# ist objektorientiert. Da sind die objekteigenen Variablen als Properties in der Klasse definiert und somit auch in den Methoden der gleichen Klasse gültig. Aber auch da musst du ja ggf. die Parameter übergeben, die eine Methode eines Objektes verarbeiten soll.

PHP nutzt du hier jedoch imperativ. Das ist ein grundsätzlich anderes Programmierparadigma. Du kannst sie daher schlecht vergeichen.

Was du gerade machen möchtest, sind "globale Variablen". Also beschäftige dich mal mit diesen. Globale Variablen werden natürlich nicht nochmal zusätzlich an die Funktion übergeben.

1
@Franky12345678

Danke echt, du hilfst mir mega.

Noch ein was letztes:

Kann man die Funktion aufrufen, wenn man auf nen input submit button dückt, und nicht einfach immer beim neu laden bzw. neu laden + button

0
@ichbimseinpeter

Doch noch was :D

Ich hab in der css datei die für alle gilt ne transition rein gemacht.

Nur bei dieser Seite laden die Farben etc beim neuladen nicht direkt und kann man auch sehen. Bei allen anderen passiert das zum Glück nicht, warum?

0
@ichbimseinpeter

Ja klar geht das.

Sofern das HTML-Formular korrekt aufgebaut ist.

Dann schaust du ja, ob der User ein Formular abgesendet hat oder nur die Seite geladen hat. Dann rufst du die Funktion natürlich innerhalb des if-Abzweiges auf, der für den Fall "Formular abgesendet" zuständig ist.

1
@ichbimseinpeter

Wenn du das HTML-Formular korrekt (also als POST) gemacht hast, hast du beim Absenden den Formularinhalt in $_POST

1

Lies dir den zugehörigen Artikel für die Funktion in der Dokumentation durch: http://php.net/manual/de/function.floatval.php

do while + try catch Abfrage in Java zur Eingabenkontrolle erzeugt unendlichen Loop

Also ich will in Java eine Methode schreiben die die Eingabe kontrolliert und dann bei korrekter Eingabe den eingegeben Wert zurückgibt. Mein Quellcode sieht so aus

public static int liesInt(String Ausgabe)
{       
    Scanner eingabe = new Scanner (System.in);
    int eingegeben = 0;
    System.out.println(Ausgabe);
    boolean error = true;
    
    do
    {
        try
        {
            eingegeben = eingabe.nextInt();
            error = false;
        }
        catch(InputMismatchException e)
        {
            System.out.println("Bitte geben Sie nur ganze Zahlen ein!");
            error = true;
        }   
    } while (error == true);
            
    return eingegeben;
}

mein problem ist dass er nach dem der catch greift und den error wert auf true gesetzt ist er nicht wieder zum try springt und nicht erneut nach einer eingabe fragt...

wo ist mein fehler eigentlich müsste er nach dem catch wieder oben anfangen beim try aber das passiert nicht

...zur Frage

Wie funktionieren exceptions in java?

wenn man es mit try und catch schreibt, hab ich gelernt dass man catch(Exception e) schreibt und danach e.printStackTrace ... Aber warum schreibt man nicht Exception e = new Exception(); ??? Und was macht die Methode printStackTrace in der Klasse Exception?

...zur Frage

Ist Perl 2016, im Bereich Webentwicklung, noch aktuell - und sollte man lieber PHP oder Perl wählen für einfache 'Backend'-Anwendungen?

Hey, ich überlege gerade ob ich Perl lernen sollte. Weil ich gern meine eigenen 'Backends' schreiben würde. Ich möchte dass man sich auf einer Website einloggen kann und dann in diesem Backend einfach bestimmte Daten wie z.B. die Kosten für verschiedene Produkte oder die Starttermine von Veranstaltungen ändern kann. Ich kenne da einen ziemlich einfachen Weg mit Perl, bei dem quasie für eine art Kalender einfach .dat Dateien geschrieben werden und diese werden dann per .cgi Script in die Website Geladen. Die Informationen die man im Backend verändert, werden in diesen Dateien gespeichert.

Ist dieses Vorhaben schwerer mit PHP oder Perl zu realisieren? Da PHP doch um einiges umfangreicher ist als Perl weiß ich nicht ob ich extra PHP lernen möchte.

Perl ist ja doch schon etwas in die Jahre gekommen, findet es denn 2016 immernoch anwendung bei Websites?

...zur Frage

C# - Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird?

Hallo, ich habe ein Problem mit meiner programmierten Anwendung. Immer wenn ich auf den Erstellen-Button klicke kommt in einer textBox die Meldung:

Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.

Code:

private void buttonErstellen_Click(object sender, EventArgs e)
		{
			OpenFileDialog ofd = new OpenFileDialog();
			ofd.Filter = "XML|*.xml";
			if (ofd.ShowDialog() == DialogResult.OK)
			{
				try
				{
					textBoxPfad.Text = Path.GetDirectoryName(ofd.FileName);
					DeserializeXml(ofd.FileName);
				}
				catch (Exception exception)
				{
					textBoxStatus.Text = exception.Message;
				}
			}
		}
    public void DeserializeXml(string fileName)
    {
        XmlSerializer serializer = new XmlSerializer(typeof(PersonenKonfiguration));
        XmlReader xmlFileReader;
        
        try
        {
            Person personen = new Person { Name = "Mustermann", Vorname = "Max", Wohnort = "Musterstadt" };
            
            xmlFileReader = XmlReader.Create(fileName);
            StreamWriter writer = new StreamWriter(fileName);
            serializer.Deserialize(xmlFileReader);
            writer.Write(personen);
            textBoxStatus.Text = "Validierung abgeschlossen.";
        }
        catch (Exception ex)
        {
            textBoxStatus.Text = ex.Message;
        }
    }

...zur Frage

Java Strato Mysql Datenbank

Hallo,

ich habe ein Problem mit dem Zugriff von Java aus in die Strato Mysql Datenbank. Mit PHP kann ich drauf zugreifen. Ich habe die Vermutung, dass Strato kein Zugriff außerhalb zulässt.

Java Datenbank Code:

    public class EasyDbConnector {

  private static Connection conn = null;

  // Hostname
  private static String dbHost = "rdbms.strato.de";

  // Port -- Standard: 3306
  private static String dbPort = "3306";

  // Datenbankname
  private static String database = "DBXXX";

  // Datenbankuser
  private static String dbUser = "UXXX";

  // Datenbankpasswort
  private static String dbPassword = "XXX";

  private EasyDbConnector() {
    try {

      // Datenbanktreiber für ODBC Schnittstellen laden.
      // Für verschiedene ODBC-Datenbanken muss dieser Treiber
      // nur einmal geladen werden.
      Class.forName("com.mysql.jdbc.Driver");

      // Verbindung zur ODBC-Datenbank herstellen.
      // Es wird die JDBC-ODBC-Brücke verwendet.
      conn = DriverManager.getConnection("jdbc:mysql://" + dbHost + "/" + database + "?" + "user=" + dbUser + "&"
          + "password=" + dbPassword);
    } catch (ClassNotFoundException e) {
      System.out.println("Treiber nicht gefunden");
    } catch (SQLException e) {
      System.out.println("Connect nicht möglich");
    }
  }

usw.

  • Der Treiber ist richtig installiert. Ich bekomme immer eine Exception "Connect nicht möglich"

Kann mir da jemand helfen?

MfG

...zur Frage

Android APP stürzt ab wenn ich etwas in einer Datei lese und dann speichere?

Hallo, ich habe eine meiner ersten Apps mit Java programmiert. Das Problem ist, dass die App abstürzt, wenn ich erst lese was in einer Datei steht und anschliessend die Datei überschreibe.

Code: if(gewonnenodernicht){

                int ausgabe;
                StringBuffer dateiInhalt = new StringBuffer("");
                try {
                    FileInputStream in = openFileInput("score.txt");

                    while( (ausgabe = in.read()) != -1)
                        dateiInhalt.append((char)ausgabe);

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

                dateiaddieren = Integer.parseInt(dateiInhalt.toString());
                dateiueberschreiben = dateiaddieren + gesAugenzahl;

                String dateiname = "score.txt";
                String score = Integer.toString(dateiueberschreiben);
                FileOutputStream outputStream;


                try {
                    outputStream = openFileOutput(dateiname, Context.MODE_PRIVATE);
                    outputStream.write(score.getBytes());
                    outputStream.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
            Intent Home = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(Home);
        }

Kann mir jemand sagen was der Grund ist und wie ich den Fehler beheben kann? Es funktioniert eigentlich wenn ich es mit AndroidSTudio auf dem Handy laufen lasse. Aber nachdem ich eine .apk erstellt habe nicht mehr.

...zur Frage

Was möchtest Du wissen?