добавление информации в базу данных с помощью php [closed]

1

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

на странице управления: 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');
}

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

Апифик:

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);

?>

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

Изображение 174551

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

ошибка из

$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 и идентифицировать каждое эхо с помощью номера. Тогда вы узнаете, что последнее увиденное вами эхо привело к его провалу.
  • 1
    базовая отладка: никогда не выводить фиксированное (и совершенно бесполезное) сообщение «ошибка», когда БД может сообщить вам, почему произошла ошибка. if (!$qresult) { die(mysqli_error($tf_handle)); }
Показать ещё 4 комментария
Теги:
mysqli

1 ответ

1
Лучший ответ

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

1-е предложение:

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

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню