【问题标题】:PHP base convert functionPHP基础转换函数
【发布时间】:2019-08-16 09:25:10
【问题描述】:

我正在开发一个项目,该项目将从 HTML 表单中获取用户输入值,然后将这些值从一个基础转换为另一个基础。我已经尝试了几个小时没有成功。我创建了五种 Html 输入类型。一个为要转换的数字。两个用于转换的基础。三为要转换的基数。四,一个用于显示结果的文本框,最后是一个用户将单击以运行该过程的按钮。我将把代码放在下面以获得热情的帮助。提前谢谢大家。

我尝试了 PHP isset 方法,!empty,settype,post 但都不起作用

<form method="POST" name="btnN"  id="chr"class="myfm" action=" <?php htmlspecialchars($_SERVER['PHP_SELF']);?>">
   <span style="color:white">From number:</span>  <br><input type="text" name="screen1" ><br><br>  
      <span style="color:white">From base:</span> <br><input type="text" name="screen2"><br><br>
       <span style="color:white">To base:</span> <br><input type="text" name="screen3"><br><br>
         <span style="color:white">Result:</span> <br><input type="text" name="screen" ><br><br>
       <input name="conver" type="button" value="Convert" onclick="btnN.screen.value='<?php echo $converted; ?>'" style="width:50%" >
   </form>  
   <?php
   $screen1=settype($_POST['screen1']);
    $screen2= settype($_POST['screen2']);
     $screen3=settype($_POST['screen3']);
     do{
       $screen1=settype($screen1,"integer");  
        $screen2=settype($screen2,"integer");
         $screen3=settype($screen3,"integer");
         $converted= base_convert($screen1,$screen2,$creen3);
         }
         while(isset($_POST['conver']));
   ?>

我想要的只是拥有一个带有文本框的 HTML 表单,用户可以在其中输入他或她想要从指定基数转换为另一个指定基数的数字。将 12548 从 base10 转换为 base5 的示例。我的主要问题是 PHP 代码。感谢您的帮助!

【问题讨论】:

  • 试图用 javascript 输出一个 php 变量是行不通的onclick="btnN.screen.value='&lt;?php echo $converted; ?&gt;'"
  • @msg,请问正确的做法是什么。你能帮忙写代码吗?谢谢
  • settype() 返回truefalse,你为什么要把它分配给你的变量?
  • 您的do-while 循环将是一个无限循环,因为循环中的$_POST['conver'] 没有任何变化。我想你想使用if,而不是do-while
  • @Barmar,if 语句也不适合我。

标签: php


【解决方案1】:

有几个问题需要解决:

  1. 您错误地使用了settype()。它改变了变量,它不返回新值。您可以为此使用intval()。而且您不应该将screen1 转换为整数; base_convert 的第一个参数必须是字符串(如果将其转换为整数,它将被解析为十进制,但重点是在特定的基数中解析它)。
  2. 您应该使用if 而不是do-while 来测试表单是否已提交。
  3. 您不能像现在这样在 JavaScript 中使用 PHP 变量。 PHP 脚本完成后,JavaScript 在客户端上运行。因此,您的 onclick 将显示之前提交的表单的值。
  4. 而是将结果变量回显到输出字段的值中。这必须在进行基本转换的代码之后。
  5. 按钮必须是提交按钮,才能提交表单。如果您不想提交表单并重新加载页面,则需要学习使用 AJAX,我不会在此答案中展示如何操作。
  6. 您在致电base_convert() 时将$screen3 拼错为$creen3(缺少s)。
  7. 您需要在action 属性中回显$_SERVER['PHP_SELF']
<?php
if (isset($_POST['conver'])) {
    $screen1 = $_POST['screen1'];
    $screen2 = intval($_POST['screen2']);
    $screen3 = intval($_POST['screen3']);
    $converted= base_convert($screen1,$screen2,$screen3);
} else {
    $screen1 = $screen2 = $screen3 = $converted = "";
}
?>
<form method="POST" name="btnN"  id="chr"class="myfm" action=" <?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
    <span style="color:white">From number:</span>  <br><input type="text" name="screen1" value="<?php echo $screen1; ?>" ><br><br>  
    <span style="color:white">From base:</span> <br><input type="text" name="screen2" value="<?php echo $screen2; ?>"><br><br>
    <span style="color:white">To base:</span> <br><input type="text" name="screen3" value="<?php echo $screen3; ?>"><br><br>
    <span style="color:white">Result:</span> <br><input type="text" name="screen" value="<?php echo $converted; ?>" ><br><br>
    <input name="conver" type="submit" value="Convert" style="width:50%" >
</form>  

【讨论】:

  • 您的代码中还有一个非常简单的错误——请参阅#6。
  • @AgbesiInnocent 我已经测试过这段代码,它现在可以工作了。
  • @Barmar 哇!有效!非常感谢,先生!你能帮我阻止它在我点击提交按钮时加载吗?再次提前感谢
  • 阅读 AJAX 教程。或者用 JavaScript 编写基本转换代码。 stackoverflow.com/questions/1337419/…
【解决方案2】:

我认为你必须重新创建你的代码,因为它确实令人困惑:

    <form method="POST" name="btnN"  id="chr"class="myfm" action=" <?php htmlspecialchars($_SERVER['PHP_SELF']);?>">
           <span style="color:white">From number:</span>  <br><input type="text" name="input" ><br><br>  
              <span style="color:white">From base:</span> <br><input type="text" name="type-from"><br><br>
               <span style="color:white">To base:</span> <br><input type="text" name="type-to">  
           <?php
        if(isset($_POST['submit'])){
           $result = base_convert(trim($_POST['input']),strtolower($_POST['type-from']),strtolower($_POST['type-to']));
        }
           ?>

    <span style="color:white">Result:</span> <br><input type="text" name="screen" value="<?php echo $result; ?>" ><br><br>
        <input name="conver" type="submit" value="Convert" style="width:50%" >
</form>

【讨论】:

  • 你在这段代码中引入了大量不必要的复杂性(比如抛出并立即捕获的异常?),而没有解决任何真正的问题。
  • @duskwuff 看起来更好吗?我只是认为创建try catch 块始终是一个好习惯,以防万一我们遇到任何错误。不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 2013-10-22
  • 2018-06-06
  • 2017-01-20
  • 2017-04-02
相关资源
最近更新 更多