Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 06:08:30 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712919#m1712919 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712919#m1712919 <p>Guten Tag.</p> <p>Ich hab ein kleines Problem.</p> <p>Erstmal Allgemein gefasst: -Ich habe ein User der ein Beitrag posten kann. Ebenso kann man ein Kommentar senden. Jeder Beitrag wird mit While angezeigt. Das Problem ist, wenn ich auf ein Button klicke und die Kommentare des jeweiligen Beitrags sehen möchte (sagen wir mal, die Kommentare von Beitrag 3) dann wird dies angezeigt jedoch bei dem Beitrag 1.</p> <p><a href="http://test.liscon.bplaced.net/test.php" rel="nofollow noopener noreferrer">http://test.liscon.bplaced.net/test.php</a></p> <p>Macht euch ein Bild drauß. Drückt bei der Post-Id 3 den Button, da nur da Kommentare vorhanden sind. Bei den anderen passiert nichts da keine Kommentare eingetragen sind.</p> <p>Sitze seit knapp 2 Tagen an dem Problem & hab alle Methoden ausprobiert. Mir fällt nichts mehr ein bin sehr verwirrt.</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token keyword">include</span> <span class="token string single-quoted-string">'config/connect.php'</span><span class="token punctuation">;</span> <span class="token variable">$sql</span> <span class="token operator">=</span> <span class="token string double-quoted-string">" SELECT user.id, user.username, u_post.p_id, u_post.post, comments.u_id, comments.p_id AS commentid, comments.comment, comments.date_comment FROM u_post LEFT JOIN user ON u_post.u_id = user.id LEFT JOIN comments ON user.date_insert = comments.date_comment LIMIT 5"</span><span class="token punctuation">;</span> <span class="token variable">$stmt</span> <span class="token operator">=</span> <span class="token variable">$pdo</span><span class="token operator">-></span><span class="token function">prepare</span><span class="token punctuation">(</span><span class="token variable">$sql</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$stmt</span><span class="token operator">-></span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$stmt</span><span class="token operator">-></span><span class="token function">errorInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'show'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$post_nummer</span> <span class="token operator">=</span> <span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'post-id'</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token variable">$sql2</span> <span class="token operator">=</span> <span class="token string double-quoted-string">" SELECT comments.u_id, comments.p_id, comments.comment, u_post.p_id, u_post.u_id, u_post.post FROM comments LEFT JOIN u_post ON comments.p_id = u_post.p_id WHERE comments.p_id = :p_id"</span><span class="token punctuation">;</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$pdo</span><span class="token operator">-></span><span class="token function">prepare</span><span class="token punctuation">(</span><span class="token variable">$sql2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">BindParam</span><span class="token punctuation">(</span><span class="token string single-quoted-string">':p_id'</span><span class="token punctuation">,</span> <span class="token variable">$post_nummer</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span><span class="token variable">$result</span><span class="token operator">-></span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">print_r</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token operator">-></span><span class="token function">errorInfo</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token variable">$stmt</span><span class="token operator">-></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<form action="" method="POST">'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<br>Post-Id: '</span><span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'p_id'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'<br>'</span> <span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'post'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'<br>'</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'show'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row2</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Kommentar: '</span> <span class="token operator">.</span> <span class="token variable">$row2</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'comment'</span><span class="token punctuation">]</span> <span class="token operator">.</span><span class="token string single-quoted-string">'<br>'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<p><input type="submit" name="show"></p>'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<p><input type="hidden" name="post-id" value="'</span> <span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'p_id'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'"></p>'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'</form>'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token delimiter important">?></span></span> </code></pre> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 10:08:03 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712926#m1712926 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712926#m1712926 <p>Guten morgen,</p> <p>Ohne jetzt die ganzen HTML sachen zu berichtigen, tippe ich auf einen kleinen Logik Fehler hier:</p> <blockquote> <pre><code class="block language-php"> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row</span> <span class="token operator">=</span> <span class="token variable">$stmt</span><span class="token operator">-></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<form action="" method="POST">'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<br>Post-Id: '</span><span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'p_id'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'<br>'</span> <span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'post'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'<br>'</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token keyword">isset</span><span class="token punctuation">(</span><span class="token variable">$_POST</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'show'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment">// Hier mal versuchen die post-id abzufragen um die kommentare bei der richtigen id auszugenben. also `&& $_POST['post-id'] === $row['p_id']`</span> <span class="token punctuation">{</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$row2</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">fetch</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'Kommentar: '</span> <span class="token operator">.</span> <span class="token variable">$row2</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'comment'</span><span class="token punctuation">]</span> <span class="token operator">.</span><span class="token string single-quoted-string">'<br>'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<p><input type="submit" name="show"></p>'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'<p><input type="hidden" name="post-id" value="'</span> <span class="token operator">.</span> <span class="token variable">$row</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'p_id'</span><span class="token punctuation">]</span> <span class="token operator">.</span> <span class="token string single-quoted-string">'"></p>'</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token string single-quoted-string">'</form>'</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token operator">?</span><span class="token operator">></span> </code></pre> </blockquote> <p>Gruß<br> Jo</p> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 10:15:40 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712927#m1712927 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712927#m1712927 <p>Dein Fehler kann verschiedene Ursachen haben:</p> <ol> <li>HTML</li> <li>PHP</li> <li>DB Design</li> <li>SQL</li> </ol> <p>Das würde ich zur weiteren Vorgehensweise zunächst ersteinmal einschränken. MfG</p> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 10:46:23 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712930#m1712930 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712930#m1712930 <p>Hallo j4nk3y,</p> <p>yup, das ist der Punkt. Man darf die Kommentare nur bei dem Beitrag einlesen und ausgeben, zu dem sie gehören.</p> <p>@@portseven,</p> <p>du solltest deine SQLs nochmal überarbeiten. Im ersten SQL verstehe ich diesen Join nicht:</p> <pre><code class="block">LEFT JOIN comments ON user.date_insert = comments.date_comment </code></pre> <p>Warum verknüpfst Du die Kommentare mit dem gleichen Datum? Du verwendest die so ermittelten Spalten nicht, UND du läufst Gefahr, einen Post doppelt anzuzeigen wenn mehr als ein Kommentat zum Tag da ist. Die Kommentare zum Post fragst Du eh mit einer eigenen Query ab.</p> <p>Im zweiten Select verstehe ich den JOIN mit u_post nicht. Einen JOIN mit der User-Tabelle wäre sinnvoll, um den Namen des Kommentators anzeigen zu können.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 14:10:37 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712944#m1712944 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712944#m1712944 <p>Jetzt bin ich perplex. Es hat so geklappt mit der Abfragen...aber das verstehe ich nicht. Ich frage doch lediglich nur ob die Post gleich ist wie die Row ID. Es hat ja nichts mit der Position zu tun sondern ob der Wert mit dem anderen Identisch ist.</p> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 14:23:22 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712946#m1712946 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712946#m1712946 <p>Hallo</p> <blockquote> <p>Jetzt bin ich perplex. Es hat so geklappt mit der Abfragen...aber das verstehe ich nicht. Ich frage doch lediglich nur ob die Post gleich ist wie die Row ID. Es hat ja nichts mit der Position zu tun sondern ob der Wert mit dem anderen Identisch ist.</p> </blockquote> <p>Das passiert bei der Abfrage, aber bei der Ausgabe prüfst du da nichts.</p> <p>Nach Ausführung der beiden Abfragen gehst du das Ergebnis der ersten Abfrage in einer Schleife Zeile für Zeile durch. Im ersten Durchlauf, also beim ersten Datensatz des ersten Ergebnisses, gehst du nun unter der Bedingung, dass <code>$_POST['show']</code> existiert, in die Schleife, um die Ergebniszeilen der zweiten Abfrage auszugeben. Du prüfst bei dieser Ausgabe aber nicht, zu welchem Datensatz der ersten Abfrage die Ergebnisse der zweiten Abfrage gehören.</p> <p>Das ist, was <a href="/users/6547" class="mention registered-user" rel="noopener noreferrer">@Rolf B</a> gleich <a href="https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712930#m1712930" rel="noopener noreferrer">zu Beginn seines Postings</a> anmerkte.</p> <p>Tschö, Auge</p> <div class="signature">-- <br> Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.<br> Toller Dampf voraus von Terry Pratchett </div> Ergebnis wird im falschen Bereich angezeigt. PHP (mysql) Tue, 30 Jan 18 14:23:45 Z https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712947#m1712947 https://forum.selfhtml.org/self/2018/jan/30/ergebnis-wird-im-falschen-bereich-angezeigt-php-mysql/1712947#m1712947 <p>Hey,</p> <blockquote> <p>Jetzt bin ich perplex. Es hat so geklappt mit der Abfragen...aber das verstehe ich nicht. Ich frage doch lediglich nur ob die Post gleich ist wie die Row ID. Es hat ja nichts mit der Position zu tun sondern ob der Wert mit dem anderen Identisch ist.</p> </blockquote> <p>Die Position ändert sich ja mit jedem Iterations Schritt.</p> <p>Geh mal die Schleifen Schritt für Schritt in Gedanken durch, und stell dir die selbe Frage wie das was in 'if()' steht. Dann sollte es klar werden.</p> <p>Du Fragst ja nur ob es angezeigt werden soll, du fragst aber nicht, ob dies die richtige Stelle (iteration) ist wo es angezeigt werden soll.</p> <p>Gruß<br> Jo</p>