2012-11-02 4 views
-2

저는 PHP와 MySQL에 다소 익숙합니다. 나는 자습서를 통해 가고 주제 편집 버튼을 클릭 할 때 아래에 오류 메시지가 나타납니다. 내가 관련 코드를 모두 포함 할 것입니다. 표시되는 오류가 connection.php 페이지에서 인쇄되므로 데이터베이스 연결에 문제가 있음을 확신합니다.구문 오류 가져 오기, 모든 코드 제공

오류 :

Database connection failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1

데이터베이스 :

I have 1 database(widget_corp) with 3 tables 
    Tables: 
    subjects(id, menu_name, position, visible), 
    pages(id, subject_id, menu_name, position, visible, content), 
    users(id, username, hashed_password) //this one is not used yet 

소스 코드 : functions.php에서

<?PHP require_once("includes/connection.php"); ?> 
    <?PHP require_once("includes/functions.php"); ?> 
    <?PHP 
    if(isset($_POST['submit'])) { 
    $errors = array(); 
    $required_fields = array('menu_name', 'position', 'visible'); 
    foreach($required_fields as $fieldname) { 
    if(!isset($_POST[$fieldname]) || (empty($_POST[$fieldname]) && !is_numeric($_POST[$fieldname]))) { 
    $errors[] = $fieldname; 
    } 
    } 
    $fields_with_lengths = array('menu_name' => 30); 
    foreach($fields_with_lengths as $fieldname => $maxlength) { 
    if(strlen(trim(mysql_prep($_POST[$fieldname]))) > $maxlength) { 
    $errors[] = $fieldname; } 
    } 
    if (empty($errors)) { 
    // Perform Update 
    $id = mysql_prep($_GET['subj']); 
    $menu_name = mysql_prep($_POST['menu_name']); 
    $position = mysql_prep($_POST['position']); 
    $visible = mysql_prep($_POST['visible']); 

    $query = "UPDATE subjects SET menu_name = '{$menu_name}', position = {$position}, visible = {$visible} WHERE id = {$id}"; 
    $result = mysql_query($query, $connection); 
    if(mysql_affected_rows() == 1) { 
    // Sucess 
    } else { 
    // Failed 
    } 
    } else { 
    } // end: if (isset($_POST['submit'])) 
    } 
    ?> 
    <?PHP find_selected_page(); ?> 

    <?PHP include("includes/header.php"); ?> 

    <table id="structure"> 
    <tr> 
    <td id="navigation"> 
    <?PHP echo navigation($sel_subject, $sel_page); ?> 
    </td> 
    <td id="page"> 
    <h2>Edit Subject: <?PHP echo $sel_subject['menu_name']; ?></h2>   
    <form action="edit_subject.php?subj="<?PHP echo urlencode($sel_subject['id']); ?>" method="post"> 
    <p>Subject name: 
    <input type="text" name="menu_name" value="<?PHP echo $sel_subject['menu_name']; ?>" id="menu_name" /> 
    </p> 
    <p>Position: 
    <select name="position"> 
    <?PHP 
    $subject_set = get_all_subjects(); 
    $subject_count = mysql_num_rows($subject_set); 
    // $subject_count +1 b/c we are adding a subject 
    for($count=1; $count <= $subject_count+1; $count++) { 
    echo "<option value=\"{$count}\""; 
    if ($sel_subject['position'] == $count) { 
    echo " selected"; 
    } 
    echo ">{$count}</option>"; 
    } 
    ?> 
    </select> 
    </p> 
    <p>Visible: 
    <input type="radio" name="visible" value="0"<?PHP 
    if($sel_subject['visible'] == 0) { echo " checked"; } 
    ?>/> No 
    &nbsp; 
    <input type="radio" name="visible" value="1" <?PHP 
    if($sel_subject['visible'] ==1) {echo " checked"; } 
    ?> /> Yes 
    </p> 
    <input type="submit" name="submit" value="Edit Subject" /> 
    </form> 
    <br /> 
    <a href="content.php">Cancel</a> 
    </td> 
    </tr> 
    </table> 
    <?PHP require("includes/footer.php"); ?> 

적용 기능

