2016-11-30 2 views
0

Привет, спасибо заранее, я пытаюсь получить данные из формы и ввести ее в базу данных. Я следую руководству о том, как это сделать, но руководство не учитывает ничего, что не работает ........Пытается хранить данные в БД из формы с помощью php

Я только начинал с PHP, поэтому мои навыки довольно ограничены, однако Я действительно понимаю весь написанный мной код, он просто не работает! Сценарий PHP не будет двигаться мимо, если заявление ниже, и я не могу понять, почему:

// Check for existing user with the new id 
$sql = "SELECT COUNT(*) FROM sessions.users WHERE userid = '$_POST[newid]'"; 
$result = mysqli_query($cxn, $sql); 
if (!$result) { 
error('A database error occurred in processing your '. 
'submission.\nIf this error persists, please '. 
'contact [email protected] This is from error 1'); 

Весь код:

signup.php

<?php //signup.php 
     include 'common.php'; 
     include 'db.php'; 

     if(!isset($_POST['submitok'])): 
     // display user signup form 

     ?> 


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml"> 

    <head> 
     <title>New User Registration</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    </head> 
    <body> 
     <h3>New User Registration Form</h3> 
     <p><font color="orangered" size="+1"><tt><b>*</b></tt></font> indicates a required field</p> 
     <form method="post" action="<?=$_SERVER['PHP_SELF']?>"> 
     <table border="0" cellpadding="0" cellspacing="5"> 
      <tr> 
      <td align="right"> 
       <p>User ID</p> 
      </td> 
      <td> 
       <input name="newid" type="text" maxlength="100" size="25" /> 
      <font color="orangered" size="+1"><tt><b>*</b></tt></font> 
      </td> 
     </tr> 
     <tr> 
      <td align="right"> 
      <p>Full Name</p> 
      </td> 
      <td> 
      <input name="newname" type="text" maxlength="100" size="25" /> 
      <font color="orangered" size="+1"><tt><b>*</b></tt></font> 
      </td> 
     </tr> 
     <tr> 
      <td align="right"> 
      <p>E-Mail Address</p> 
      </td> 
      <td> 
      <input name="newemail" type="text" maxlength="100" size="25" /> 
      <font color="orangered" size="+1"><tt><b>*</b></tt></font> 
      </td> 
     </tr> 
     <tr valign="top"> 
      <td align="right"> 
      <p>Other Notes</p> 
      </td> 
      <td> 
      <textarea wrap="soft" name="newnotes" rows="5" cols="30"></textarea> 
      </td> 
     </tr> 
     <tr> 
      <td align="right" colspan="2"> 
      <hr noshade="noshade" /> 
      <input type="reset" value="Reset Form" /> 
      <input type="submit" name="submitok" value=" OK " /> 
      </td> 
     </tr> 
     </table> 
    </form> 
    </body> 
    </html> 
    <?php 
     else: 
      //process sign up submission 
      dbConnect('sessions'); 

      if ($_POST['newid']=='' or $_POST['newname']=='' 
      or $_POST['newemail']=='') { 
      error('One or more required fields were left blank.\\n'. 
        'Please fill them in and try again.'); 
     } 

     // Check for existing user with the new id 
     $sql = "SELECT COUNT(*) FROM sessions.users WHERE userid = '$_POST[newid]'"; 
     $result = mysqli_query($cxn, $sql); 
     if (!$result) { 
     error('A database error occurred in processing your '. 
     'submission.\nIf this error persists, please '. 
     'contact [email protected] This is from error 1'); 
    } 

     if (@mysqli_result($result,0,0)>0) { 
     error('A user already exists with your chosen userid.\n'. 
     'Please try another.'); 
     } 

     $newpass = substr(md5(time()),0,6); 

     $sql = "INSERT INTO sessions.users SET 
     userid = '$_POST[newid]', 
     password = PASSWORD('$newpass'), 
     fullname = '$_POST[newname]', 
     email = '$_POST[newemail]', 
     notes = '$_POST[newnotes]'"; 
     if (!mysqli_query($sql)) 
     error('A database error occurred in processing your '. 
     'submission.\nIf this error persists, please '. 
     'contact [email protected] This is from error 2'); 

     // Email the new password to the person. 
     $message = "G'Day! 

     Your personal account for the Project Web Site 
     has been created! To log in, proceed to the 
     following address: 

      http://www.example.com/ 

     Your personal login ID and password are as 
     follows: 

      userid: $_POST[newid] 
      password: $newpass 

     You aren't stuck with this password! Your can 
     change it at any time after you have logged in. 

     If you have any problems, feel free to contact me at 
     <[email protected]>. 

     -Your Name 
     Your Site Webmaster 
     "; 

     mail($_POST['newemail'],"Your Password for the Project Website", 
      $message, "From:Your Name <[email protected]>"); 
     ?> 

     <!DOCTYPE html PUBLIC "-//W3C/DTD XHTML 1.0 Transitional//EN" 
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml"> 
     <head> 
      <title> Registration Complete </title> 
      <meta http-equiv="Content-Type" 
      content="text/html; charset=iso-8859-1" /> 
     </head> 
     <body> 
     <p><strong>User registration successful!</strong></p> 
     <p>Your userid and password have been emailed to 
      <strong><?=$_POST['newemail']?></strong>, the email address 
      you just provided in your registration form. To log in, 
      click <a href="index.php">here</a> to return to the login 
      page, and enter your new personal userid and password.</p> 
     </body> 
     </html> 
     <?php 
     endif; 
     ?> 

db.php

<?php // db.php 

    $dbhost = 'localhost'; 
    $dbuser = 'root'; 
    $dbpass = ''; 

    function dbConnect($db='') { 
     global $dbhost, $dbuser, $dbpass; 

     $cxn = mysqli_connect($dbhost,$dbuser,$dbpass); 

     mysqli_select_db($cxn,$db) 
     or die ("Couldn’t select database."); 


     return $cxn; 
    } 
    ?> 

common.php

<?php // common.php 

    function error($msg) { 
    ?> 
    <html> 
    <head> 
     <script language="JavaScript"> 
     <!-- 
     alert("<?=$msg?>"); 
     history.back(); 
     //--> 
     </script> 
    </head> 
    <body> 
    </body> 
    </html> 
    <?php 
    exit; 
    } 
    ?> 

Любая помощь относительно того, почему эта инструкция if ВСЕГДА производит ошибку, будет большой - спасибо.

+0

Если вы получаете сообщение об ошибке, вы должны включить ошибку в вашем вопросе –

+0

К сожалению моя формулировка была поодаль, сценарий PHP обыкновение двигаться мимо: // Проверка для существующего пользователя с новым идентификатором $ SQL = "SELECT COUNT (*) FROM session.users WHERE userid = '$ _POST [newid]'"; $ result = mysqli_query ($ cxn, $ sql); if (! $ Result) { Ошибка («Ошибка базы данных при обработке вашего». '.. \ NЕсли эта ошибка сохраняется, пожалуйста. ' свяжитесь с [email protected] Это ошибка 1 '). ; – DCWD

ответ

0

Вы не назначаете свое соединение db в пределах используемой области. Вы :, возвращая его из вашей функции dbConnect(), вы просто ничего не делаете с возвращаемым значением.

dbConnect('sessions'); должен быть $cxn = dbConnect('sessions');

Вы бы предупреждены о причине проблемы, если вы использовали mysqli_error(), чтобы MySQL сказать вам, что это не нравится.

Наконец, вы должны использовать связанные параметры в своем запросе, а не напрямую вводить данные, предоставленные пользователем. Найдите что-то вроде «связанных параметров mysqli», чтобы узнать, как это сделать. Теперь у вас есть возможность атаковать.

Для вашего INSERT инструкции, используйте связанные параметры:

$sql = "INSERT INTO sessions.users (userid, password, fullname, email, notes) VALUES (?, ?, ?, ?, ?)"; 

$stmt = mysqli_prepare($sql); 
mysqli_stmt_bind_param($stmt, 'issss', $newID, PASSWORD($newpass), $fullName, $email, $notes); 

if(!mysqli_stmt_execute($stmt)) 
{ 
    // use this for debugging, but do NOT leave it in production code 
    die(mysqli_error($cxn)); 
} 

mysqli_stmt_close($stmt); 

Выше непроверенная так что возможно вам придется внести небольшие коррективы. Это должно дать вам довольно хорошее представление о том, что делать, по крайней мере.

Также убедитесь, что PASSWORD() действительно то, что вы хотите использовать. У меня такое чувство, что нет, но я не хочу этого делать.

+0

Это сработало спасибо! Однако в базу данных ничего не добавлено, теперь я использовал инструкции INSERT из приведенного ниже ответа, так что теперь я действительно прохожу мимо этого оператора IF, но ничего не происходит. – DCWD

+0

В этом ответе отсутствует пробел между закрывающим ')' списка полей и ключевым словом 'VALUES'.Здесь, опять же, было бы хорошим местом, чтобы использовать собственную отчетность об ошибках mysql. –

+0

Простите, что являетесь абсолютной болью, не могли бы вы привести пример того, как я буду использовать это? Вы буквально мой герой! Спасибо, Патрик! – DCWD

Смежные вопросы