kangaroojack
Goto Top

Php variable definieren und an Seite weitergeben

Hallo Leute,

ich bin absoluter HTML/PHP Noob/Anfänger.

Um eine Umfrage bei unseren Benutzern zu starten, habe ich mir xampp auf einer Windows Maschine installiert.
Ich habe eine Login Seite mit AD Ankopplung erstellt.
Diese leitet bei erfolgreichem Login auf eine Seite wo ich zum einen die abgefragten Benutzerattribute aus dem AD anzeige.

Dann habe ich dort 2 Radio Buttons. Der User kann sich für eine Option entscheiden.

Wählt er Button 1, dann wird ein zusätzliches INPUT Feld angezeigt und der User muss seine Handynummer eingeben - dann soll im Hintergrund die Variable $smartphone = 1 und die Variable $token = 0 gesetzt werden.

Wählt er Button 2, soll $smartphone = 0 und $token =1 gesetzt werden.

Beim klick auf SUBMIT werden die Daten an eine weitere Seite übertragen, die die Daten in die Datenbank schreibt.
Das schreiben der Werte die zuvor von der vorherigen Seite aus dem AD abgefragt wurden, habe ich auch alles soweit hinbekommen.

Was ich nicht hinbekomme, ist das setzen der beiden Variablen auf der ersten Seite für die Bedingung - und, dass die dann auf Seite 2 bekannt sind und in die DB geschrieben werden können.
Da kommt immer eine Fehlermeldung "Warning: Undefined array key "smartphone"....

<?php
	$ldap_dn = $_POST["username"]."@domaene.local";  
	$ldap_password = $_POST["password"];  
	$user = $_POST["username"];  
	
	$adServer = "domaene.local";  
	$ldap_con = ldap_connect($adServer);
	
	ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3);
	ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0);
	//echo $user,$ldap_password;
	if(@ldap_bind($ldap_con, $ldap_dn, $ldap_password)) {
		//echo "erfolgreich";  
		//echo $user,$ldap_password;
		$filter="(&(objectClass=user)(samaccountname=$user))";  
		$result = ldap_search($ldap_con,"dc=domaene,dc=local",$filter);  
		$entries = ldap_get_entries($ldap_con, $result);
		
		//print_r ($entries);
		$givenname = $entries[0]['givenname'][0];  
		$sn = $entries[0]['sn'][0];  
		$department = $entries[0]['department'][0];  
		$samaccountname = $entries[0]['samaccountname'][0];  
		
		if (empty ($entries[0]['mobile'][0])) {  
			
			$mobile = "";  
		} else {
			$mobile = $entries[0]['mobile'][0];  
		}
	
	} else {
		//echo "fehlgeschlagen";  
		//echo $user,$ldap_password;
		header("Location: index.php");  
	}
?>

<html>

<head>
<script type="text/javascript">  

function mobileCheck() {
    if (document.getElementById('mobileCheck').checked) {  
        document.getElementById('ifMobile').style.visibility = 'visible';  
		document.getElementById('yes').required = 'required';  
		token = 0;
		smartphone = 1;
    }
    else document.getElementById('ifMobile').style.visibility = 'hidden';  

}

function tokenCheck() {
    if (document.getElementById('tokenCheck').checked) {  
        token = 1;
	smartphone = 0;
    }
}

</script>

<style>
body {text-align:center;}
form { margin: 0 auto; width: 600px;}
input { padding: 10px; font-size:15;}
</style>
</head>
<body>
<form action="/insert.php">  
<h1>Guten Tag, </h1>

