HTML script funktioniert nícht?

 - (Computer, Technik, Technologie)  - (Computer, Technik, Technologie)

3 Antworten

Da ich bereits in den ersten Zeilen deines Codes einige Schwächen gefunden habe, habe ich mir einmal die Zeit genommen, ihn noch genauer unter die Lupe zu nehmen. Ich kann allerdings nicht garantieren, alle Fehler/Probleme gefunden zu haben.

Wenn du meine Punkte durcharbeitest und die Tipps befolgst, kannst du deinen Code erheblich einfacher/übersichtlicher und wartbarer gestalten.

Die Frage beantworte ich aber nicht, denn sie wurde dir ja scheinbar schon beantwortet.

Hier nun das, was ich gefunden habe:

1) Jeder Weiterleitung via header-Funktion sollte ein exit folgen. Andernfalls wird das Skript im Hintergrund weiter ausgeführt.

2) Jeder img-Tag erfordert auch ein alt-Attribut.

3) Die Funktion fetch gibt dir ein Array zurück, welches seine Werte sowohl via Key als auch via Index verfügbar macht. Eigentlich benötigst du nur die Werte assoziiert via Key. Daher würde ich noch das Argument PDO::FETCH_ASSOC mit übergeben:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

An einer Stelle habe ich das bei dir sogar schon gesehen.

4) Du speicherst dir alle Werte aus $row in eigenen Variablen. Doch ist das wirklich notwendig? Du kannst doch weiterhin das Array verwenden und somit an vielen Code-Zeilen einsparen. Nur einige Ausnahmen wie $monat oder $jahr würde ich weiter so handhaben wie zuvor.

5) Der Query in Zeile 129 liefert dir maximal eine Ergebniszeile zurück. Die while-Schleife (Zeile 144) ist für diesen Fall also gar nicht notwendig.

6) Solche Variablennamen: $POSTarrayanzahl, $POSTid, $POSTdatum, usw. ...sind ziemlich schwer zu lesen. Ein snake_stil ($post_array_anzahl) oder die kamelHoeckerSchreibweise ($postArrayAnzahl) würde da schon einiges bewirken.

7) Verwende hierfür:

$a = 0;

while ($row = $znwmonattag->fetch()) {
  // ...
  $a = $a + 1;
}

doch eher eine for-Schleife:

for ($index = 0; $row = $znwmonattag->fetch(PDO::FETCH_ASSOC); ++$index) {
  // ...
}

8) PHP erstellt hierbei:

$arr[] = 2;

übrigens schon implizit ein Array, wenn $arr bisher noch nicht eingeführt / als Array definiert wurde. Das heißt, die Array-Initialisierungen zuvor:

$POSTarrayanzahl = array();
$POSTid = array();
$POSTdatum = array();
// etc. ...

kannst du dir sparen. Auch wenn die Arrays innerhalb der Schleife stehen, sind sie danach außerhalb verfügbar. Das ist PHP.

9) Du solltest bessere Bezeichner wählen (dies gilt sowohl für den PHP- als auch für den JavaScript-Code). Hier beispielsweise:

$count = count($arrayanzahl);

kann man zwar herauslesen, dass du die Anzahl an Elementen eines Arrays speicherst. Wohin man das nun aber ordnen kann, ist nicht eindeutig. Wozu dient das Array (Welche Anzahl an Arrays wird da gespeichert?)? Wenn man $count später im Skript liest, muss man erst wieder schauen, welche Anzahl in dieser Variable abgelegt wurde. Da wäre $numberOfArrays vielsagender - aber irgendwie halt auch noch nicht gut genug.

10) Du wiederholst dich an dieser Stelle im Vorgang dauernd:

$arbsoll = substr($arbsoll, 0, -3);
$arbvon = substr($arbvon, 0, -3);
$arbbis = substr($arbbis, 0, -3);
// ...

Über eine Schleife und ein assoziatives Array (in dem all diese Variablen liegen) ließe sich dies zusammenfassen.

foreach ($data as $key => $value) {
  $data[$key] = substr($value, 0, -3);
}

Oder du fasst zumindest den substr-Aufruf in einer Funktion zusammen:

function part($value) {
  return substr($value, 0, -3);
}

$arbsoll = part($arbsoll);
$arbvon = part($arbvon);
$arbbis = part($arbbis);
// ...

Die Namen sind allesamt noch nicht optimal gewählt, da ich nicht weiß, wieso du da die Strings zurechtschneidest.

Die zahlreichen if-Anweisungen später lassen sich bestimmt noch mit einbauen.

11) Der Query in Zeile 482 gibt vermutlich mehrere Ergebnisse zurück. In Zeile 501 läuft eine Schleife durch die Ergebnisse, doch sie überschreibt jedesmal das, was du in $uepflichtauszahlungen schreibst. Sollte das beabsichtigt sein, könntest du auch gleich den Query ändern (absteigende Sortierung und Limitierung auf ein Ergebnis).

12) Der Doctype fehlt. Er ist für ein HTML-Dokument zwingend erforderlich.

<!doctype html>

13) Die ersten HTML-Zeilen gibst du mittels PHP aus, doch das würde ich nicht machen. Trenne nach Möglichkeit PHP und HTML so strikt wie nur möglich - überall. In dem von mir angesprochenen Fall so:

  // ...
?>
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Zeitnachweis: <?= $monat . "." . $jahr ?></title>

So sparst du dir Maskierungen und ein Editor mit Syntax Highlighting kann hier richtig wirken. Fehler (z.B. Tippfehler) werden einfacher ersichtlich.

14) Der style-Tag gehört in den head. Noch besser wäre es, wenn du das CSS in eine eigene Datei auslagerst. Dies würde deine Datei wieder um einiges an Zeilen erleichtern.

Der Include wird innerhalb des head-Tags gesetzt.

<link href="yourCssFile.css" rel="stylesheet">

Die Hintergrundbilder kannst du setzen wie bisher:

<style>
  
  .arbeitgeberunterschrift {
    background-image: url("<?= $signatur_arbnehmer ?>");
  }

  .arbeitnehmerunterschrift {
    background-image: url("<?= $signatur_arbgeber ?>");
  }

</style>

15) Das Wort Standard wird mit d geschrieben. Es geht nicht um eine Art, zu stehen.

/* Standart Unterschrift/Namen */

16) Das CSS-Property height mit dem Wert auto benötigst du doch nicht?

17) Die vielen Leerzeilen im CSS würde ich entfernen. Dies gilt auch für den JavaScript-Code.

18) Bei dem CSS-Property background-size kannst du verkürzen, ein Wert reicht aus (100% für Höhe und Breite).

19) Ob

text-align: left;

notwendig ist, würde ich ebenfalls einmal anzweifeln.

20) JavaScript würde ich auch in externe Dateien auslagern und kurz vor dem schließenden body-Tag aufführen. So kannst du dir sicher sein, dass die Elemente, die du im Skript suchst, bereits geladen sind.

21) Dies:

if (switchue.checked == true) {
  ue_pf_ansicht.style.display = "block";
}
else {
  ue_pf_ansicht.style.display = "none";
}

lässt sich verkürzen:

ue_pf_ansicht.style.display = switchue.checked ? "block" : "none";

22) Setze keine Inline-Styles ein. Vermische CSS möglichst wenig mit HTML.

23) Das action-Attribut erwartet eine valide URI. Ein leerer String ist nicht erlaubt. Lasse das action-Attribut in deinem Fall einfach weg.

24) Das Markup deiner Tabelle ist an mehreren Stellen falsch.

  • Die Angabe einer Einheit (px) für cellpadding und cellspacing dürfte nicht erlaubt sein. Pixel werden standardmäßig verwendet.
  • Die Attribute width, border, align, cellpadding und cellspacing sind alle obsolete. Wirf sie raus, nutze CSS stattdessen.

25) Gib jeder Anweisung eine eigene Zeile (Beispiel: Zeile 809).

26) Diese Zeile hat mehrere Fehler:

<a id="pdfmonat" href=<?php echo $pdfNameMonat; ?>><input name="pdf" type="button" value="PDF Ansicht"></a>
  • Jeder Attributwert wird in Anführungszeichen gruppiert. Bei deinem href fehlt es.
  • Ein Button/input-Element darf nicht in einem Link stehen.

27) Vor allem ab Zeile 833 solltest du viel durch Funktionen, Schleifen und Arrays redundanten Code einsparen können.

28) Rücke deinen Code richtig ein.

*KOMMENTAR*

Da aus platzgründen Zuwenig war.

Ich habe ziemlich alles gelöscht, damit ich nur die Überstunden habe, beim script alle vorhandene ID`s versehen, alle CSS gelöscht bzw rausgenommen und auch alle functionen außer die eine was benötigt wird, rausgenommen, leider mit dem gleichen ergebnis. Mit der SUCHE habe ich die gleiche Anzahl von, <div></div><table></table> …. das passt alles

nimm verschiedene ids pro element , zb durchnummeriert

Danke, hat mir schon mal weitergeholfen.

Da ich auch for-schleifen habe, wie muss ich dann denn code schreiben, dass auch das Element angesprochen wird?

Weil das funktioniert nicht, document.getElementById("ue_pf_ansicht"+i);

Und ohne das + bei i gibt er mir ein fehler, bzw. funktionieren die anderen funktionen nicht mehr

0

Sry, hat sich erledigt. funktioniert doch

0

PHP "Zurück"-Button?

Halo,

folgender Quelltext ist ein Zurück Button.

echo '<form action="./arbeit.php" method="POST" class="from-group">'; //zurück auf Seite arbeit.php, 

echo '<input type="Submit" name"back" value="Zurück" class="btn btn-success abstand">';

echo '</from>';

Meine Frage: Was bedeuten die einzelnen "Kriterien". ich weiß nur, dass "action=./arbeit.php" auf die Seite verweist auf die gesprungen werden soll.

Wäre nett wenn mir das jemand erklären könnte, der mehr Ahnung hat als ich :)

Gruß

...zur Frage

PHP: Wie kann ich den Preis bei dieser Aufgabe berechen?

Hallo. Ich habe die Aufgabe, den Preis von einer ausgewählten Pizza zu berechen. Könnte mir dabei jemand helfen?

HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <p>Bitte geben sie Ihren Name und Ihre Adresse ein, treffen Sie Ihre Asuwahl und senden Sie das Formular ab:</p>
    <form action="ud08.php" method="post">
      <input name="name"> Name<br><br>
      <input name="adresse"> Adresse<br><br>
      <input type="radio" name="gender" value="Herr"> Herr<br>
      <input type="radio" name="gender" value="Frau"> Frau<p>
      <select name="pizzen">
        <option value="Pizza Tuna (7,50€)" name="tuna" selected> Pizza Tuna (7,50€)
        <option value="Pizza Salami (6,50€)" name="salami" selected> Pizza Salami (6,50€)
        <option value="Pizza Kardinale (6,50€)" name="kardinale" selected> Pizza Kardinale (6,50€)
        <option value="Pizza Käse (65,50€)" name="kaese" selected> Pizza Käse (65,50€)
        <option value="Pizza Hawei (8,50€)" name="hawei" selected> Pizza Hawei (8,50€)
      </select>
      <p>
        <input value="Thunfish" name="thunfish" type="checkbox"> Thunfish
      <p>
        <input value="Extra Kaese" name="extrachees" type="checkbox"> Extra Kaese
      <p>
        <input type="submit" value="Anfrage senden">
        <input type="reset" value="Zurücksetzen">
    </form
  </body>
</html>

PHP:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  
  <?php
    if (isset($_POST['thunfish'])) 
      $thunfish=$_POST['thunfish'];
    else
      $thunfish = 0;

    if (isset($_POST['extrachees']))
      $extrachees = $_POST['extrachees'];
    else
      $extrachees = 0;

    if (isset($_POST['tuna']))
      $tuna = $_POST['tuna'];
    else
      $tuna = 0;

    echo "Sehr geehrter ".$_POST['gender']." ".$_POST['name']."<p>";
    echo "vielen Dank für Ihre Bestellung<p> Wir liefern Ihre ".$_POST['pizzen'];

    if ($thunfish)
      echo " mit Thunfish";

    if ($extrachees)
      echo " mit Extra Käse<br>";

    echo " in 20 Minuten an die folgende Adresse:<p>";
    echo $_POST['adresse']."<p>";
    echo "Der Preis Beträgt:<p>";

    if ($tuna)
      echo " 7,50€";

    echo "Ihr Pizza-Team";
  ?>                                                                                                          </html>
...zur Frage

PHP Formular nach Klicken des Submit Buttons nicht löschen

Hallo

Ich programmiere mit HTML und PHP einen Zeitrechner, wo man die Zahlen in ein Formular schreibt, und möchte gerne, dass nach dem Submit-Button keine Daten aus dem Formular gelöscht werden.

Beim Suchen bin ich darauf gestossen:

<tr>
    <td nowrap>1. Zeit</td>
    <td align="right">
        <input type="text" name="d1" style="text-align:right;" value="<?php echo $_POST['d1']; ?>">
    </td>
    <td align="right">
        <input type="text" name="h1" style="text-align:right;" value="<?php echo $_POST['h1']; ?>">
    </td>
    <td align="right">
        <input type="text" name="m1" style="text-align:right;" value="<?php echo $_POST['m1']; ?>">
    </td>           
    <td align="right">
        <input type="text" name="s1" style="text-align:right;" value="<?php echo $_POST['s1']; ?>">
    </td>
</tr>

Das Problem dabei ist, das dabei immer eine Fehlermeldung kommt (Bild im Anhang). Was mache ich, damit die weggeht?

Vielen Dank für eure Antworten!

Phippe

...zur Frage

Warum funktioniert es nicht Variablen bei PHP zu übergeben?

Hallo, auf der ersten PHP-Seite habe ich ein Formular welches nachdem man Submit gedrückt hat dir eine Html-Email schickt, wo auch der Name usw. drin steht den man bei dem Formular eingegeben hat. Das steht in der HTML email: (wen man auf "hier" drückt sollen die Daten die man im Fromular angegeben hat auf einer anderen Seite in eine .txt-Datei geschrieben werden)

<form method=\"get\" action=\"link \"> <input type=\"hidden\" value=\"$email\" name=\"email\" /> 
<input type=\"hidden\" value=\"$vname\" name=\"vname\" /> 
<input type=\"hidden\" value=\"$nname\" name=\"nname\" />
 <input type=\"hidden\" value=\"$code\" name=\"code\" /> 
<input type=\"hidden\" value=\"$geschlecht\" name=\"geschlecht\" />
 <input type=\"submit\" value=\"Hier\" /> 

auf der 2. Seite steht das:

$nr = date('sihdmY');
$mail = $_GET['email'];
 $vorn = $_GET['vname'];
 $gender = $_GET['geschlecht']; 
$nachn = $_GET['nname'];
$handle = fopen ( "speicher.txt", "a" );
 fwrite ( $handle, $mail );
 fwrite ( $handle, " | " );
 fwrite ( $handle, $gender ); 
fwrite ( $handle, " | " );
 fwrite ( $handle, $vorn ); fwrite ( $handle, " | " ); 
fwrite ( $handle, $nachn ); 
fwrite ( $handle, " || " );
 fwrite ( $handle, $nr );
 fwrite ( $handle, "\r\n");
 fclose ( $handle );
echo "Danke.";

exit;

Was ist das Problem? In die Text datei wird nur die Zahl von $nr reingeschrieben. Kann mir da jemand helfen? Danke im Voraus.

...zur Frage

SQL Delete mit 2 Joins - Query umstellen?

Hey Leute ich bin gerade dabei einen Delete Befehl mit where Bedingung zu schreiben, jedoch komme ich nicht mehr weiter. Alle 3 Tabellen sind über bestimmte Schlüssel miteinander verbunden.

Ich muss theoretisch bevor ich den Delete ausführe erst 1/2 Tests über die WHERE Bedingung unten machen, jedoch wird mir ein Syntaxfehler ausgeworfen.

Vielleicht kann mir jemand helfen. Ich möchte alle Daten aus Content_PERM löschen, für die die Bedingungen zutreffen. Die Bedingung active zeigt alle deaktivierten User und bei USERNAME trägt man den Hash des Testusers ein.

Vielen Dank für eure Hilfe

Gruß

...zur Frage

Wo ist der Fehler in meinem PHP post code?

Hey, ich habe heute angefangen mit php rum zuspielen und finde meinen Fehler einfach nicht, ich hoffe mir kann jemand weiter helfen :)


<?php

$notiz = "";

if($_POST['name'] != "" && $_POST['nickname'] != "" && $_POST['gbdatum'] != "") {          mail("info@domain.de", "Spieler-Buch Eintrag von: " . $_POST['nickname'], $_POST['nickname'] . " hat das Formular zum Eintrag in das Spieler-Buch ausgefüllt. \n\n Daten:\nName: " . $_POST['vorname'] . " " . $_POST['name'] . "\nSpielername: " . $_POST['nick'] . "\nGeboren am: " . $_POST['gbdatum']);       } else if($_POST['formular'] == 'set') {     $notiz = "Fülle bitte alle Felder aus."; } ?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta name="language" content="de" />
        
        <style>
        
        </style>
    </head>
    <body>
        
        <h2>Spielerbuch-Formular</h2>
        
        <form action="formular.php" method="post">
            <input type="hidden" value="set" name="formular">
			<input type="hidden" value="<?php echo $_SERVER['REMOTE_ADDR']; ?>" name="ip">
            
            <input type="text" placeholder="Vorname" value="<?php echo $_POST['vorname']; ?>" name="vorname"><br>
            <input type="text" placeholder="Nachname" value="<?php echo $_POST['name']; ?>" name="name"><br>
            <input type="text" placeholder="Spielername" value="<?php echo $_POST['nick']; ?>" name="nick"><br>
            <input type="date" value="<?php echo $_POST['gbdatum']; ?>" name="gbdatum"><br><br>
            
            <input type="submit" value="send">
            <br><br>
            <h4><font color="red"><?php echo $notiz; ?></font></h4>
       </form>
        
    </body>
</html>

Wenn ich im Formular alle vier Sachen ausfülle, dann wird mir die $notiz angezeigt und die Mail geht nicht raus.

<?php

mail("info@kryziz-gaming.de", "Betreff", "Testnachricht")

?>

Das funktioniert, ist aber auch stumpf.

...zur Frage

Was möchtest Du wissen?