Ist auf Localhost mit Xampp.
Aber wozu brauchst du denn ein Link wenn ich Fragen darf? Code ist ja angegeben.^^
Ist auf Localhost mit Xampp.
Aber wozu brauchst du denn ein Link wenn ich Fragen darf? Code ist ja angegeben.^^
Guten Tag!
Die Post-Nummer 48 hat 5 Kommentare. Ich möchte gerne, wenn der Button "Show_Comment" gedrückt wird, alle Kommentare anzeigen lassen bei dem Post 48.
Das Problem ist jetzt das er mir die Kommentare ganz oben anzeigt und nicht bei dem Post.
Damit ihr ein kleinen Einblick habt was ich meine:
Verstehe jetzt nicht was ich falsch mache...
Code:
<!-- Show all Comments where Post-id = comment_p_id -->
<?php
if(isset($_POST['show_comments'])) {
$pids = $_POST['comment_pid'];
$sql3 =
"SELECT
comments.p_id,
comments.u_id,
comments.comment,
comments.date_comment
FROM comments
WHERE p_id = :p_id";
$com = $pdo->prepare($sql3);
$com->BindParam(':p_id', $pids);
if(!$com->execute()) {
print_r($com->errorInfo());
}
} ?>
<?php while($row = $stmt->fetch()) { ?>
<form id="form" method="POST">
<a href="profil_method2.php?u=<?php echo $row['u_id'];?>">Go to Profil</a>
<?php echo '<img src="'. $row['image'] . '"/>'; ?>
<?php echo '<br>Name: ' . $row['username'] . '<br><br>'; ?>
<?php echo 'Post-Id' . $row['p_id'] . '<br><br>'; ?>
<?php echo '<p><input type="hidden" name="pid" value="'.$row['p_id'].'"></p>'; ?>
<?php echo '<p><input type="submit" name="show_comments" value="show_comments"></p>'; ?>
<?php echo '<p><input type="text" name="comment"></p>'; ?>
<?php echo '<p><input type="submit" name="send_comment" id="submit" value="send_comment"></p>'; ?>
<?php
if(isset($_POST['show_comments'])) {
while($row2 = $com->fetch()) {
echo '<table border="1">';
echo '<tr><td>U-Id</td> <td>Kommentar</td> <td>Datum</td> </tr>';
echo '<tr>';
echo '<td>' . $row2['u_id'] . '</td>';
echo '<td>' . $row2['comment'] . '</td>';
echo '<td>' . $row2['date_comment'] . '</td>';
echo '</tr>';
}
}
echo '</table>';
?>
<?php echo '<p><input type="hidden" name="comment_pid" value="'.$row['p_id'].'"></p>'; ?>
</form>
<?php } ?>
Alles anzeigen
Genau so geht es auch. Aber ich wollte nur Stef damit sagen das es mit der Session_id nicht richtig klappt bei mir (Siehe Video).
So hab ich es jetzt auch drin im Skript wie du es gemacht hast, und es läuft alles super.
Ich habe mal extra ein Video gemacht damit du dir ein Bild draus machen kannst.
Nehmen wir mal an die $_SESSION['id'] bei mir ist grad 10.
So. Jetzt machen wir wie du es gesagt hast, ich füge die $_SESSION['id'] ein bzw übertrage die mal.
Das Problem ist nun, dass jeder User der etwas gepostet ha, die ID 10 hat. D.h ich komme immer auf das Profil von der Session-id 10. Nicht vom User. Ich sage dem Link ja das beim Aufrufen die Session-id aufgerufen wird, ich bin ja eingeloggt unter der id 10. Ich komme also immer auf mein Profil, nicht auf denjenigen dessen Post es ist.
Tag.
hab grad ein User-Profile geschrieben und mir sind dann 2 Dinge aufgefallen die ich euch gerne Fragen möchte.
1. Wie überträgt Ihr die User-Id?
Also Startseite = index.php. In der Index.php sind alle POST's von Leuten zu sehen.
Jetzt soll jeder Post einen Link haben , dass wenn man drauf klickt ein User-Profile kommt wie z.b user-profile.php?user-id=10.
Da ich sowieso alles selektiert habe um die Posts anzeigen zu lassen habe ich die User-Id so ermittelt bzw übertragen.
$_SESSION['user-id'] = $row['u_id'];
Da ich bei meinem user-profile.php nicht wieder auf $row['u_id'] zugreifen kann habe ich es einfach zu SESSION['user-id'] übertragen. Ist es falsch oder iwie unsicher? Oder wie hättet ihr das gemacht?
2.
Ich habe jetzt bei meinem user-profile eine kleine simple Abfrage gemacht:
Wie kann ich jetzt $_GET sicher übergeben?
index.php (Habe jetzt $row['post'] usw weggelassen da es keine Rolle spielt bei der Frage)
$sql = "SELECT u_id, username, date FROM user";
$stmt = $pdo->prepare($sql);
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
while($row = $stmt->fetch()) {
<?php $_SESSION['ident'] = $row['u_id']; ?>
<a href="profile.php?user-id=<?php echo $_SESSION['ident'];?>">Hallo</a>
<?php echo '' . $row['username'] . ''; ?>
<?php echo '<p>' . $row['date'] . '</p>'; ?>
<?php } ?>
Alles anzeigen
user-profile.php
if(isset($_GET["user-id"])) {
$uid = $_GET["user-id"];
$sql =
"SELECT * FROM user WHERE id = :u_id LIMIT 1";
$stmt = $pdo->prepare($sql);
if(!$stmt) {
print_r($stmt->errorInfo());
}
$stmt->BindParam(':u_id', $uid);
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
}
$row = $stmt->fetch();
if($row > 0) {
echo '<img src="data:image/' . $row['im_type'] . ';base64,' . base64_encode($row['image']) . '"/>';
echo $row['username'];
}
}
?>
Alles anzeigen
Tag,
ich möchte nach Absenden eines Buttons etwas in die Datenbank senden wobei die Seite nicht neu geladen werden soll!
Problem ist, die Seite ladet sich immernoch neu & nach dem Eintrag soll er ja zu div#result gehen. Da geht er auch nicht hin.
<?php
if(isset($_POST['submit'])) {
$msg = '';
$pid = $_POST["pid"];
$comment = $_POST['comment'];
$uid = 2;
$sql = 'INSERT INTO comments (p_id, u_id, comment) VALUES (:p_id, :u_id, :comment)';
$stmts = $pdo->prepare($sql);
if(!$stmts) { echo $stmts->errorInfo(); }
$stmts->BindParam(':p_id', $pid);
$stmts->BindParam(':u_id', $uid);
$stmts->BindParam(':comment', $comment);
if(!$stmts->execute()) {
echo $stmts->errorInfo();
} else {
$msg = 'Eingefügt';
}
}
?>
<?php while($row = $stmt->fetch()) { ?>
<form action="world_two.php" id="form" method="POST">
<?php echo '<img src="data:image/' . $row['im_type'] . ';base64,' . base64_encode($row['image']) . '"/>'; ?>
<?php echo '' . $row['username'] . ''; ?>
<?php echo '<p>' . $row['date'] . '</p>'; ?>
<?php echo '<p><input type="hidden" name="pid" value="'.$row['p_id'].'"></p>'; ?>
<?php echo '<p><input type="text" name="comment"></p>'; ?>
<?php echo '<p><input type="submit" name="submit" id="submit"></p>'; ?>
</form>
<?php } ?>
<span id="result">
<?php if(isset($msg)) { echo $msg; } ?>
</span>
<script src="jQuery/jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="js/global.js"></script>
Alles anzeigen
jQuery:
Ebenso habe ich diese Methode probiert jedoch ohne Erfolg.
<?php while($row = $stmt->fetch()) { ?>
<form action="test.php" id="form" method="POST">
<?php echo '<img src="data:image/' . $row['im_type'] . ';base64,' . base64_encode($row['image']) . '"/>'; ?>
<?php echo '' . $row['username'] . ''; ?>
<?php echo '<p>' . $row['date'] . '</p>'; ?>
<?php echo '<p><input type="hidden" name="pid" value="'.$row['p_id'].'"></p>'; ?>
<?php echo '<p><input type="text" name="comment"></p>'; ?>
<?php echo '<p><input type="submit" name="submit" id="submit"></p>'; ?>
<script>
$("#form").on("submit", function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "test.php",
data: $(this).serialize(),
success: function(data) {
$("#result").append(data);
},
});
});
</script>
</form>
<?php } ?>
<span id="result">
<?php if(isset($msg)) { echo $msg; } ?>
</span>
<script src="jQuery/jquery-3.3.1.min.js" type="text/javascript"></script>
<script src="js/global.js"></script>
Alles anzeigen
test.php
<?php
include 'config/connect.php';
if(isset($_POST['submit'])) {
$msg = '';
$pid = $_POST["pid"];
$comment = $_POST['comment'];
$uid = 2;
$sql = 'INSERT INTO comments (p_id, u_id, comment) VALUES (:p_id, :u_id, :comment)';
$stmts = $pdo->prepare($sql);
if(!$stmts) { echo $stmts->errorInfo(); }
$stmts->BindParam(':p_id', $pid);
$stmts->BindParam(':u_id', $uid);
$stmts->BindParam(':comment', $comment);
if(!$stmts->execute()) {
echo $stmts->errorInfo();
} else {
$msg = 'Eingefügt';
}
}
?>
Alles anzeigen
Danke euch erstmal. Ich bekomme aber 2 Probleme.
1.
Warning: PDOStatement::execute() expects at most 1 parameter, 2 given in C:\xampp\htdocs\test2.php on line 59
Das zweite wenn ich den Datensatz in die Datenbank einfügen möchte:
2.
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\xampp\htdocs\test2.php on line 89
Array ( [0] => HY093 [1] => [2] => )´
Code:
<?php
include 'config/connecting.php';
?>
<h1>Hallo Kunde</h1>
<h2>Erstllen Sie ein Konto</h2>
<h3>Wählen Sie aus in welcher Bank Sie eintreten wollen.</h3>
<form action="" method="POST">
<p><input type="radio" name="bank" value="sparkasse"> <label for="sparkasse">Sparkasse</label></p>
<p><input type="radio" name="bank" value="commerzbank"> <label for="commerzbank">Commerzbank</label></p>
<br>
<h4> Bitte geben Sie noch Ihre Angaben an. </h4>
<p> Name: <input type="text" name="name"></p>
<p> Nachname: <input type="text" name="nachname"></p>
<p> PIN <input type="password" name="pin"></p>
<br>
<p><input type="submit" name="senden"></p>
<?php
$attemps = 10;
$length = 16;
for($kartennummer = null, $i = 0; $i<$attemps; $i++) {
$kartennummer = createPin($length);
if(PinExists($kartennummer)) {
$kartennummer = null;
continue;
} else {
break;
}
}
if(!strlen($kartennummer) === $length) {
echo 'Fehler trotzt ' . $attemps . 'versuchen konnte keine Pin erstellt werden.';
} else {
echo 'Pin Erfolgreich';
}
function createPIN($length)
{
$kartennummer = '';
for($i=0; $i < $length; $i++) {
$kartennummer .= mt_rand(0, 9);
}
return $kartennummer;
}
function PINExists($kartennummer) {
include 'config/connecting.php';
$sql = 'SELECT COUNT(*) FROM `sparkasse` WHERE Kartennummer = :kartennummer LIMIT 1';
$check = $pdo->prepare($sql);
$params = [
'kartennummer' => $kartennummer];
$check->execute($sql, $params);
}
?>
<?php
if(isset($_POST['senden'])) {
if(isset($_POST['bank'])) {
switch ($_POST['bank']) {
case 'sparkasse';
$sql = "INSERT INTO sparkasse (name, nachname, pin) VALUES (:name, :nachname, :pin)";
break;
case 'commerzbank';
$sql = "INSERT INTO commerzbank (name, nachname, Kartennummer, pin) VALUES (:name, :nachname, :Kartennummer, :pin)";
}
}
try {
$stmt = $pdo->prepare($sql);
$stmt->BindParam(':name', $_POST['name']);
$stmt->BindParam(':nachname', $_POST['nachname']);
$stmt->BindParam(':Kartennummer', $kartennummer);
$stmt->BindParam(':pin', $_POST['pin']);
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
} else {
echo 'Sie haben erfolgreich Ihr Bankkonto erstellt.';
}
} catch(PDOException $err) {
print_r($err->getMessage());
}
}
?>
Alles anzeigen
Tag,
ich brauche Hilfe unzwar möchte ich eine 16 Stellige Zahl erzeugen. ^
Nehmen wir an jemand erstellt einen Bank Account. Dann bekommt er automatisch in der Datenbank eine
16stellige Kartennnummer. Wie kann ich jetzt eine 16 stellige Zufallszahl erzeugen die nicht wieder dran kommt da die Kartennnummer nicht doppelt sein darf.
Tag,
Ein User hat auf seiner Seite Bilder hochgeladen. Jetzt müssen die auch angezeigt werden. Ich habe kurz etwas geschrieben alles funktioniert jedoch scheitert es 3 Bilder in eine Reihe zu kriegen. Es wird immer nur eins pro Reihe angezeigt.
HTML:
<?php
try {
if($stmt = $pdo->prepare(
"SELECT
u_post.p_id,
u_post.u_id,
u_post.post,
u_post.image_ordner,
u_post.p_like,
u_post.p_heart,
u_post.date,
user.id,
user.username
FROM u_post
LEFT JOIN user
ON u_post.u_id = user.id
ORDER BY DATE DESC")) {
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
}
while($row = $stmt->fetchObject()) {
$articles[] = $row;
}
}
?>
<?php foreach($articles as $article): ?>
<article id="galerie">
<figure>
<a href="#"><?php echo '<img src="' . $article->image_ordner . '">'; ?></a>
<p class="left_info"><button type="button" class="heart_index"><i class="fa fa-heart-o" aria-hidden="true"></i></button> <a href="#" class="like_detail"><?php echo $article->p_like; ?></a></p>
<p class="right_info"><button type="button" class="comment_index"><i class="fa fa-comment-o" aria-hidden="true"></i></button> <a href="#" class="comment_detail"><?php echo $article->p_like; ?></a></p>
</figure>
<?php endforeach; ?>
<?php } catch(PDOException $err) {
print_r($err->getMessage());
} ?>
</article>
CSS:
main #galerie {
width:100%;
margin:0 auto;
text-align:center;
display:flex;
flex-flow: row wrap;
justify-content: space-around;
padding-left:1em;
padding-right:1em;
padding-top:1em;
}
main #galerie figure {
flex-basis: 30%;
flex-grow: 0;
flex-shrink: 1;
padding-bottom:1em;
}
main #galerie img {
width:100%;
height:auto;
}
main #galerie p {
line-height:0;
padding-left:0.688em;
}
main #galerie p.left_info {
display:inline-block;
width:45%;
margin-left:-4px;
vertical-align:middle;
text-align:left;
}
main #galerie p.left_info button {
border:0;
padding:0;
background:#fff;
cursor:pointer;
}
main #galerie p.right_info {
display:inline-block;
width: 50%;
vertical-align:middle;
text-align:right;
}
Alles anzeigen
Wie es bei mir aussieht:
Wie es bei mir aussieht:
[Blockierte Grafik: http://fs1.directupload.net/images/171129/temp/owzdscjt.png]
Wie es aussehen soll:
Die SID soll die Session_id sein also der User der grad eingeloggt ist.
Die ID soll der Post sein und nicht der User.
Und Danke für die Möglichkeiten!
Deswegen die sid & id:
<?php
$stmt = $pdo->prepare("SELECT
u_post.p_id,
u_post.post,
COUNT(u_post_likes.id) AS likes,
GROUP_CONCAT(user.username SEPARATOR '|') AS liked_by
FROM u_post
LEFT JOIN u_post_likes
ON u_post.p_id = u_post_likes.post_id
LEFT JOIN user
ON u_post_likes.user_id = user.id
GROUP BY u_post.p_id
LIMIT 5");
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
}
while($row = $stmt->fetchObject()) {
$row->liked_by = $row->liked_by ? explode('|', $row->liked_by) : [];
$articles[] = $row;
}
echo '<pre>', print_r($articles, true) , '</pre>'; // Test
?>
<?php foreach($articles as $article) : ?>
<div class="article">
<p><?php echo $article->likes; ?> people like this</p>
<p><?php if(!empty($article->liked_by)) : ?>
<?php foreach($article->liked_by as $user) : ?>
<ul>
<li> <?php echo $user; ?> </li>
</ul>
<?php endforeach; ?>
<?php endif; ?>
<p> <?php echo $article->post; ?> </p>
<br>
<a href="like.php?type=article&id=<?php echo $article->p_id; ?>">Like</a>
</div>
<?php endforeach; ?>
Alles anzeigen
Hat alles super geklappt mit dem Like-System. Nur will es auch halt sicher machen
Hallo,
ich wollte mal Fragen wie man hier BindValue/Param einsetzen kann oder ob man es überhaupt sicher machen kann.
Script:
<?php
session_start();
require_once 'config/connect.php';
if(isset($_GET['type'], $_GET['id'])) {
$type = $_GET['type'];
$id = (int)$_GET['id'];
$sid = $_SESSION['id'];
switch($type) {
case 'article':
$stmt = $pdo->prepare("
INSERT INTO u_post_likes (user_id, post_id)
SELECT {$sid}, {$id}
FROM u_post
WHERE EXISTS (
SELECT p_id
FROM u_post
WHERE p_id = {$id})
AND NOT EXISTS (
SELECT id
FROM u_post_likes
WHERE user_id = {$sid}
AND post_id = {$id})
LIMIT 1
");
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
}
break;
}
}
header('Location: testupload.php');
?>
Alles anzeigen
Da hast du recht. Das wird geändert. Ich verstehe aber nicht wieso ich nichts kommentieren kann. Wenn ich etwas kommentiere möchte dann gibt er mir string(0) aus. .
Aber wieso zeigt er mir bei session_id = NULL an? Ich habe ebenfalls bei einem anderen Skript in der gleichen Datei eine INSERT abfrage wo auch $_SESION['id'] eingefügt werden soll in der DB da klappt es.
Um die Kommentare anzeigen zu lassen habe ich schon eine SELECT abfrage. Jetzt muss ich halt nur noch erstellen das jemand ein Kommentar schreiben kann. Keine Ahnung wieso der Button Show heißt
Habe ich ja nur zeigt er mir das gleiche an.
Bei einem zeigt er mir p_id cant null , bei dem andern u_id. Bin total verwirrt.
cottton Aber was muss ich den jetzt verbessern bzw ändern am Code das es funktoniert? Und wieso steht bei POST eine Fehlermeldung? Eig müsste nur die Fehlermeldung kommen von einem Post. Bild ist oben vorhanden wenn du weißt was ich meine. Danke erstmal für die schnelle Antwort
Hallo,
Unter jedem Post-Eintrag kann man Kommentare schreiben. In der Datenbank soll die k_id(Kommentar-ID), p_id(Post-Id), u_id(User-ID), Comment, Datum eingetragen werden.
Jeder Post hat eine p_id. Wenn ein Nutzer ein Kommentar schreibt dann muss man auch wissen unter welchen POST. Jetzt wollte ich die p_id in die Datenbank speichern sobald der Nutzer ein Kommentar eingibt jedoch bekomm ich diese Fehlermeldung: Array ( [0] => 23000 [1] => 1048 [2] => Column 'p_id' cannot be null ) .
Bei paar Post-Einträge klappt es und es steht (string(1) "6") jedoch wird das Kommentar nicht gespeichert obwohl erfolg steht. Bei manchen steht das da oben mit Column p_id cannot be Null.
Bin total verwirrt. Den Code werde ich aufjedenfall noch sauberer schreiben jedoch stört mich grad das Problem mit dem Kommentar.
Hier ein Bild von der Situation:
_______________________
Bild von der DB:
__________________
Code:
<?php
if($stmt = $pdo->prepare("SELECT id, username, image, im_type, image_ordner,
u_post.p_id, u_post.u_id, u_post.p_like, u_post.p_heart, u_post.post, u_post.date,
comments.p_id, comments.u_id, comments.comment, comments.date_comment
FROM user JOIN u_post ON u_post.u_id = user.id LEFT JOIN comments ON comments.p_id = u_post.p_id ORDER BY date DESC")) {
if(!$stmt->execute()) {
print_r($stmt->errorInfo());
}
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<section class="user_post_top_left">
<ul>
<li class="imgbox"><?php echo '<img src="data:image/' . $row['im_type'] . ';base64,' . base64_encode($row['image']) . '"/>'; ?></li>
<li><h2><?php echo $row['username']; ?></h2></li>
</ul>
</section>
<section class="user_post_time">
<p><time><small><?php echo $row['date']; ?></small></time></p>
</section>
</section>
<section class="user_post_index">
<p><?php echo $row['post']; ?></p>
<p><?php echo '<img src="'.$row['image_ordner'].'">'; ?></p>
<p>
<p><?php echo $row['comment']; ?>
<span class="user_set_value_right">
<button type="button" class="like_set"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i></button><small><a href="#"><?php echo $row['p_like']; ?></a></small> <button type="button" class="heart_set"><i class="fa fa-heart-o" aria-hidden="true"></i></button><small><a href="#"><?php echo $row['p_heart']; ?></a></small>
</span>
<span class="user_set_value_left">
<form action="" method="POST">
<?php
if(isset($_POST['show'])) {
$comment = $_POST['comment_msg'];
if($insert = $pdo->prepare("INSERT INTO comments (p_id, u_id, comment) VALUES (?, ?, ?)")) {
$insert->BindValue(1, $row['p_id']);
$insert->BindValue(2, $_SESSION['id']);
$insert->BindValue(3, $comment);
if(!$insert->execute()) {
print_r($insert->errorInfo());
} else {
echo 'erfolg';
}
}
}
?>
<input type="text" name="comment_msg">
<input type="submit" name="show" value="Show">
</span>
</section>
<?php
}
}
?>
Alles anzeigen
Stimmt. Danke!
Hab es kurz mal Copy & Paste gemacht aber es scheint so als ob javascript keine Wirkung zeigt.
<head>
<link rel="icon" href="img/snap.png" type="image/x-icon">
<title>Snapchat Connection</title>
<meta charset="utf-8"/>
<meta lang="de-de"/>
<meta lang="en-en"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="css/style_world.css" type="text/css"/>
<link rel="stylesheet" href="css/normalize.css" type="text/css"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://use.fontawesome.com/cb74638127.js"></script>
<script language="javascript" type="text/javascript">
var messages = document.getElementById("messagesBox");
messages.style.display = "none";
var buttonShowMessages = document.getElementById("showMessages");
var buttonHideMessages = document.getElementById("hideMessages");
buttonHideMessages.style.display = "none";
buttonShowMessages.addEventListener("click", showMessages);
buttonHideMessages.addEventListener("click", hideMessages);
function showMessages(){
var messages = document.getElementById("messagesBox");
var buttonShowMessages = document.getElementById("showMessages");
var buttonHideMessages = document.getElementById("hideMessages");
messages.style.display = "block";
buttonShowMessages.style.display = "none";
buttonHideMessages.style.display = "block";
}
function hideMessages(){
var messages = document.getElementById("messagesBox");
var buttonShowMessages = document.getElementById("showMessages");
var buttonHideMessages = document.getElementById("hideMessages");
messages.style.display = "none";
buttonShowMessages.style.display = "block";
buttonHideMessages.style.display = "none";
}
</script>
</head>
<body>
<button id="showMessages">Show Message</button>
<button id="hideMessages">Hide Message</button>
<section id="messagesBox">
<p>Hallo das ist eine Kommentar-box.</p>
</section>
</body>
Alles anzeigen
Bild:
HTML-Seminar.de - mit Videos zum schnellen Lernen, wie man eine Website selbst erstellt.