<table align="center">  
<tbody>
<tr>
<th>Vorname:</th>
<td><input type="text" id="Vorname" readonly name="givenname" value="<?php echo $givenname; ?>" /></td>  
</tr>
<tr>
<th>Name: </th>
<td><input type="text" id="Name" readonly name="sn" value="<?php echo $sn; ?>" /></td>  
</tr>
<tr>
<th>Amt: </th>
<td><input type="text" id="Amt" readonly name="department" value="<?php echo $department; ?>" /></td>  
</tr>
<tr>
<th>Anmeldekürzel: </th>
<td><input type="text" id="Anmeldekürzel" readonly name="samaccountname" value="<?php echo $samaccountname; ?>" /></td>  
</tr>
<tr>
</tr>
</tbody>
</table>
<br>
<p> Text blah blah <br>
Text blah blah <br>
<br>
</p>
<div style="text-align: center;">  
<div style="display: inline-block; text-align: left;">  
<input type="radio" onclick="javascript:mobileCheck();"id="mobileCheck" name="choose" required="required" value="Smartphone"> Smartphone  
<img src="d.jpg">  
<div id="ifMobile" style="visibility:hidden">  
<input type="text" id="yes" name="mobile" value="<?php echo $mobile; ?>" />  
<p>(Bitte Mobilfunknummer eingeben/prüfen) </p>
</div>
<input type="radio" onclick="javascript:tokenCheck();" id="tokenCheck" name="choose" required="required" value="Hardwaretoken"> Hardwaretoken  
<img src="token.jpg">  
<br>
<br>
<br>
<input type="submit" formaction="insert.php" name="Speichern" value="Speichern"/><br>  
</div>
</div>
</form>
</body>
</html>


<!DOCTYPE html>
<html>

<head>
    <title>Insert Page page</title>
</head>

<body>
    <center>
        <?php

        //servername => localhost
        //username => root
        // password => empty
        // database name => staff
        $conn = mysqli_connect("localhost", "root", "", "2faumfrage");  

        // Check connection
        if($conn === false){
            die("ERROR: Could not connect. "  
                . mysqli_connect_error());
        }

        // Taking all 5 values from the form data(input)
        $givenname = $_REQUEST['givenname'];  
        $sn = $_REQUEST['sn'];  
        $department = $_REQUEST['department'];  
        $samaccountname = $_REQUEST['samaccountname'];  
        $mobile = $_REQUEST['mobile'];  
		$voted = 1;
		$smartphone = $_GET['smartphone'];  
		$token = $_GET['token'];  

        // We are going to insert the data into our sampleDB table
        $sql = "INSERT INTO 2fabenutzer VALUES ('$givenname',  
            '$sn','$department','$samaccountname','$mobile','$voted','$smartphone','$token')";  

        // Check if the query is successful
        if(mysqli_query($conn, $sql)){
            echo "<h3>data stored in a database successfully."  
                . " Please browse your localhost php my admin"  
                . " to view the updated data</h3>";  

            echo nl2br("\n$givenname\n $sn\n "  
                . "$department\n $samaccountname\n $mobile\n $voted\n $smartphone\n $token");  
        } else{
            echo "ERROR: Hush! Sorry $sql. "  
                . mysqli_error($conn);
        }

        // Close connection
        mysqli_close($conn);
        ?>
    </center>
</body>

</html>

Content-ID: 63070901834

Url: https://administrator.de/contentid/63070901834

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

Pjordorf
Pjordorf 16.01.2024 um 17:26:12 Uhr
Goto Top
Hallo,

Zitat von @Kangaroojack:
Danke für deine Info, aber wo ist dein "smartpkone" definiert?
Evtl. dein Google gegen ein Apfel tauschen face-smile

Gruss,
Peter
Kangaroojack
Kangaroojack 16.01.2024 um 17:40:35 Uhr
Goto Top
Zitat von @Pjordorf:

Hallo,

Zitat von @Kangaroojack:
Danke für deine Info, aber wo ist dein "smartpkone" definiert?
Evtl. dein Google gegen ein Apfel tauschen face-smile

Gruss,
Peter


Danke für deine Antwort, allerdings kann ich weder den Joke noch deine Frage wirklich nachvollziehen.
Ist irgendwo ein Schreibfehler bzgl. Smartphone oder was meinst du?

Ansonsten habe ich halt "versucht" die beiden Variablen irgendwie zu definieren.
=> siehe Hinweis völliger Anfänger was HTML/PHP etc. angeht.

Hier habe ich versucht mit Javascript die Bedingung abzubilden und dann ne Variable zu definieren, aber so scheint das wohl nicht zu funktionieren.

function mobileCheck() {
    if (document.getElementById('mobileCheck').checked) {    
        document.getElementById('ifMobile').style.visibility = 'visible';    
		document.getElementById('yes').required = 'required';    
		token = 0;
		smartphone = 1;
    }
    else document.getElementById('ifMobile').style.visibility = 'hidden';    

}

