2015-07-07 2 views
1

Я делаю API для простого форума ,, Теперь пытается добавить информацию в базу данных и сохранить его (экономия пост)добавления информации в базу данных с PHP

на странице управления: savePost.php

<?php 

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

if(!isset($_GET['id'])) 
{ 
    die('bad access'); 
} 
$_id = (int)$_GET['id']; // to avoid injection and typing codes in url 
if ($_id == 0) 
{ 
    die('Bad Access'); 
} 
require_once('fourmsAPI.php'); 
require_once('postsAPI.php'); 

$forum = tinyf_forums_get_by_id($_id); 
if(!$forum){ 
    tinyf_db_close(); //important 
    die('Bad Forum ID'); 
} 



if(!isset($_POST['title']) or (!isset($_POST['content']))) { 
     die('bye'); 
} 

require_once('fourmsAPI.php'); 


$result = tinyf_post_add($_id,0,0,trim($_POST['title']),trim($_POST['content'])) ; 

tinyf_db_close(); 

if($result){ 
     die('sucess'); 
} 
else{ 
     die('Failed'); 
} 

результат =====> Не удалось

Apifile:

postsAPI.php

<?php 
//Posts APIs 
function tinyf_posts_get($extra ='') 
{ 
    global $tf_handle; 
    $query = sprintf("SELECT * FROM `posts` %s ",$extra); 
    $qresult = mysqli_query($tf_handle, $query); 

    if (!$qresult) 
     return NULL; 
    $recount = mysqli_num_rows($qresult); 
    if ($recount == 0) 
     return NULL ; 
    $posts = array(); 
    for($i = 0 ; $i < $recount ; $i++) 
     $posts[count($posts)] = mysqli_fetch_object($qresult); 
    //mysql_free_result($qresult); 
    return $posts; 

} 

function tinyf_posts_get_by_id($pid) 
{ 
    $id = (int)$pid; 
    if($id == 0) 
     return NULL ; 
    $result = tinyf_posts_get('WHERE `id` ='.$id); 
    if($result == NULL) 
     return NULL; 
    $post = $result[0]; 
    return $post; 
} 

//get result is array() 


function tinyf_posts_get_reply_by_id($pid) 
{ 
    $id = (int)$pid; 
    if($id == 0) 
     return NULL ; 
    $result = tinyf_posts_get('WHERE `pid` ='.$id); 
    if($result == NULL) 
     return NULL; 

    return $post; 
} 



function tinyf_post_add($fid,$pid,$uid,$title,$content) 
{ 

    global $tf_handle; 
    $_fid = (int)$fid; 
    $_pid = (int)$pid; 
    $_uid = (int)$uid; 

    if(($_fid == 0) /* || ($_uid == 0)*/){ 
     return false ; 
    } 

    if ((empty($title)) || (empty($content))) 
      return false; 

    $n_title = mysqli_real_escape_string($tf_handle, strip_tags($title)); 
    $n_content = mysqli_real_escape_string($tf_handle, strip_tags($content)); 

    $query = sprintf("INSERT INTO `users` VALUE(NULL,'%d','%d','%d','%s','%s')",$_fid,$_pid,$_uid,$n_title,$n_content); 

    $qresult = mysqli_query($tf_handle, $query); 
    if(!$qresult) 
     return false; 
    return true; 
} 

function tinyf_posts_delete_reply($pid) 
{ 
    global $tf_handle; 
    $id = (int)$pid; 
    if($id == 0) 
     return false ; 

    $query = sprintf ("DELETE FROM `posts` WHERE `pid`= %d",$id); 

    $qresult = mysqli_query($tf_handle, $query); 
    if(!$qresult) 
     return false; 

    return true; 

} 

function tinyf_posts_delete($pid) 
{ 
    global $tf_handle; 
    $id = (int)$pid; 
    if($id == 0) 
     return false ; 

    $query = sprintf ("DELETE FROM `posts` WHERE `id`= %d",$id); 
    tinyf_posts_delete_reply($pid); 
    $qresult = mysqli_query($tf_handle, $query); 
    if(!$qresult) 
     return false; 

    return true; 

} 


