Я делаю 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);
?>
Результат после нажатия на сохранение сообщения ==> 'Поле'
я ожидал, что он сохранит информацию (сообщение)
ошибка из
$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 и идентифицировать каждое 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-инъекции.
tinyf_post_add($fid, $pid, $uid, $title, $content)
является причиной этого. Вы можете попробовать отладить код и повторить его везде перед операторомreturn
и идентифицировать каждое эхо с помощью номера. Тогда вы узнаете, что последнее увиденное вами эхо привело к его провалу.if (!$qresult) { die(mysqli_error($tf_handle)); }