function tokenCheck() {
    if (document.getElementById('tokenCheck').checked) {    
        token = 1;
	smartphone = 0;
    }
}
michi1983
michi1983 16.01.2024 um 17:43:01 Uhr
Goto Top
Du definierst diese Variable aber nur in JavaScript. Weder dein HTML noch dein PHP kennen diese Variable.
Kangaroojack
Kangaroojack 16.01.2024 um 17:46:49 Uhr
Goto Top
Zitat von @michi1983:

Du definierst diese Variable aber nur in JavaScript. Weder dein HTML noch dein PHP kennen diese Variable.

okay, so in etwas denke ich mir das schon. Wäre schön, wenn jemand schreiben/erklären könnte wie ich es richtig mache, anstatt nur den Hinweis zu geben, dass es falsch ist face-smile

Wenn ich wüsste wie es geht, hätte ich in keinem Forum zeitaufwendig ein Post erstellt.
michi1983
michi1983 16.01.2024 um 19:17:33 Uhr
Goto Top
Ein Forum ist auch nicht dazu einem alles vorzukauen. Dann gäbe es ja keinen „Lerneffekt“ oder?

Lies das mal durch und versuche es.

Wenn es noch immer nicht klappt, poste deinen neuen Code hier und wir sehen weiter.

Gruß
prinzjulius
prinzjulius 16.01.2024 um 21:17:51 Uhr
Goto Top
Hallo,

Ich hoffe ich verstehe Dich nicht gänzlich falsch, aber was Du planst, ist nicht möglich. Du kannst PHP-Variablen nicht dynamisch im Frontend verändern. Das PHP generiert Dir beim Laden der Seite das HTML und ist dann statisch, bis eine neue Seite geladen wird, oder die Seite eben neu geladen wird.

Ich würde hier JS verwenden. Du könntest zB. Das Input-Feld von Anfang an anzeigen, aber auf disabled setzen oder per CSS auf
display:hidden
um es auszublenden und bei klicken auf den entsprechenden Radiobutton wird per JS die property getoggelt.
HTML Könnte etwa so aussehen:
 <form>
    <input type="radio" id="radioEnable" name="radioOption" value="enable" checked>  
    <label for="radioEnable">Enable Textfeld</label><br>  

    <input type="radio" id="radioDisable" name="radioOption" value="disable">  
    <label for="radioDisable">Disable Textfeld</label><br>  

    <input type="text" id="textField" placeholder="Text eingeben">  
</form> 

JS/jQuery

 $(document).ready(function() {
    $('input[type="radio"][name="radioOption"]').change(function() {  
        if ($("#radioEnable").is(":checked")) {  
            $("#textField").prop('disabled', false);  
        } else if ($("#radioDisable").is(":checked")) {  
            $("#textField").prop('disabled', true);  
        }
    });
}); 

Wenn du das Formular dann per Button absendest, übergibst Du den „name“ und „value“-Property der Inputs.

Gruß
Julius
Xaero1982
Xaero1982 16.01.2024 um 22:11:35 Uhr
Goto Top
Oder du übergibst die Eingaben im Formular über ein hidden input
<input type="hidden" name="smartphone" value="<?php echo $smartphone; ?>">  

Das rufst du dann in deiner insert.php ab z.b. so:

$smartphone = $_POST['smartphone'];    

Kannste dir dann ausgeben mit echo $smartphone um mal zu schauen was drin steht.

Grüße
Kangaroojack
Kangaroojack 16.01.2024 um 22:30:31 Uhr
Goto Top
Zitat von @Xaero1982:

Oder du übergibst die Eingaben im Formular über ein hidden input
<input type="hidden" name="smartphone" value="<?php echo $smartphone; ?>">  

Das rufst du dann in deiner insert.php ab z.b. so:

$smartphone = $_POST['smartphone'];    

Kannste dir dann ausgeben mit echo $smartphone um mal zu schauen was drin steht.

Grüße

Das funktioniert doch aber nicht? - da ich den Wert ja je nach Bedingung vor der Übergabe ändern will - und das ist doch wohl genau das Problem? Der Check welcher Radio Button aktiv ist passiert mittels Javascript - welches, wie ich es jetzt aufgeschnappt habe - keine Variablen ändern kann.?