function tinyf_posts_update($_id,$_fid = 0,$_pid = 0 ,$_uid = 0,$title = NULL,$content = NULL) 
{ 
    global $tf_handle; 
    //if pid == 0 -----> mawdo3 
    $id = (int)$_id; 
    $fid = (int)$_fid; 
    $pid = (int)$_pid; 
    $uid = (int)$_uid; 
    if($id <=0){ 
     return false; 
    } 
    $post = tinyf_posts_get_by_id($id); 
    if(!$post) 
     return false; 
    if ((empty($title)) && (empty($content)) && ($post ->fid == $fid) && 
     ($post->pid == $pid) && ($post->uid == $uid)){ 
      return false; 
     } 

    if($post->pid <= 0){ 
     if($_fid == 0) 
     { 
      $_fid = $post ->fid ; 
     } 
     $_pid = 0; 

    }  
    else 
    { 
     $_fid = 0;           

     if($_pid <= 0){ 
      $_pid = $post -> pid; 
     } 
    } 
    if($_uid <= 0){ 

     $_uid = $post ->uid;   
    } 

    $fields = array() ; 
    $query = 'UPDATE `posts` SET ' ; 

    if(!empty($title)) 
     { 
      $n_title = mysqli_real_escape_string($tf_handle, strip_tags($title)); 

      $fields[count($fields)] = "`title` = '$n_title'"; 
     } 

    if(!empty($content)) 
     { 
      $n_content = mysqli_real_escape_string($tf_handle,strip_tags($name)); 
      $fields[count($fields)] = "`content` = '$n_content'"; 
     } 

    $fields[count($fields)] = "`fid` = '$_fid'"; 
    $fields[count($fields)] = "`pid` = '$_pid'"; 
    $fields[count($fields)] = "`uid` = '$_uid'"; 

    $fcount = count($fields); 

    for($i = 0; $i < $fcount ; $i++) 
    { 
     $query .= $fields[$i]; 
     if($i != ($fcount - 1)) // i = 0 that the first element in the array .. 2 will be - 1 last 3shan hwa by3ed el array mn wa7ed :D 
      $query .=' , '; 
    } 

    $query .= ' WHERE `id` = '.$id; 

    $qresult = mysqli_query($tf_handle, $query); 
    if(!$qresult) 
     return false; 
    else 
     return true; 

} 



error_reporting(E_ALL); 
ini_set('display_errors', 1); 

?> 

Результат после нажатия на кнопку Сохранить пост является ==> 'Поле'

The Result after saving post is ==> 'Field'

я ожидал, что он сохранит информацию (пост)

ошибка из

$query = sprintf("INSERT INTO `users` VALUE(NULL,'%d','%d','%d','%s','%s')",$_fid,$_pid,$_uid,$n_title,$n_content); 

$qresult = mysqli_query($tf_handle, $query); 
if(!$qresult) 
{ 
    echo "3"; 
    return false; 
} 

Я думаю, что функция tinyf_post_add() вызывает это или потому, что я скопировал некоторые функции из моего другого файла API

+1

Конечно, 'tinyf_post_add ($ fid, $ pid, $ uid, $ title, $ content)' вызывает это. Вы можете попробовать отладить код и повторить всюду перед оператором 'return' и идентифицировать каждое эхо с номером. Тогда вы узнаете, что последнее эхо, которое вы видите, привело к его провалу. – fsacer

+1

Основная отладка: никогда не выводить фиксированное (и совершенно бесполезное) сообщение об ошибке, когда БД может СКАЧАТЬ вас, почему это не удалось. 'if (! $ qresult) {die (mysqli_error ($ tf_handle)); } ' –

+0

Во-первых, посмотрите на правильный синтаксис INSERT http://www.w3schools.com/sql/sql_insert.asp, также если вы не хотите вставлять все столбцы, просто укажите те, которые вы хотите в скобках, перед VALUES(). Во-вторых, вы можете использовать функцию 'prepare()' http://php.net/manual/en/mysqli.prepare.php, чтобы правильно ухаживать за SQL-инъекцией. – fsacer

ответ

1

Это те шаги, которые помогли ответить на вопрос:

первое предложение:

Конечно tinyf_post_add($fid, $pid, $uid, $title, $content) является причиной этого. Вы можете попробовать отлаживать код и повторять всюду перед оператором return и идентифицировать каждый номер echo с номером. Тогда вы узнаете, что последний echo, который вы видите, заставил его потерпеть неудачу.

Предложение от @MarcB

Он предложил использовать более полезную отладочную информацию, которая может быть возвращена if (!$qresult) { die(mysqli_error($tf_handle)); }, чтобы получить больше полезную информацию о том, что происходит в стороне MySQL.

Обратная связь

ошибка была найдена в строке SQL заявление. Ошибка заключалась в том, что количество столбцов в инструкции SQL было неправильным.

второе предложение
Во-первых, обратите внимание на правильное INSERT syntax, а также, если вы не хотите, чтобы вставить все столбцы просто указать те, которые вы хотите в скобках перед VALUES() части. Во-вторых, вы могли бы правильно использовать функцию тотального ввода prepare().

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