修改php表单

时间:2013-12-03 12:39:21

标签: javascript php phpmyadmin

这里的PHP初学者。 我有以下表单脚本:

<?php
if (isset($_POST['name']) && isset($_POST['email']) && isset($_FILES['uploaded_file']['name'])) {

$db_name = "xx";
$server = "localhost";
$DBuser = "xxx";
$DBpass = "xxxx";

$name = $_POST['name'];
$email = $_POST['email'];
$file = "Imagini_lume/" . $email . ".jpg";

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    echo "Adresa de e-mail este incompleta!";
} else {
    $name = trim($name);
    if ($name != '') {
        $temp_file = trim($_FILES['uploaded_file']['name']);
        if ($temp_file != '') {
            // here
            mysql_connect($server, $DBuser, $DBpass) or die(mysql_error());
            mysql_select_db($db_name) or die(mysql_error());
            // check for existing
            //$result = mysql_query("select email from Emails where email='$email'") or die(mysql_error());
            $data = mysql_fetch_array($result);
            if ($data == null) {
                mysql_query("insert into Emails (Email,Full_Name,Image) values('$email','$name','$file');") or die(mysql_error());

                if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file)) {
                    //sucess
                } else {
                    echo "Eroare incarcare imagine!";
                }
                // email sending
                sendEmail("xx@gmail.com", getContent($name, $email, $file));
                echo "Sucessfull!";
            //} else {
                //echo "Adresa de e-mail este folosita de cineva.";

            }
        } else {
            echo "Trebuie sa selectati desenul dvs.!";
        }
    } else {
        echo "Introduceti numele complet!";
    }
}} else {
    echo "Va rugam sa completati spatiile de mai sus!";
}

注意:if (isset($_POST['name']) && isset($_POST['email']) && isset($_FILES['uploaded_file']['name'])) {} else { echo "Va rugam sa completati spatiile de mai sus!";} 与上述不同的行。我只是添加了这种方式,所以我可以在“代码示例”中包含所有脚本。

问题是:

  1. 如果用户使用相同的名称和电子邮件地址上传多个文件,文件将覆盖,我想区分文件(例如“name@email.com1.jpg”,“name @ email” .com2.jpg“和”。 我已经找到了脚本但是作为初学者,我不知道在哪里插入以下代码(另一个注释 - 我不知道它是完整代码还是缺少某些脚本):

    while(file_exists($name . $extension)) {
        $name .= '1';
    }
    
  2. 我想“强迫”用户输入它的全名。由于设计原因,我只有一个“全名”文本框,我想强制用户键入至少2个单词(名字和姓氏) - 基本上是一个单词最小nr,而不是字符nr。我再次找到了一个代码,但是,我仍然不知道如何将它应用到我的代码中,在哪里插入它:

    if ($("#et_newpost_content").text().split(/\s+/).length < 250) {
        alert('Message must be at least 250 words.')
    }
    
  3. 请告知。

1 个答案:

答案 0 :(得分:0)

好的,这很简单。增加图像名称计数器的第一个脚本实现起来非常简单:

1)

$db_name = "xx";
$server = "localhost";
$DBuser = "xxx";
$DBpass = "xxxx";

$name = $_POST['name'];
$email = $_POST['email'];
// Now checking the name existence
// Defining the initial state: the format is: my@email.com + counter + extension
// i.e. my@mail.com1.jpg
$ext = ".jpg";
$count = 1;
$base_file_name = "Imagini_lume/" . $mail;
// while already exists a file name like that, increment count
while (file_exists($base_file_name.$count.$ext))
    $count++;
// finally define the official name of the file!
$file = $base_file_name.$count.$ext;

2)你写的代码是javascript(jquery),而不是php ...如果你想检查参数服务器端你可以使用filter_var:

if (filter_var($name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[A-Z][a-z]* [A-Z][a-z]*/"))) === FALSE)
    die("Error: You should enter your complete name. i.e. John Black");

(看一下关于php指南的正则表达式章节)

最后,请不要在真实的Web应用程序中使用该代码。正如它所写的,它在SQL注入攻击上并不安全:

SQL Injection

此外,您没有检查每个用户输入参数的正确性。花点时间做一些经验;)