'. $posts_filas['nombre'].' '.$posts_filas['apellido'].'
У меня есть маленькая система делания posts в моем сайте, который я создаю. Каждый posts я это печатаю с "echo" PHP.
Все функционирует чуда сначала (печатать это). Но проблема появляется, когда я пробую высказывать его этому post мнения.
Какова проблема?
Когда я пишу первый этот комментарий, он оставляет себе Ваш post, но когда я пишу второй комментарий в этом же самом post, случается, что, вместо того, чтобы второй комментарий выходит под первым, он клонирует меня или меня печатает другой post с этим комментарием (второй.) не, если они понимают.
Таблица Ты Являешься лично
------- ------- ---------- --------- -------- --------
ID nombre apellido correo password Fotos
------ ------ --------- -------- -------- ------
Таблица Posts
------- ------- ---------- ---------
Id_post User_Id Titulo Contenido
------ ------ --------- --------
Таблица комментарии
------- --------- ---------- --------- --------
id_com contenido fecha id_usuario id_post
------ -------- --------- -------- --------
Таблица posts_votos
------- --------- ---------- --------- --------
Id Id_post id_usuario puntos fecha
------ -------- --------- -------- --------
Я помещу код:
Поскольку они могут видеть, я делаю консультацию 3 подмостков используя Join.
$query_buscar_posts = mysqli_query($conn, " SELECT
posts.Id_post,
posts.Titulo,
posts.Contenido,
personas.Id,
personas.Fotos,
personas.nombre,
personas.apellido,
posts_votos.id_usuario,
posts_votos.puntos,
posts_votos.id_post,
comentarios.contenido
FROM posts
LEFT JOIN comentarios
ON comentarios.id_post = posts.Id_post AND posts.User_Id =
comentarios.id_usuario
LEFT JOIN posts_votos
ON posts_votos.id_post = posts.Id_post AND posts.User_Id =
posts_votos.id_usuario
LEFT JOIN personas
ON posts.User_Id = personas.Id
WHERE posts.User_Id = $my_id ORDER BY id DESC") or die('Error: ' .
mysqli_error($conn));
while ($posts_filas = mysqli_fetch_array($query_buscar_posts)) {
$id_user = $posts_filas['Id'];
$code = $posts_filas['Id_post'];
$title = $posts_filas['Titulo'];
$contenido = $posts_filas['Contenido'];
# code...
$contenido2 = $posts_filas['contenido'];
$points = $posts_filas['puntos'];
echo '
' . htmlentities($title) . ''
.'' .
htmlentities($contenido) .'' . ''
.''
.''.'
'.$posts_filas['contenido'].'
'
.''
.''
.'';
}
$contar = mysqli_num_rows($query_buscar_posts);
if($contar == 0) {
echo "
";
}
?>
Каждый post, который я печатаю, видит нечто похожее:
Но проблема находится в комментариях. Первый выходит согласно post, что я поместил это ему, и второй печатает мне другой равный post, вещь, которая не была бы должна быть такой.
Хорошие, мы будем видеть, как ты просишь, чтобы я это собрал в двух консультациях, одной для posts и Вашего info, и другой для комментариев. Я присоединяю тебя полный код, возможно, что есть какая-то ошибка синтаксиса, так как я не php, и также не возможно пытаться без подмостков, так что он пытается, и ты комментируешь мне, чтобы видеть, что он выходит у тебя.
<?php
$query_buscar_posts = mysqli_query($conn, " SELECT posts.Id_post, posts.Titulo, posts.Contenido, personas.Id, personas.Fotos,personas.nombre,personas.apellido,posts_votos.id_usuario, posts_votos.puntos,posts_votos.id_post
FROM posts
LEFT JOIN posts_votos
ON posts_votos.id_post = posts.Id_post AND posts.User_Id = posts_votos.id_usuario
LEFT JOIN personas
ON posts.User_Id = personas.Id
WHERE posts.User_Id = $my_id ORDER BY id DESC"
) or die('Error: ' . mysqli_error($conn));
$query_buscar_comentarios = mysqli_query($conn, "SELECT comentarios.contenido
FROM posts
LEFT JOIN comentarios
ON comentarios.id_post = posts.Id_post AND posts.User_Id = comentarios.id_usuario
WHERE posts.User_Id = $my_id
ORDER BY id DESC"
) or die('Error: ' . mysqli_error($conn));
$contar = mysqli_num_rows($query_buscar_posts);
if($contar == 0) {
echo "<div class='No_post'>
<div class='message_empty_post'>Aun no has puesto nada aqui!</div><br>
<div class='contenido_no_post'>
<i class='fa fa-frown-o' aria-hidden='true'></i>
</div>
<div class='footer_empty_post'>
<a href=''>Editar mi perfil</a>
<a href=''>Ir a mi perfil</a>
</div>
</div>";
}else{
while ($posts_filas = mysqli_fetch_array($query_buscar_posts)) {
$id_user = $posts_filas['Id'];
$code = $posts_filas['Id_post'];
$title = $posts_filas['Titulo'];
$points = $posts_filas['puntos'];
$contenido = $posts_filas['Contenido'];
$comentarios=array();
while ($comentarios_filas = mysqli_fetch_array($query_buscar_comentarios)) {
array_push($comentarios,$comentarios_filas['contenido'];);
}
$post='<div style ="margin-bottom:20px;" class="POSTED">'.
'<div class="post_p1">'.
'<div class="Header_post">'.
'<div class="orden_post">'.
'<div class="orden_post_content">'.
'<a href="#"><p class="aaaaa">'. $posts_filas['nombre'].' '.$posts_filas['apellido'].'</p></a>'.
'</div>'.
'<div class="orden_post_content_pic">'.
'<a href="perfil.php?=id"><img width="50px" height="50px" src="'. $posts_filas['Fotos'].'"> </img></a>'.
'</div>'.
'</div>'.
'<div class="boton_eliminar_post">'.
'<a href="javascript:void(0)"><i class="fa fa-minus" aria-hidden="true"></i></a>'.
'</div>'.
'</div>'.
'<div class="post_titulo">' . htmlentities($title) . '</div>'.
'<div class="post_contenido">'.
'<div class="post_contenido_content">' . htmlentities($contenido) .'</div>'.
'</div>'.
'<div class="points_post">'.
'<div class="content_points">'.
'<div class="orden_post">'.
'<div class="orden_post_content">'.
'<a href="javascript:void(0)">'.
'<span>'.
'<i style="font-size:24px;" class="fa fa-sun-o" aria-hidden="true"></i>'.
'</span>'.
'</a>'.
'</div>'.
'<div id="share_link" class="orden_post_content">'.
'<a href="javascript:void(0)" >'.
'<i class="fa fa-share-square" aria-hidden="true"></i>Compartir'.
'</a>'.
'</div>'.
'<div class="orden_post_content">'.
'<a href="javascript:void(0)">'.
'<span>'.$posts_filas['puntos']. '</span>globos'.
'</a>'.
'</div>'.
'</div>'.
'</div>'.
'</div>'.
'<form id="form_comentarios" method="POST">'.
'<ul style="padding:0;">'.
'<li class="alinear_elementos_post">'.
'<input type="hidden" name="eid" value="'.$posts_filas['Id_post'].'">'.
'<img width="35px" height="35px" src="'.$posts_filas['Fotos'].'"> </img> '.
'</li>'.
'<li id="textbox-align" class="alinear_elementos_post">'.
'<input type="text" class="campo_comentario" name="comment_content" rows="2" cols="44" style="text-align:center;" placeholder="Escribe un comentario." required></input>'.
'</li>'.
'<li class="alinear_elementos_post">'.
'<input class="boton_campo_comentario" type="submit" name="comentar"></input>'.
'</li>'.
'</ul>'.
'</form>';
for($x = 0; $x < count($comentarios); $x++) {
$post=$post.'<p class="aaaaa"> '.$comentarios[$x].'</p><br>';
}
$post=$post.'</div>'.
'<div class="post_p2">'.
'<a onclick="('.$posts_filas['Id_post'].')" data-id='.$posts_filas['Id_post'].' href="javascript:void(0)" class="globes_post_giving">'.
'<div class="alinear_boton_balloons">'.
'<img class="img_style" src="img/globo-s.png"></img>'.
'</div>'.
'</a>'.
'<a href="#" class="globes_post_res">#</a>'.
'</div>'.
'</div>';
echo $post;
}
}
?>
Чтобы разделять query на две части, я сделал бы это таким:
Сначала я получаю все posts и Ваши связанные обеты:
// Obtienes todos los posts y sus campos
$query_posts =
"SELECT
*
FROM
posts AS P
JOIN
posts_votos AS PV
ON
P.id_post = PV.id_post
WHERE
P.user_id = $_SESSION[user_id]";
// O de donde quiera que almacenes la identificación del ususario o.O
$result_posts = mysqli_query($conn, $query_posts);
Потом я пробегаю один в один с while. Из-за каждого повторения while, я делаю другую консультацию sql, чтобы получать комментарии и пользователей, связанных с post, который пробегает цикл:
while ($post_row = mysqli_fetch_array($result_posts)) {
$query_comentarios = "
SELECT
*
FROM
comentarios AS C
JOIN
personas AS P
ON
C.id_usuario = P.id_personas
WHERE
C.id_post = $post_row[id_post]";
$result_comentarios = mysqli_query($conn, $query_comentarios);
// Este array almacenará todos los comentarios del post actual del primer while
$array_comentarios = array();
while ( $comentario_row = mysqli_fetch_array($result_comentarios) ) {
array_push($array_comentarios, $comentario_row);
}
// Aquí imprimes el post y sus comentarios
До сих пор уже ты получаешь информацию, сейчас только должен печатать ее. Я вижу, что у тебя есть много html, и там ты вводишь php. В этой точке, где я поместил комментарий "Здесь ты печатаешь" ты разместил бы твой html.
Правда состоит в том, что это spaguetti и не является эстетическим код, может быть считай делать вторую версию того же самого, где ты старался отделять самое возможное html и php.
Что-то, что ты мог бы осуществлять, состоит в том, чтобы отделять действия из-за функций. А именно, создавать функцию, чтобы получать все posts, другую, чтобы получать комментарии:
function get_all_posts(){
$$query_posts =
"SELECT
*
FROM
posts AS P
JOIN
posts_votos AS PV
ON
P.id_post = PV.id_post";
$result_posts = mysqli_query($conn, $query_posts);
return $result_posts;
}
function get_coments( $id_post){
$query_comentarios = "
SELECT
*
FROM
comentarios AS C
JOIN
personas AS P
ON
C.id_usuario = P.id_personas
WHERE
C.id_post = $id_post";
$result_comentarios = mysqli_query($conn, $query_comentarios);
return $result_comentarios;
}
Здесь ты включаешь функции, если ты хочешь отделить их в отдельном файле.
$result_posts = get_all_posts();
while ($post_row = mysqli_fetch_array($result_posts)) {
$result_comentarios = get_coments($post_row[id_post]);
$array_comentarios = array();
while ( $comentario_row = mysqli_fetch_array($result_comentarios) ) {
array_push($array_comentarios, $comentario_row);
}
// Imprimes el post y sus comentarios
}
И как я говорю тебе, уже только ты добавляешь html, который ты хочешь напечатать. Если у тебя есть сомнения, ты комментируешь. Привет.
Заметь: Для того, чтобы каждый комментарий был показан post, который соответствует, проверяет, что, введя это, он это делал с id post в вопросе, а он это напечатает, где он не, если он состоит в том, что он это печатает.
Я издал первый query ($ query_posts), чтобы получать обеты, связанные с post.
Если ты не хочешь отделить твою консультацию SQL в двух консультациях различных SQL, ты должен осуществлять какой-то метод, чтобы обнаруживать "новые сообщения":
$anterior = false;
while ($posts_filas = mysqli_fetch_array($query_buscar_posts)) {
$id_user = $posts_filas['Id'];
$code = $posts_filas['Id_post'];
$title = $posts_filas['Titulo'];
$contenido = $posts_filas['Contenido'];
/* Resto de código de asignación de variables */
if ($anterior !== $code)
$anterior = $code;
/* Aquí enviamos al navegador el HTML sólo del mensaje */
echo '<div style ="margin-bottom:20px;" class="POSTED">...'; /* etc */
}
/* Ahora enviamos el HTML sólo de una respuesta */
echo '<p class="aaaaa"> ',
htmlspecialchars($posts_filas['contenido']),
'</p>'; /* etc */
}
В твоем случае просто осуществлять это, потому что нет "отца", который содержал бы как в сообщение, так и в комментарии, в противоположном случае было бы нужно создавать добавочный код, чтобы противостоять этому недостатку.
Все же есть альтернативный метод, который состоял бы в том, чтобы делать одну первой перемещенная данные, возвращенные твоей консультацией, чтобы сохранять их в ассоциативном массиве, где первый уровень был сообщением, и элемент его содержал комментарии:
$datos = [];
while ($posts_filas = mysqli_fetch_array($query_buscar_posts)) {
$id_user = $posts_filas['Id'];
if (!isset($datos[$id_user])) {
$datos[$id_user]['code'] = $posts_filas['Id_post'];
$datos[$id_user]['title'] = $posts_filas['Titulo'];
/* etc ... */
}
$datos[$id_user]['contenido'][] = $posts_filas['Contenido'];
}
Таким образом у тебя будет элемент в $datos
из-за каждого сообщения и элемента в индексе contenido
из-за каждого комментария. С двумя foreach
(один для сообщений и другого для комментариев каждого сообщения) ты мог бы производить HTML твоего форума.
Id_post
нарушает часть, в которой он возвращается в " pintar" HTML post и só это красит HTML комментария.
– OscarGarcia
15.11.2016, 20:27
foreach
укрытых. Я издал мой ответ, чтобы исправлять тему формуляра, он смущен интерпретировать твой HTML и определять ясно Ваши блоки, потому что tabulació n использованная не я ayudó много. Я издаю: как только у него была пустота я помещаю тебе пример, осуществленный с двумя независимыми консультациями.
– OscarGarcia
16.11.2016, 07:41