2016-10-31 6 views
0

Ich arbeite an einer Chat-Web-Anwendung. Das Problem ist, dass jedes Mal, wenn die Seite geladen wird, eine leere Nachricht in die Datenbank eingefügt wird.Ein zusätzlicher Sql-Datensatz wird jedes Mal hinzugefügt

Der Code ist wie unten

  <!-- Insert MySQL datbase into HTML  --> 
<?php 
$connection = mysqli_connect("localhost", "root", "", "tru"); 
$query = "SELECT * FROM shouts ORDER BY id Desc LIMIT 8"; 
$shouts = mysqli_query($connection, $query); 
?> 



        <!-- Insert MySQL datbase into HTML  --> 
    <?php while ($row = mysqli_fetch_assoc($shouts)) : ?> 
     <li> <?php echo $row['shout']; ?> <b>&nbspSent at&nbsp</b><?php echo $row['Time']; ?></li> 
      <?php endwhile; ?> 

    </ul> 
    </div> 
    <footer> 
     <form action="index.php" method="post"> 
     <label>Shout Text: </label> 
     <input type="text" name="shout" placeholder="Enter your message here"> 
     <input type="submit" id="submit" value="SHOUT!" > 
    </form> 
     <?php 
        <!-- Insert into MySQL datbase  --> 

$link = mysqli_connect("localhost", "root", "", "tru"); 
$sql = "INSERT INTO shouts (name,shout) VALUES ('$_POST[name]','$_POST[shout]')"; 
if(mysqli_query($link, $sql)){ 
echo "Records added successfully."; 
} else 
{ 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 
</footer> 
</div> 
</body> 
</html> 
+1

Es macht nur Sinn, wenn Sie eine INSERT INTO ... Anweisung haben, wird eine neue Zeile in Ihre Datenbank eingefügt. Ihr Code macht genau das, was Sie geschrieben haben. Was ist das Problem? – Dekel

+1

@Dekel hat Recht. Jedes Mal, wenn Sie Ihre Seite neu laden, wird Ihr PHP-Code ausgeführt. Vielleicht möchten Sie eine Art von Bedingung setzen, bevor Sie –

+0

einfügen, was würde diese Bedingung sein @ FranckNgako –

Antwort

0
<?php 

if(isset($_POST["name"])){ 
    $link = mysqli_connect("localhost", "root", "", "tru"); 
    $sql = "INSERT INTO shouts (name,shout) VALUES ('$_POST[name]','$_POST[shout]')"; 
    if(mysqli_query($link, $sql)){ 
     echo "Records added successfully."; 
    } 
    else 
    { 
     echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
    } 

    // close connection 
    mysqli_close($link); 
} 

Mit einer if sentece Sie haben es gelöst. Es wird nur einen Datensatz hinzufügen, wenn die POST-Name-Variable gesetzt ist.

+0

Ich möchte Sie Code debuggen .. 1) geben Sie bitte richtige Ende Klammer zuerst, wenn isetet Linie ['Name'] ist es derzeit [ 'name') .2) entferne das ich weiß nicht, wie PHP es interpretieren wird. Bcas, das ist nicht so, wie wir in PHP eingingen. –

+0

Der Fehler wurde entfernt, wie Sie sagten, um isset zu verwenden. Aber dazu musste ich auch die letzte Zeile des Codes entfernen, der mysqli_close ($ link) war; Sonst kam ein Fehler mit der Warnung: mysqli_close() erwartet Parameter 1 als mysqli, null in C: \ xampp \ htdocs \ tru \ index.php in Zeile 57 ... Ich denke es ist eine schlechte Angewohnheit, mysqli nicht zu schließen Verknüpfung. Hast du einen Ausweg zu diesem @ Eric Liebstreich –

+0

Übrigens danke für diese Logik @Eric Liebsreich –

0

Sie bedingungslos insert eine Reihe, so wird dies erwartet. Also, was sollte die Bedingung sein? Natürlich, beim Laden der Seite wollen Sie nicht insert einen Schrei, nur auf POST. Sie müssen also prüfen, ob die Anforderung eine Post ist:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    // insert the row 
} 

Aber selbst wenn es sich um eine POST ist, müssen Sie prüfen, ob es gültig ist, so Namen überprüfen und rufen:

if ($_SERVER['REQUEST_METHOD'] === 'POST') { 
    if ((isset($_POST["name"])) && (isset($_POST["shout"])) && ($_POST["name"]) && ($_POST["shout"])) { 
     //insert the row 
    } 
} 

Uhr out für SQL injection obwohl.

+0

Danke es funktioniert jetzt ... aber dafür muss ich die letzte Zeile des Codes entfernen das ist die Verbindung zu schließen. Die Zeile ist Warnung: mysqli_close() erwartet, dass Parameter 1 mysqli ist, null in C: \ xampp \ htdocs \ tru \ index.php in Zeile 57 –

+0

@HNSingh gegeben wird, sollte das Verbinden, Einfügen und Trennen innerhalb des if in diesem gezeigt werden Antwort, Ihr zweites Problem war, dass Sie versuchen, eine Verbindung zu schließen, die Sie nicht geöffnet haben. Dies passierte, als Sie die Seite in den Browser geladen haben, die if-Bedingung falsch war und $ link nicht initialisiert wurde. Wenn die Antwort hilfreich war, können Sie sie akzeptieren, indem Sie auf das Häkchen klicken. –

Verwandte Themen