Nur damit es hier keiner falsch versteht - mein bisheriges Wissen mit html/php fußt auf ettlichen Stunden googeln, copy&paste/anpassen von Programmcodeteilen die ich gesucht habe + Try&Error!
Deswegen ist mir das auch alles nicht wirklich geläufig wie was funktioniert und zusammenspielt.
Xaero1982
Xaero1982 16.01.2024 aktualisiert um 23:17:47 Uhr
Goto Top
Also folgendes anpassen

    <script type="text/javascript">    
        function mobileCheck() {
            if (document.getElementById('mobileCheckx').checked) {    
                document.getElementById('ifMobile').style.display = 'block';    
                document.getElementById('yes').required = true;    
            }
            else {
                document.getElementById('ifMobile').style.display = 'none';  
                document.getElementById('yes').required = false;  
            }
        }

        function tokenCheck() {
            if (document.getElementById('tokenCheckx').checked) {    
                document.getElementById('ifMobile').style.display = 'none';    
                document.getElementById('yes').required = false;  
            }
        }
    </script>

<form action="/insert.php" method="get">    

<div style="text-align: center;">    
    <div style="display: inline-block; text-align: left;">    
        <label>
            <input type="radio" onclick="mobileCheck();" id="mobileCheckx" name="choose" required="required" value="Smartphone"> Smartphone  
        </label>
        <div id="ifMobile">    
            <input type="text" id="yes" name="mobile" value="<?php echo $mobile; ?>" />    
            <p>(Bitte Mobilfunknummer eingeben/prüfen) </p>
        </div>
        <label>
            <input type="radio" onclick="tokenCheck();" id="tokenCheckx" name="choose" required="required" value="Hardwaretoken"> Hardwaretoken  
        </label>
        <br>
        <br>
        <br>
        <input type="submit" formaction="insert.php" name="Speichern" value="Speichern"/><br>  
    </div>
</div>

        // Taking all 5 values from the form data(input)
        $givenname = $_GET['givenname'];    
        $sn = $_GET['sn'];    
        $department = $_GET['department'];    
        $samaccountname = $_GET['samaccountname'];    
        $mobile = $_GET['mobile'];    
	$voted = 1;
	$choose =$_GET['choose'];  

und
        $sql = "INSERT INTO 2fabenutzer VALUES ('$givenname',    
            '$sn','$department','$samaccountname','$mobile','$voted','$choose')";    

Versuche es mal mit den Anpassungen.

Radiobutten rufst du mit dem namen ab und der ist choose und nicht smartphone und nicht token.

Hier sind natürlich keine MySQL Sicherheitsfunktionen eingebaut.
Pjordorf
Pjordorf 16.01.2024 aktualisiert um 23:43:32 Uhr
Goto Top
Hallo,

Zitat von @Kangaroojack:
mein bisheriges Wissen mit html/php fußt auf ettlichen Stunden googeln, copy&paste/anpassen von Programmcodeteilen die ich gesucht habe + Try&Error!
Dann war Google, Youtube, copy+paste, anpassen von Programmteilen, try&Error alle nicht gut genug wie ein solides Handbuch mit Grundlagen gewesen wäre. Und dass wo heutzutage alles - aber wirklich alles frei zugänglich im WWW steht.
https://www.heise.de/tipps-tricks/HTML-Grundlagen-Was-Einsteiger-wissen- ...
https://www.php.net/manual/de/language.oop5.basic.php
https://wiki.selfhtml.org/wiki/PHP/Tutorials/Einstieg/Grundlagen
https://www.ionos.de/digitalguide/websites/webseiten-erstellen/php-lerne ...
https://wiki.selfhtml.org/wiki/HTML/Tutorials/Einstieg
https://www.ionos.de/digitalguide/websites/web-entwicklung/html-lernen-d ...

Deswegen ist mir das auch alles nicht wirklich geläufig wie was funktioniert und zusammenspielt.
Also mal wieder ein Fachman der keine ,Ahnung hat (Fachidiot)face-sad oder auch badgelore for programming languages (Sorry, you asked for it face-smile) Nicht personlich gemeint, kenn dich schliesslich nicht persönlich. Viel Spass beim Lernen, oder Geld ausgeben... oder deine Zeit im Forum verlieren...

Gruß,
Peter
Xaero1982
Xaero1982 17.01.2024 um 19:58:48 Uhr
Goto Top
Und? Problem gelöst?