php-Frage

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Liebe Forenmitglieder,
ich habe von php nur rudimentär Ahnung und stehe vor einem vermutlich kleinen Problem.
Ich hoste eine Webseite, darauf sind Karten zu sehen und Marker gesetzt. An jedem Marker hängt ein kleines Eingabefeld und ein Absendeknopf. Eingaben sollen in einer Textdatei auf dem Server gespeichert werden. Soweit so gut - aber es läuft nicht. Wenn ich das entsprechende php-skript über den browser aufrufe, bekomme ich die Meldung, dass nicht alle erforderlichen Eingaben gemacht worden sind. Rufe ich allerdings das Skript von dem erwähnten Knopf aus auf - tut sich gar nichts. Das Skript ist im gleichen Verzeichnis wie die entsprechende Karte - ich vermute den Fehler in den Einstellungen des WebServers. Kann mir da vielleicht jemand einen Tipp geben? Als Skriptsprache hab ich php 8.2 aus gewählt, als Backend Apache 2.4. WebDienst entsprechend meinen rudimentären Kentnissen installiert..... leider ohne Erfolg....
 

Ulfhednir

Benutzer
Sehr erfahren
Mitglied seit
26. Aug 2013
Beiträge
3.264
Punkte für Reaktionen
923
Punkte
174
Aktiviere doch erstmal die PHP-Fehler und schaue mal, ob ein Fehler hochkommt.


Wc4clwO.png


Ansonsten wäre es vorteilhaft, wenn du die .php-File bereitstellen könntest.
 

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Danke für den Hinweis! Hatte ich eingestellt, aber wo werden die Fehler ausgegeben?

Code:
<?php
// Pfad zur Textdatei, in die die Daten gespeichert werden sollen
$file_path = 'eingaben.txt';

// Überprüfen, ob die erforderlichen POST-Daten gesendet wurden
if(isset($_POST['subject']) && isset($_POST['info'])) {
    // Daten aus dem Formular extrahieren
    $subject = $_POST['subject'];
    $info = $_POST['info'];

    // Formatieren der Daten
    $data = "Subject: $subject\nInfo: $info\n\n";

    // Daten an die Textdatei anhängen
    file_put_contents($file_path, $data, FILE_APPEND | LOCK_EX);

    // Erfolgsmeldung ausgeben
    echo "Daten erfolgreich gespeichert.";
} else {
    // Fehlermeldung ausgeben, wenn nicht alle erforderlichen Daten vorhanden sind
    echo "Fehler: Nicht alle erforderlichen Daten wurden übermittelt.";
}
?>


1708545541803.png
 

Anhänge

  • 1708545439104.png
    1708545439104.png
    103,3 KB · Aufrufe: 1

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Sorry, hatte vergessen - ich erstelle die Karten unter python mit der folium library, falls das hilft. Die Übergabe erfolgt dann eingebettet in html Code:

Code:
for i in range(0, df.shape[0]):
    popup_info.append(f"<div style='font-family: sans-serif;'>\
                          <b>{name[i]}</b><br/>\
                          <em>{vollername[i]}</em><br/>\
                          <strong>{schulform[i]}</strong> <br/><br/>\
                          {bezirksregierung[i]}<br>\
                          {traeger[i]}<br><br>\
                          <b>Telefon:</b> {nummer[i]}<br/>\
                          {adresse[i]}<br><br><hr>\
                          {infos[i]}<br><hr></div>\
                          </div>\
                          <form action='submit.php' method='post' style='margin-bottom: 3em; font-family: sans-serif;'> \
                          <input type='hidden' id='subj_{i}' name='subject' value='{name[i]} in {adresse[i]}'><br>\
                          <label for='{i}' style='display: block;'>Weitere Infos:</label>\
                          <textarea id='{i}' name='{kname[i]}' rows='5' cols='50' placeholder='ID: {ids[i]}, Eingabe'></textarea>\
                          <div>\
                          <input type='submit' name='submit_button_{i}' value='OK' style='margin-top:5px'>\
                          </form>")
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Wie sieht denn der generierte HTML Code aus? Weil ich sehe zwar das Subjekt Feld, aber welches ist das Info?
 

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Sorry, was meinst Du?

Das ist der html Code, der mir die Marker erstellt (s. Foto) - im Textarefeld steht ein Platzhalter - den ich intern auch als Index nutze, um eine eindeutige Zuordnung möglich zu machen (man weiss ja nie, was Nutzer so tippen).... aber der 'Submit'-Button macht leider rein gar nix....

Code:
<form action='submit.php' method='post' style='margin-bottom: 3em; font-family: sans-serif;'> \
                          <input type='hidden' id='subj_{i}' name='subject' value='{name[i]} in {adresse[i]}'><br>\
                          <label for='{i}' style='display: block;'>Weitere Infos:</label>\
                          <textarea id='{i}' name='{kname[i]}' rows='5' cols='50' placeholder='ID: {ids[i]}, Eingabe'></textarea>\
                          <div>\
                          <input type='submit' name='submit_button_{i}' value='OK' style='margin-top:5px'>\
                          </form>")

