2012-04-09 6 views
2

Я немного застрял, я могу обновить базу данных вручную, но через PHP она не работает.Вставить данные в базу данных не работает

полей базы данных:

Column  Type   Collation   Attributes Null Default Extra 
id   int(10)       UNSIGNED  No    auto_increment  
addedby varchar(100) latin1_swedish_ci    No    
location text   latin1_swedish_ci    No    
details text   latin1_swedish_ci    No    
deadline text   latin1_swedish_ci    No    
datefixed int(200)          No 0   
completed int(11)          No 0 

Add_jobs.php:

<?php 

$pagetitle = "Add Job"; 

$checkrank = 3; 

include ($_SERVER['DOCUMENT_ROOT'].'/header.inc.php'); 


$helpfaerie = mysql_fetch_array(mysql_query("SELECT * FROM helpfaerie WHERE page = 'reportbug'")); 
$helpfaerie2 = mysql_fetch_array(mysql_query("SELECT * FROM members WHERE username = '$username'")); 

if ($helpfaerie2[helpfaerie] == 1) 
{ 
echo "<div id=\"helpfaerie\" style=\"overflow: auto; position:fixed; bottom:0; right:0; \"><table width=\"200\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-top: 1pt solid black;border-bottom: 1pt solid black;border-left: 1pt solid black;border-right: 1pt solid black; background-color:#ffffff;\"> 
    <tr> 
    <td><center><img src=\"http://images.neopets.com/items/toy_faerie_psellia.gif\" border=\"0\"></center></td> 
    </tr> 
    <tr> 
    <td><p>$helpfaerie[text]</p></td> 
    </tr> 
    <tr> 
    <td style=\"text-align: right;\">[<a href=\"$baseurl/closehelp.pro.php\">x</a>]</td> 
    </tr> 
</table></div>"; 
} 





ECHO <<<END 






<center> 
<FORM ACTION="add_jobs.pro.php" enctype="multipart/form-data" METHOD=POST> 
<table width="366" border="0" cellspacing="0" cellpadding="0"> 
    <tr> 
    <td colspan="2"><center>Add Job<p></center></td> 
    </tr> 
    <tr> 
    <td width="118">Job Location (If any):</td> 
    <td width="249"><textarea name="page" cols="20" rows="1" value="" ></textarea></td> 
    </tr> 
    <tr> 
    <td width="118">Details::</td> 
    <td width="249"><textarea name="wrong" cols="20" rows="10" value="" ></textarea></td> 
    </tr> 

    <tr> 
    <td width="118">Deadline::</td> 
    <td width="249"><textarea name="line" cols="20" rows="1" value=""></textarea></td> 
    </tr> 
    <tr> 
    <td>&nbsp;</td> 
    <td>&nbsp;</td> 
    </tr> 
    <tr> 
    <td colspan="2"><center><font size="-1"><i> 
     <input type=submit name=Submit value="Add Jobs"> 
    </i></font></center></td> 
    </tr> 
</table></FORM> 
<p>&nbsp;</p></center> 









END; 




include ($_SERVER['DOCUMENT_ROOT'].'/footer.inc.php'); 


?> 

Примечания: DBLink (Ссылка на мою базу данных, которая прекрасно работает,) Аддон, в основном для смайликов и грамматики.

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

add_jobs.pro.php:

<?php 

$pagetitle = "Add Jobs"; 

$checkrank = 3; 

include ($_SERVER['DOCUMENT_ROOT'].'/addon.php'); 

include ($_SERVER['DOCUMENT_ROOT'].'/dblink.php'); 

include ($_SERVER['DOCUMENT_ROOT'].'/security/stripusers.php'); 




$page = $_POST['page']; 
$wrong = $_POST['wrong']; 
$line = $_POST['line']; 



$page = mysql_real_escape_string($page); 
$page = stripslashes($page); 
$page = stripusers($page); 


$wrong = mysql_real_escape_string($wrong); 
$wrong = stripslashes($wrong); 
$wrong = stripusers($wrong); 

$line = mysql_real_escape_string($line); 
$line = stripslashes($line); 
$line = stripusers($line); 

if ((!$page) OR (!$wrong) OR (!$line)) 

{ 

       die(header("Location: $baseurl/add_jobs.php?error=Please+do+not+leave+any+info+blank.")); 

} 





else 

{ 

     mysql_query("INSERT INTO assignments (addedby,location,details,deadline,datefixed) VALUES ('$username','$page','$wrong','$line','$timestamp','0')"); 

     header("Location: add_jobs.php?error=Thank+you.+Your+Job+has+been+submitted."); 

} 



?> 

Ive только что вошел еще один вопрос.

После того, как Джобс представлены, они затем получить перечисленные на этом

<?php 



$pagetitle = "Active Jobs"; 

$checkrank = 0; 


