我的php表单有问题。我有一个应用程序来管理LDAP服务器中的用户,所以我希望用户可以随时更改他们的密码。
在表单中我们需要树信息(旧密码,newwpassword和相关ldap条目的uid)。我们从displayName中提取uid,它可以是一个完整的名称:我们认为第一个单词总是uid(只是为了注意它,但这里并不重要)。
所以我有以下代码的表单:
<?php
// echo '<pre>';
// print_r($_POST);
// echo '</pre>';
function str_to_noaccent($str) {
$url = $str;
$url = preg_replace('#Ç#', 'C', $url);
$url = preg_replace('#ç#', 'c', $url);
$url = preg_replace('#è|é|ê|ë#', 'e', $url);
$url = preg_replace('#È|É|Ê|Ë#', 'E', $url);
$url = preg_replace('#à|á|â|ã|ä|å#', 'a', $url);
$url = preg_replace('#@|À|Á|Â|Ã|Ä|Å#', 'A', $url);
$url = preg_replace('#ì|í|î|ï#', 'i', $url);
$url = preg_replace('#Ì|Í|Î|Ï#', 'I', $url);
$url = preg_replace('#ð|ò|ó|ô|õ|ö#', 'o', $url);
$url = preg_replace('#Ò|Ó|Ô|Õ|Ö#', 'O', $url);
$url = preg_replace('#ù|ú|û|ü#', 'u', $url);
$url = preg_replace('#Ù|Ú|Û|Ü#', 'U', $url);
$url = preg_replace('#ý|ÿ#', 'y', $url);
$url = preg_replace('#Ý#', 'Y', $url);
return ($url);
}
if(isset($_POST['soumission']))
{
if(isset($_POST['oldpassword']) && isset($_POST['newpassword']) && isset($_POST['displayName']))
{
$oldpasswd = $_POST['oldpassword'];
$newpassd = $_POST['newpassword'];
$arr = explode('',$_POST['displayName']);
$user_uid = str_to_noaccent(strtolower($arr[0]));
$cmd = exec('script.sh '.$oldpasswd.' '.$newpassd.' '.$user_uid);
if($cmd)
{
echo '<script language="text/javascript">';
echo 'alert("Mot de passe changé avec succès!")';
echo '</script>';
}
else
{
echo '<script language="text/javascript">';
echo 'alert("Impossible de changer de mot de passe!")';
echo '</script>';
}
}
}
?>
<form class="section" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
<h2>Mot de passe</h2>
<input type="password" name="oldpassword" placeholder="Ancien mot de passe" autocomplete="off" autocapitalize="off" autocorrect="off" />
<input type="password" id="pass2" data-typetoggle="#personal-show" name="newpassword" placeholder="Nouveau mot de passe" autocomplete="off" autocapitalize="off" autocorrect="off" />
<input type="checkbox" id="personal-show" name="show" /><label for="personal-show"></label>
<input type="hidden" id="displayName" name="displayName"
value="<?php p($_['displayName']) ?>"
autocomplete="on" autocapitalize="off" autocorrect="off" readonly />
<input type="submit" name="soumission" value="Changer le mot de passe"/>
<div class="strengthify-wrapper"></div>
</form>
<?php
?>
script.sh的内容如下:
#! /bin/bash
/usr/bin/ldappasswd -h @IP_ldap_server -p 389 -x -D 'cn=admin,dc=xxxxx,dc=xxxxx,dc=xx' -w xxxxxx -a $1 -s $2 uid=$3,ou=xxxx,dc=xxxx,dc=xxxx,dc=xx
script.sh,str_to_noaccent等所有内容都经过单独测试,效果很好。甚至是print_r($ _ POST);表明形式值很好。
但似乎php代码没有被执行(从if(isset($ _ POST [&#39; soumission&#39;])到第一个php块的末尾)。已经过了几天,但我仍然可以找出原因。在这里sombebody可以帮助找到错误吗?
非常感谢你们。