【问题标题】:Trying to create a simple cumulative addition script in PHP (or JS):尝试在 PHP(或 JS)中创建一个简单的累积加法脚本:
【发布时间】:2014-12-06 22:11:19
【问题描述】:

尝试用PHP(或JS)创建一个简单的累积加法脚本:

1) 输入任意整数(4位以下),点击提交,输入的数字显示并保存在同一网页上

2) 输入另一个数字,点击提交,输入的数字与之前的数字相加,并保存并显示在网页上

重复……。

示例:garchen.net 上的咒语柜台

下面是我到目前为止的代码 在 Index.php 中:

<form method="post" action= "process-mantra-form-ami.php" >
    <p><strong>Amitabha Million Mantra Accumulation: </strong><br></p>
    <div style="margin-left: 20px;">
        <p>OM AMI DEWA HRI</p>
        <input type="text" name="accumulation" size="10" maxlength="6">
        <input type="submit" value="Submit Your Mantra" name="B1"><br>
        <span id="mani">Amitabha Mantra Count: <?php echo $newValue; ?> </span>
        <p></p>
    </div>
</form>

我对表单处理 php 感到困惑。我试图将我的本地 mamp 服务器用于数据库。我是否要在 process-mantra-form-ami.php 文件中同时创建连接、创建数据库和表,将表单数据插入表中,并将数据检索回 index.php?

你们在我的上一篇文章中让它看起来很容易,但似乎有很多。我知道我下面的代码不完整且不太正确。救命!

PROCESS-MANTRA-FORM-AMI.PHP 代码如下

<?php 

// Create connection
$con=mysqli_connect("localhost:8888","root","root","my_db");

// Check connection
if (mysqli_connect_errno()) {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// escape variables for security
$accumulation = mysqli_real_escape_string($con, $_POST['accumulation']);

// Create database
$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql)) {
  echo "Database my_db created successfully";
} else {
  echo "Error creating database: " . mysqli_error($con);
}

// Create table "Mantras" with one column 'Num'
$sql="CREATE TABLE Mantras (Num INT)";
if (mysqli_query($con,$sql)) {
  echo "Table mantras created successfully";
} else {
  echo "Error creating table: " . mysqli_error($con);
}

// Insert form data into table
$sql="INSERT INTO Mantras (Num INT)
VALUES ('$num')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}

// update database
mysqli_query($con,"UPDATE Mantra SET Num = num + 1");

}

mysqli_close($con);


?>

<div>   
    <h2>Thank you for your <?php echo $num; ?> Amitabha Mantras!</h2>

    <p>Remember to dedicate your merit.</p>

    <p><a href="index.php">Return to the main site</a></p>

</div>

【问题讨论】:

  • SQL 在运行这个$sql="INSERT INTO Mantras (Num INT) VALUES ('$num')"; if (!mysqli_query($con,$sql)) { die('Error: ' . mysqli_error($con)); }时出现了什么错误
  • 请问您为什么要一遍又一遍地创建数据库?我的意思是,在我看来,如果你用它来处理你的数据,它每次都会尝试创建一个新的数据库?
  • Fred-我还没有运行它
  • icecube-所以你是在建议我将我的三个 $sql 语句合二为一吗?

标签: php sql cumulative-sum


【解决方案1】:

试试这个...(抱歉,今晚很无聊)

<?php  
$host = 'localhost';  // localhost:8888
$user = 'root';      
$pass = '';           // root
$dbnm = 'test'; 
$conn = mysqli_connect($host,$user,$pass,$dbnm)
            or die('Error ' . $conn->connect_error);    

// for testing.... so i can run the code over and over again and not 
// get errors about things existing and stuff 
run_statement($conn,"drop database if exists `my_db`;",'cleared old db');     
run_statement($conn,"drop table    if exists `mantras`;",'cleared old table');   
run_statement($conn,"drop table    if exists `two_col_table`;",'cleared old table');            

// Create database
$sql  = 'create database my_db';
$err = run_statement($conn,$sql,'Database creation');   
if (!$err) $conn->select_db('my_db'); 

// Create table "Mantras" with one column 'Num'
$sql = 'create table mantras (num int)';
$err = run_statement($conn,$sql,'Table mantras');  

if (!$err) {
   $sql  = 'insert into mantras (num) values ( ? )';
   $stmt = $conn->prepare($sql); 
   $stmt->bind_param('d',$num);   // d is for digit but s (string) would work too
   $num = 1; 
   $stmt->execute(); 
   $num = 2; 
   $stmt->execute(); 
   $stmt->close(); 
   echo ($conn->error) ? "insert errored: {$conn->error}" : 'insert ran succesfully'; 

   // update database
   $sql = 'update mantras set num = num + 1';
   run_statement($conn,$sql,'Update database'); 
}


// Create table "test" with two columns
$sql = 'create table two_col_tbl (num int, txt varchar(10))';
$err = run_statement($conn,$sql,'Table two_col_tbl');  

if (!$err) {
   // demonstrating how to bind multiple values 
   $sql  = 'insert into two_col_tbl values ( ?, ? )';
   $stmt = $conn->prepare($sql); 
   $stmt->bind_param('ds',$num,$txt);   
   $num = 1; $txt = 'hello';
   $stmt->execute(); 
   $num = 2; $txt = 'world';
   $stmt->execute();  
   $stmt->close(); 

   // select statement
   $sql  = 'select num, txt from two_col_tbl';
   $stmt = $conn->prepare($sql); 
   $stmt->bind_result($db_num, $db_txt);
   $stmt->execute();  
   print '<table><tr><th colspan=2>two_col_tbl</tr><tr><th>num</th><th>txt</th></tr>';
   while ($stmt->fetch()) {
      print "<tr><td>$db_num</td><td>$db_txt</td></tr>"; 
   }
   print '<table>';
   $stmt->close(); 
} 

$conn->close();  


function run_statement($conn,$statement,$descr) { 
   if ($conn->query($statement)) 
        echo "$descr ran successfully"; 
   else echo "$descr failed: {$conn->error}"; 
   return $conn->error; 
} 
?>

<div>   
    <h2>Thank you for your <?php echo $num; ?> Amitabha Mantras!</h2> 
    <p>Remember to dedicate your merit.</p> 
    <p><a href="index.php">Return to the main site</a></p> 
</div>

【讨论】:

  • 为你所有的辛勤工作和它给我的欢笑点赞,这是我迫切需要的。不错的工作! xD
  • Icecube - 是的,我确实有很多东西要学。我想!感谢您的参考、信息和代码。我会研究它并检查它。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多