function redirect_to($location = NULL) { 
    if ($location != NULL) { 
    header("Location: {$location}"); 
    exit; 
    } 
    } 

    function navigation($sel_subject, $sel_page) { 
    $output = "<ul class=\"subjects\" >"; 
    $subject_set = get_all_subjects(); 
    while ($subject = mysql_fetch_array($subject_set)) { 
    $output .= "<li"; 
    if ($subject["id"] == $sel_subject["id"]) {$output .= " class=\"selected\"";} 
    $output .= "><a href=\"edit_subject.php?subj=" . urlencode($subject["id"]) . "\">{$subject["menu_name"]}</a></li>"; 

    $page_set = get_pages_for_subject($subject["id"]); 
    $output .= "<ul class=\"pages\">"; 
    while ($page = mysql_fetch_array($page_set)) { 
    $output .= "<li"; 
    if ($page['id']==$sel_page['id']) {$output .= " class=\"selected\"";} 
    $output .= "><a href=\"content.php?page=" . urlencode($page["id"]) . "\">{$page["menu_name"]}</a></li>"; 
    } 
    $output .= "</ul>"; 
    } 
    $output .= "</ul>"; 
    return $output; 
    } 

    function mysql_prep($value) { 
    $magic_quotes_active = get_magic_quotes_gpc(); 
    $new_enough_php = function_exists("mysql_real_escape_string"); // i.e. PHP >= v4.3.0 
    if ($new_enough_php) { //PHP v4.3.0 or higher 
    // undo any magic quote effects so mysql_real_escape_string can do the work 
    if($magic_quotes_active) { $value = stripslashes($value); } 
    $value = mysql_real_escape_string($value); 
    } else { //before PHP v4.3.0 
    // if magic quotes aren't already on then add slahses manually 
    if(!$magic_quotes_active) { $value = addslashes($value); } 
    // if magic quotes are active, then the slashes already exist 
    } 
    return $value; 
    } 

    function get_subject_by_id($subject_id){ 
    global $connection; 
    $query = 'SELECT * FROM `subjects` WHERE `id`= ' . (int)$subject_id . 'LIMIT 1'; 
    $result_set = mysql_query($query, $connection); 
    confirm_query($result_set); 
    // REMEMBER: 
    //if no rowes are returned, fetch array will return false 
    if ($subject = mysql_fetch_array($result_set)) { 
    return $subject; 
    } else { 
    return NULL; 
    } 
    } 

    function get_pages_for_subject($subject_id) { 
    global $connection; 
    $query = "Select * 
    FROM pages 
    WHERE subject_id={$subject_id} 
    ORDER BY position ASC"; 

    $pages_set = mysql_query($query, $connection); 
    confirm_query($pages_set); 
    return $pages_set; 
    } 

    function get_page_by_id($page_id){ 
    global $connection; 
    $query = 'SELECT * FROM `pages` WHERE `id` = ' . (int)$page_id . ' LIMIT 1'; 
    $result_set = mysql_query($query, $connection); 
    confirm_query($result_set); 
    // REMEMBER: 
    //if no rowes are returned, fetch array will return false 
    if ($subject = mysql_fetch_array($result_set)) { 
    return $subject; 
    } else { 
    return NULL; 
    } 
    } 

    function get_all_subjects() { 
    global $connection; 
    $query = "SELECT * FROM subjects ORDER BY position ASC"; 
    $subject_set = mysql_query($query, $connection); 
    confirm_query($subject_set);  
    return $subject_set;     
    } 

    function find_selected_page() { 
    global $sel_subject; 
    global $sel_page; 

    if (isset($_GET['subj'])) { 
    $sel_subject = get_subject_by_id($_GET['subj']); 
    $sel_page = NULL; 
    } else if (isset($_GET['page'])) { 
    $sel_subject = NULL; 
    $sel_page = get_page_by_id($_GET['page']); 
    } else{ 
    $sel_subject = NULL; 
    $sel_page = NULL; 
    } 
    } 

    function confirm_query($result_set) { 
    if (!$result_set) { 
    die("Database connection failed: " . mysql_error()); 
    } 
    } 
012 3,516,

포함 된 페이지

header.php 

    <html> 
    <head> 
    <title>Widget Corp</title> 
    <link href="stylesheets/public.css" media="all" rel="stylesheet" type="text/css" /> 
    </head> 
    <body> 
    <div id="header"> 
    <h1>Widget Corp</h1> 
    </div> 
    <div id="main"></div></body></html> 

footer.php

</div> 
    <div id="footer">Copyright 2007, Widget Corp</div> 
    </body> 
    </html> 
    <?PHP 
    if (isset($connection)){ 
    mysql_close($connection); 
    } 
    ?> 

connection.php

<?PHP 
    require("constants.php"); 
    $connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS); 
    if (!$connection) { 
    die("Database connection failed: " . mysql_error()); 
    } 
    $db_select = mysql_select_db(DB_NAME, $connection); 
    if (!$db_select) { 
    die("Database selection failed: " . mysql_error()); 
    } 
    ?> 

constants.php

그것은 기능에 그렇게 보이는
<?PHP 
    // Database Constants 
    define("DB_SERVER", "localhost"); 
    define("DB_USER", "root"); 
    define("DB_PASS", "********"); 
    define("DB_NAME", "widget_corp"); 
    ?> 
+1

전체 코드가 아닌 SQL 쿼리 만 필요합니다. – deceze

+1

우리는 당신의 일을해야합니까? – slash28cu

+1

@Jason 그건 코드에 있고, MySQL의 오류는 아닙니다. – deceze

답변

5

.PHP, 당신은 라인을

$query = 'SELECT * FROM `subjects` WHERE `id`= ' . (int)$subject_id . 'LIMIT 1'; 

이없고 공간이 LIMIT 전에 존재하지 않는다. 'LIMIT 1'' LIMIT 1'으로 변경하고 결과를 확인하십시오.

더 빨리 이러한 오류를 발견하려면 오류 검사의 좀 작은 줄을 추가해야합니다

$result_set = mysql_query($query, $connection); 
if (!$result_set) { 
    echo "mysql_query() error: ", mysql_error($connection), "\nquery was: $query\n"; 
    die(); 
} 

그런 다음뿐만 아니라 신속하게 오류를 발견 할 수 있습니다 당신이 생성 한 SQL을 볼 수 있습니다.

+0

나는 그 변화를 여러 번했다는 것을 맹세 할 수 있었다. 실제 오류가 수정되었습니다. 감사. –

+0

@hakre 그냥 내 대답을 편집하는 대신 의견을 추가하는 대신 왜 내 대답을 편집했는지 궁금해.귀하의 편집은 도움이되지만 내 대답에 도움이되는 정보를 추가 한 이유가 궁금합니다. –

+0

@jdwire : 답변을 더 완전하게 만들고 값을 추가하기 만하면됩니다. 여전히 귀하의 대답은 btw입니다. 그러나 일부 내용은 다음을 참조하십시오. http://stackoverflow.com/faq#editing – hakre