1708547413041.png
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Nein, das ist nicht der HTML Code der im Browser angezeigt wird. Ich will den generierten Code sehen. Das reine HTML ohne Variablen.
 

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Ok, den Source-Code der Karte. Ich hab hier nen Auszug für einen Marker. Folium nutzt bootstrap&leaflet um Karten zu generieren. Im Python Code kann ich die Variablen bedingungslos einsetzen - html kommt da etwas kryptischer daher...


Code:
<!DOCTYPE html>
<html lang="de">
<head>
    
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    
        <script>
            L_NO_TOUCH = false;
            L_DISABLE_3D = false;
        </script>
    
    <style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
    <style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
    <script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
    <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
    
            <meta name="viewport" content="width=device-width,
                initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
            <style>
                #map_291939d1d3c8a6440c13dfb0d6f9ddcf {
                    position: relative;
                    width: 100.0%;
                    height: 100.0%;
                    left: 0.0%;
                    top: 0.0%;
                }
                .leaflet-container { font-size: 1rem; }
            </style>
        
</head>
<body>
    
    
            <div class="folium-map" id="map_291939d1d3c8a6440c13dfb0d6f9ddcf" ></div>
        
</body>
<script>

  
            var marker_2265532c0760aed31cd55d746228b210 = L.marker(
                [51.0825944, 6.312088],
                {}
            ).addTo(map_291939d1d3c8a6440c13dfb0d6f9ddcf);
        
    
            var icon_0ed88b535507e2df3fa16f3747b74499 = L.AwesomeMarkers.icon(
                {"extraClasses": "fa-rotate-0", "icon": "home", "iconColor": "black", "markerColor": "green", "prefix": "fa"}
            );
            marker_2265532c0760aed31cd55d746228b210.setIcon(icon_0ed88b535507e2df3fa16f3747b74499);
        
    
        var popup_e186c7ada2acce98e436739a126db1dc = L.popup({"maxWidth": 850, "minWidth": 450});

        
            
                var i_frame_7e7f0f3aec008f3c624676b0a2415be5 = $(`<iframe src="data:text/html;charset=utf-8;base64,CiAgICA8ZGl2IHN0eWxlPSdmb250LWZhbWlseTogc2Fucy1zZXJpZjsnPiAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QXN0cmlkLUxpbmRncmVuLVNjaHVsZTwvYj48YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgPGVtPkFzdHJpZC1MaW5kZ3Jlbi1TY2h1bGUgR2VtLiBHcnVuZHNjaHVsZSBkZXIgU3RhZHQgRXJrZWxlbnogLTwvZW0+PGJyLz4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+R3J1bmRzY2h1bGU8L3N0cm9uZz4gPGJyLz48YnIvPiAgICAgICAgICAgICAgICAgICAgICAgICAgQmV6aXJrc3JlZ2llcnVuZyBLw7Zsbjxicj4gICAgICAgICAgICAgICAgICAgICAgICAgIGluIMO2ZmZlbnRsaWNoZXIgVHLDpGdlcnNjaGFmdDxicj48YnI+ICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UZWxlZm9uOjwvYj4gMDI0MzEtMTg0Nzxici8+ICAgICAgICAgICAgICAgICAgICAgICAgICBaZWhudGhvZndlZyAxNyA0MTgxMiBFcmtlbGVuejxicj48YnI+PGhyPiAgICAgICAgICAgICAgICAgICAgICAgICAgLTxicj48aHI+PC9kaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0nc3VibWl0LnBocCcgbWV0aG9kPSdwb3N0JyBzdHlsZT0nbWFyZ2luLWJvdHRvbTogM2VtOyBmb250LWZhbWlseTogc2Fucy1zZXJpZjsnPiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdoaWRkZW4nIGlkPSdzdWJqXzAnIG5hbWU9J3N1YmplY3QnIHZhbHVlPSdBc3RyaWQtTGluZGdyZW4tU2NodWxlIGluIFplaG50aG9md2VnIDE3IDQxODEyIEVya2VsZW56Jz48YnI+ICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPScwJyBzdHlsZT0nZGlzcGxheTogYmxvY2s7Jz5XZWl0ZXJlIEluZm9zOjwvbGFiZWw+ICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9JzAnIG5hbWU9J0Vya2VsZW56LCBHRyBBc3RyaWQtTGluZGdyZW4tU2NodWxlMTE3ODk0JyByb3dzPSc1JyBjb2xzPSc1MCcgcGxhY2Vob2xkZXI9J0lEOiAxMTc4OTQsIEJpdHRlIHp1c8OkdHpsaWNoZSBJbmZvcyBlaW5nZWJlbic+PC90ZXh0YXJlYT4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdzdWJtaXRfYnV0dG9uXzAnIHZhbHVlPSdPSycgc3R5bGU9J21hcmdpbi10b3A6NXB4Jz4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4=" width="100%" style="border:none !important;" height="475"></iframe>`)[0];
                popup_e186c7ada2acce98e436739a126db1dc.setContent(i_frame_7e7f0f3aec008f3c624676b0a2415be5);
            
        

        marker_2265532c0760aed31cd55d746228b210.bindPopup(popup_e186c7ada2acce98e436739a126db1dc)
        ;

        
    
    
            marker_2265532c0760aed31cd55d746228b210.bindTooltip(
                `<div>
                     Astrid-Lindgren-Schule
                 </div>`,
                {"sticky": true}
            );
        
    
            var marker_acf8b6fc1fcbe6887825c8392dc6a65f = L.marker(
                [51.0871453, 6.328267899999999],
                {}
            ).addTo(map_291939d1d3c8a6440c13dfb0d6f9ddcf);
        
    
            var icon_fd72ef3f831323237512fc66bb97177a = L.AwesomeMarkers.icon(
                {"extraClasses": "fa-rotate-0", "icon": "home", "iconColor": "black", "markerColor": "green", "prefix": "fa"}
            );
            marker_acf8b6fc1fcbe6887825c8392dc6a65f.setIcon(icon_fd72ef3f831323237512fc66bb97177a);
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Nee das ist es auch nicht...
Da ist ja gar kein Form element drin.
 

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
So, hab es gefunden - ich muss feststellen der Chrome Inspector ist besser als der von firefox IMPO...
Das ist der generierte Code aus der Webseite...