include ($_SERVER['DOCUMENT_ROOT'].'/header.inc.php'); 


$view=$_GET['view']; 

$num = mysql_num_rows(mysql_query("SELECT * FROM `assignments` WHERE 1")); 



if ($num <= 0) 
{ 
    echo " 


<p><center> 

There are no active jobs :D"; 
} 



$sort = mysql_query("SELECT * FROM `assignments` WHERE 1"); 
while($sort2 = mysql_fetch_array($sort)) 


{ 





if($sort2[id]) 


{ 

$tym = date("H:i",$sort2[date]); 
$wcd = date("M j Y",$sort2[date]); 

echo(" 
<center> 
<table width=\"607\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-top: 1pt solid black;border-bottom: 1pt solid black;border-left: 1pt solid black;border-right: 1pt solid black; \"> 
    <tr> 
    <td width=\"139\" valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#5eaed4;\">Submitted By:</td> 
    <td width=\"450\" valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[addedby]</td> 
    </tr> 
    <tr> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Date Submitted:</td> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\"> $wcd @ $tym NST</td> 
    </tr> 
    <tr> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#5eaed4;\">Job Location:</td> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[location] [<a href=\"$sort2[location]\">View</a>]</td> 
    </tr> 
    <tr> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Job Description:</td> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[details]</td> 
    </tr> 
    <tr> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Deadline:</td> 
    <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[deadline]</td> 
    </tr> 
    <tr> 
    <td valign=\"top\" style=\"border-right: 1pt solid black; background-color:#5eaed4;\">completed?:</td> 
    <td valign=\"top\" style=\"background-color:#f4f4f4;\">Click When Completed [<a href=\"$baseurl/staff/submitted/completed_job.pro.php?id=$sort2[id]\">x</a>]</td> 
    </tr> 
</table> 
<p>&nbsp;</p></center> 



"); } 







} 




echo "<p></center>\n"; 

echo "</center>\n"; 


include ($_SERVER['DOCUMENT_ROOT'].'/footer.inc.php'); 


?> 

который затем щелкните X и тогда классы их в качестве завершения, который затем предназначен для удаления их страницы, но это не делает do, они просто остаются в списке,

Но они также регистрируют, что они зафиксированы и отображаются на завершенной странице вакансий.

completed_jobs.php

<?php 



    $pagetitle = "Active Jobs"; 

    $checkrank = 0; 


    include ($_SERVER['DOCUMENT_ROOT'].'/header.inc.php'); 


    $view=$_GET['view']; 

    $num = mysql_num_rows(mysql_query("SELECT id FROM assignments WHERE completed =1")); 


    if ($num <= 0) 
    { 
     echo " 


    <p><center> 

    There are no complete Jobs at this time."; 
    } 




    $sort = mysql_query("SELECT * FROM assignments WHERE completed =1"); 
    while($sort2 = mysql_fetch_array($sort)) 


    { 





    if($sort2[id]) 


    { 

    $tym = date("H:i",$sort2[date]); 
    $wcd = date("M j Y",$sort2[date]); 

    $ftym = date("H:i",$sort2[datefixed]); 
    $fwcd = date("M j Y",$sort2[datefixed]); 

    echo(" 
    <center> 
    <table width=\"607\" border=\"0\" cellspacing=\"0\" cellpadding=\"4\" style=\"border-top: 1pt solid black;border-bottom: 1pt solid black;border-left: 1pt solid black;border-right: 1pt solid black; \"> 
     <tr> 
     <td width=\"139\" valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#5eaed4;\">Submitted By:</td> 
     <td width=\"450\" valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[addedby]</td> 
     </tr> 
     <tr> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Date Submitted:</td> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\"> $wcd @ $tym NST</td> 
     </tr> 
     <tr> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#5eaed4;\">Job Location:</td> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[location] [<a href=\"$sort2[location]\">View</a>]</td> 
     </tr> 
     <tr> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Job Description:</td> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[details]</td> 
     </tr> 
     <tr> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;border-right: 1pt solid black; background-color:#8cc7e3;\">Deadline:</td> 
     <td valign=\"top\" style=\"border-bottom: 1pt solid black;background-color:#f4f4f4;\">$sort2[deadline]</td> 
     </tr> 
     <tr> 
     <td valign=\"top\" style=\"border-right: 1pt solid black; background-color:#5eaed4;\">Completed On:</td> 
     <td valign=\"top\" style=\"background-color:#f4f4f4;\">$fwcd @ $ftym NST</td> 
     </tr> 
    </table> 
    <p>&nbsp;</p></center> 



    "); } 







    } 




    echo "<p></center>\n"; 

    echo "</center>\n"; 


    include ($_SERVER['DOCUMENT_ROOT'].'/footer.inc.php'); 


    ?> 

and then completed_job.pro.php 


<?php 


$pagetitle = "Completed Jobs"; 

$checkrank = 30; 
include ($_SERVER['DOCUMENT_ROOT'].'/addon.php'); 

include ($_SERVER['DOCUMENT_ROOT'].'/dblink.php'); 


$id=$_GET['id']; 





mysql_query("UPDATE assignments SET completed = '1' WHERE id = '$id'"); 
mysql_query("UPDATE assignments SET datefixed = '$timestamp' WHERE id = '$id'"); 



     header("Location: completed_jobs.php?error=Job+has+been+updated+to+complete+:)"); 



?> 

ответ

3

Не называйте stripslashes() после вызова mysql_real_escape_string()! Фактически, если magic_quotes_gpc() не включен (это не рекомендуется), не вызывайте stripslashes(). Вызвав его после mysql_real_escape_string(), вы получите undo.

Вы указали 5 столбцов в списке столбцов вставки, но поставили 6 в списке VALUES(). Из вашей структуры таблицы я предполагаю, что вы намеревались включить completed.

mysql_query("INSERT INTO assignments (addedby,location,details,deadline,datefixed) VALUES ('$username','$page','$wrong','$line','$timestamp','0')"); 
//-------------------------------------------------------------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

Будем считать переменные $username$timestamp и были определены в одном из включенных файлов и надлежащим образом спасся уже.

Некоторые проверки ошибок будет выявить источник ошибки запроса:

$result = mysql_query("INSERT INTO assignments (addedby,location,details,deadline,datefixed) VALUES ('$username','$page','$wrong','$line','$timestamp','0')"); 
if (!$result) { 
    echo mysql_error(); 
} 
+0

и для элементов coloums and Values, как я не видел что! – Ellie

+0

Как я этого не видел! – Ellie

+0

@Ellie Добро пожаловать в переполнение стека. Если этот или любой другой ответ удовлетворительный для вас, отметьте его как принятый, нажав галочку рядом с ним. –

2

Вы получаете ошибку? Если так, то, что это?

На первый взгляд ваш запрос вставки, кажется, имеет больше значения, чем столбцов:

INSERT INTO assignments 
    (addedby,location,details,deadline,datefixed) 
    VALUES 
    ('$username','$page','$wrong','$line','$timestamp','0') 

Это, конечно, выдаст ошибку.

кстати, семейство функций mysql_ устарело. Вы должны хотя бы использовать mysqli_, если не PDO.

+0

Я не получаю никаких ошибок, Просто не имея ничего в базе данных – Ellie

+0

mysql не устарел. Просто предлагается использовать что-то другое. –

+0

как я этого не видел! – Ellie

1

У вас есть некоторые ошибки синтаксиса/подводные камни:

$helpfaerie = mysql_fetch_array(mysql_query("SELECT * FROM helpfaerie WHERE page = 'reportbug'")); 

Вы предполагаете запрос работает. Это плохая практика. Даже если сам оператор SQL синтаксически совершенен, он может выйти из строя для любого количества других причин. Вы должны ВСЕГДА проверять успех запроса, прежде чем что-либо делать с результатом запроса. например

$result = mysql_query(...); 
if ($result === FALSE) { 
    die(mysql_error()); 
} 

должно быть минимальным минимумом, которое у вас есть во время разработки/тестирования.

if ($helpfaerie2[helpfaerie] == 1) 
       ^--  ^-- 

Вы пренебрегли цитатой здесь. В этом конкретном фрагменте кода некорректный helpfaerie будет анализироваться как константа defined(). Однако это, вероятно, не определено, поэтому PHP «вежливо» автоматически преобразует его в строку для вас и бросает предупреждение.

Затем сразу же после этого у вас есть

{ 
echo "<div id=\"helpfaerie\" 

и выход массивный сгусток многострочного HTML. Но позже вы используете HEREDOC. Почему бы не использовать его здесь тоже? Это спасло бы вас, чтобы избежать всех символов " в вашем выражении эха.

$page = mysql_real_escape_string($page); 
$page = stripslashes($page); 
$page = stripusers($page); 

Это не имеет никакого смысла. Вы бегаете $ page правильно, но тогда вы делаете stripslashes, который по сути НЕЗАВИСИЛ вызов mysql_real_escape_string(). Хотя не полностью точно, вы можете считать m_r_e_s() расширенной версией addslashes(), поэтому вы в основном ускользаете, а затем снова откажитесь от необходимости, оставив вас уязвимыми для SQL-инъекции.

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

$page = stripusers($page); 
$page = mysql_real_escape_string($page); 

m_r_e_s() всегда должен быть ПОСЛЕДНИЙ операция выполняется, прежде чем использовать этот бит данных в Строка запроса. Если вы сделаете что-либо с экранированной строкой после того, как побег был выполнен, вы рискуете уничтожить побег и/или ввести другой способ для инъекционной атаки, чтобы проникнуть внутрь.

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