2015-12-09 3 views
0

Я пересмотрел код, и все выглядит правильно, поэтому я не уверен, что не так. Я продолжаю получать следующую ошибку. Число совпадений столбцов s1s01 1136 соответствует.Значение формы Php не соответствует

Я считаю, что использовал все правильные коды безопасности, пожалуйста, обратите внимание, если я не поблагодарил вас.

<?php 
include ('wording/en-translation.php'); 
?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php 
// define variables and set to empty values 
$user_nameErr = $user_emailErr = ""; 
$user_name = $user_email = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["user_name"])) { 
    $user_nameErr = "Name is required"; 
    } else { 
    $user_name = mysql_real_escape_string($_POST["user_name"]); 
    //check if name only contains letters and whitespace 
    if (!preg_match("/^[a-zA-Z]*$/",$user_name)) { 
     $user_nameErr="Only letters and white spaces allowed"; 
    } 
    } 

    if (empty($_POST["user_email"])) { 
    $user_emailErr = "Email is required"; 
    } else { 
    $user_email = mysql_real_escape_string($_POST["user_email"]); 
    //check if email is well-formed 
    if (!filter_var($user_email, FILTER_VALIDATE_EMAIL)) { 
     $user_emailErr = "Invalid Email Format"; 
    } 
    } 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    $user_name = mysql_real_escape_string($_POST["user_name"]); 
    $user_email = mysql_real_escape_string($_POST["user_email"]); 
} 

function mysql_real_escape_string($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 
} 
?> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    <label for="user_name"><?php echo WORDING_REGISTRATION_USERNAME; ?></label> 
    <input id="user_name" type="text" pattern="[a-zA-Z0-9]{2,64}" value="<?php echo $user_name; ?>" name="user_name" required /> 
      <span class="error">* <?php echo $user_nameErr;?></span><br> 
    <label for="user_email"><?php echo WORDING_REGISTRATION_EMAIL; ?></label> 
    <input id="user_email" type="email" name="user_email" value="<?php echo $user_email; ?>" required /> 
      <span class="error">* <?php echo $user_emailErr;?></span> 
    <input type="submit" name="register" value="<?php echo WORDING_REGISTER; ?>" /> 
</form> 
<?php 
echo $user_name; 
echo "<br>"; 
echo $user_email; 
echo "<br>"; 
?> 
<?php 
$servername = "localhost"; 
$username = "admin"; 
$password = ""; 
$dbname = "login"; 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); 
    // set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $sql = "INSERT INTO users(user_name, user_email) 
    VALUES(
    ". mysql_real_escape_string($user_name) ."', 
    ". mysql_real_escape_string($user_email) ."' 
    )"; 
    // use exec() because no results are returned 
    $conn->exec($sql); 
    echo "New record created successfully"; 
    } 
catch(PDOException $e) 
    { 
    echo $sql . "<br>" . $e->getMessage(); 
    } 

$conn = null; 




?> 


</ 
+1

Пожалуйста, прекратите использование 'mysql_ *' функций] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php). [Эти расширения] (http://php.net/manual/en/migration70.removed-exts-sapis.php) были удалены в PHP 7. Узнайте о [подготовленном] (http://en.wikipedia.org/ wiki/Prepared_statement) для [PDO] (http://php.net/manual/en/pdo.prepared-statements.php) и [MySQLi] (http://php.net/manual/en/mysqli.quickstart .prepared-statements.php) и подумайте над использованием PDO, [это действительно довольно легко] (http://jayblanchard.net/demystifying_php_pdo.html). –

+1

[Ваш скрипт находится под угрозой для SQL Injection Attacks.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) –

+1

'function mysql_real_escape_string ($ data) 'Не очень хорошая идея, так как это может очень хорошо столкнуться с реальной функцией экранирования, если вы хотите использовать все функции mysql_. –

ответ

0

Вы генерируя сломанный SQL, имея полностью НЕПРАВИЛЬНО со ссылкой на свои ценности:

$sql = "INSERT INTO users(user_name, user_email) 
VALUES(
". mysql_real_escape_string($user_name) ."', 
              ^---start sql string 
". mysql_real_escape_string($user_email) ."' 
              ^---end of sql string 
)"; 

Это означает, что вы генерируете

INSERT INTO users (user_name, user_email) VALUES (Bob, '[email protected]') 
                ^--unknown field 

вы также смешивание библиотеки MySQL , который равен IMPOSSIBLE, и вы уязвимы для sql injection attacks.

Короче говоря, этот код является полностью грузо-культовым программированием, и вам действительно нужно сидеть сложа руки и правильно изучать PHP.

+0

Спасибо всем, что я пытался следить за w3c, и я думаю, что они не актуальны. Я вернусь и исправлю это по сравнению с php.net. еще раз спасибо за все указатели. – shutterfly