Code:
<form action="submit.php" method="post" style="margin-bottom: 3em; font-family: sans-serif;">
<input type="hidden" id="subj_0" name="subject"
value="Astrid-Lindgren-Schule in Zehnthofweg 17 41812 Erkelenz"><br>
<label for="0" style="display: block;">Weitere Infos:</label>
<textarea id="0" name="Erkelenz, GG Astrid-Lindgren-Schule117894" rows="5"
cols="50" placeholder="ID: 117894, Bitte zusätzliche Infos eingeben"></textarea>
<div>
<input type="submit" name="submit_button_0" value="OK" style="margin-top:5px">
</div></form>
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Das PHP Script passt nicht zum HTML.
<textarea id="0" name="Erkelenz, GG Astrid-Lindgren-Schule117894" rows="5" cols="50" placeholder="ID: 117894, Bitte zusätzliche Infos eingeben"></textarea>
Das sollte wahrscheinlich eher so aussehen.
HTML:
<textarea id="0" name="info" rows="5" cols="50" placeholder="ID: 117894, Bitte zusätzliche Infos eingeben">
Erkelenz, GG Astrid-Lindgren-Schule117894</textarea>

if(isset($_POST['subject']) && isset($_POST['info'])) {
Du übermittelst mit deinem HTML niemals info per POST und somit kann diese Abfrage niemals True sein.
 
  • Like
Reaktionen: mistertoi

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
ah, verstehe - muss ich das Skript dann über GET laufen lassen?
von php hab ich ja so gut wie keine Ahnung, n paar gaanz simple scripts geschrieben, die eher bash den php waren, um was zu machen - anfangs dachte ich noch ich könnte das mit JS umsetzen.. lach...
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Nein POST ist schon richtig, aber du musst die Namen der Felder richtig setzen. Wenn du auf eine Variable $_POST['info'] prüfst, dann solltest du diese auch übermitteln. Du könntest das auch mit JS umsetzen. Dann müsstest du dir NodeJS auf dem Server einrichten. Das wäre auch kein Problem. Du kannst es nur nicht auf dem Client alleine lösen.
Name Attribut in HTML = Index in $_POST.
 

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
ahhhh verstehe!!! DANKE! ok, d.h. für mich im Skript erstetzt er die Variable durch die Namen und das darf nicht - da schau ich nachher nochmal rein!! Aber Danke für den Hinweis....das klingt sehr nach dem Problem.... ist mir nicht aufgefallen -ich leg das nachher nochmal an und probiere es aus und gebe eine Rückmeldung! :)
 

alexhell

Benutzer
Sehr erfahren
Mitglied seit
13. Mai 2021
Beiträge
2.603
Punkte für Reaktionen
758
Punkte
154
Nee das Script war so ok. Du fragst subject und info ab. subject wird ja auch übermittelt, aber die Textarea hat als Namen den Inhalt. Diese muss nur in info umbenannt werden. Den Rest vom Script habe ich mir jetzt nicht im Detail angeguckt, ob da noch mehr Fehler drin sind. Auf den ersten Blick sah es nicht danach aus, aber ich würde die raten die Variablen zu escapen (htmlspecialchars). Traue niemals Input der von außen kommt.
 
  • Like
Reaktionen: mistertoi

mistertoi

Benutzer
Mitglied seit
01. Jul 2017
Beiträge
55
Punkte für Reaktionen
2
Punkte
14
Super Tipp - danke - das werd ich auch gleich mal einbauen, die Beschreibung sieht ja gut aus.... vielleicht mach ich doch noch mal nen flotten php-workshop für die basics ;)
 


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat