2013-07-26 4 views
1

J'ai commencé à construire des shoutbox \ Chat en PHP très basique. Il utilise simplement une table mysql de base avec (int) id comme index uniques et colonnes de message (texte). Cela fonctionne mais ne stocke que des nombres dans la base de données. J'ai cherché partout une solution mais je n'en trouve pas encore. Je suspecte que le problème réside dans la base de données mysql ou la requête, mais peut-être que quelque chose ne va pas avec le code.Je ne peux stocker des numéros dans la base de données, un simple shoutbox dans php

Voici le code:

<?php 
// **************** 
// Database Settings 
// **************** 

$sql_hst = "localhost"; 
$sql_db = "chatbox"; 
$sql_usr = "chatbox"; 
$sql_pwd = "chatbox"; 

// **************** 
// Core Functions 
// **************** 

function connectdb() 
{ 
    //conection: 
    global $sql_srv,$sql_usr,$sql_pwd,$sql_db; 
    $link = mysqli_connect($sql_srv,$sql_usr,$sql_pwd,$sql_db) or die("Error " . mysqli_error($link)); 
    return $link; 
} 

function getMessages() 
{ 
     $result = mysqli_query(connectdb(),"SELECT message FROM messages"); 
     while($row = mysqli_fetch_array($result)) 
     { 
      echo $row['message']; 
      echo "<br>"; 
     } 
} 

function postMessage() 
{ 
if (isset($_POST['message'])) 
{ 
    mysqli_query(connectdb(), "INSERT INTO messages (message) VALUES (".$_POST['message'].")"); 
    //echo $_POST['message']; //test post data 
} 
} 

connectdb(); 
postMessage(); 

//END OF MAIN PHP 
?> 
<!DOCTYPE html> 
<html> 
    <head><title>Chatbox</title> 
    <style> 
    body { background-color: gray; } 
    input{width:375px;display:block;border: 1px solid #999;height: 25px;--moz-box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);} 
    .message_box{ background-color: white; height: 500px; width: 100%;} 
    .message_form{width: 100%;} 
    .message_input{width: 100%;} 
    .message_submit{} 
    </style> 
    </head> 
    <body> 

    <div class="message_box"><?php getMessages(); ?></div> 
    <form class="message_form" action="chatbox.php" method="post"> 
    <input class="message_input" type="text" name="message"> 
    <!-- <input type="submit"> --> 
    </form> 
    </body> 
</html> 
+0

Pouvez-vous 'DESCRIBE messages'? Aussi, vous devriez préparer cela. –

+1

Vous êtes vulnérable aux [attaques par injection SQL] (http://bobby-tables.com). N'UTILISEZ PAS CE CODE. Cela étant dit, ce code est "bien" (très vulnérable aux attaques, mais ... 'bien'). Quel est le type de votre champ 'message' dans la base de données? carboniser? varchar? int? –

+1

Avant de faire quoi que ce soit ** else **, vous devez lire [escape SQL correct] (http://bobby-tables.com/php) pour éviter les [bogues d'injection SQL] sévères (http: // bobby- tables.com/) présente dans ce. Lorsque vous utilisez 'mysqli' vous devriez utiliser [' bind_param'] (http://php.net/manual/fr/mysqli-stmt.bind-param.php) pour ajouter des valeurs à votre requête. N'utilisez pas de concaténation de chaîne pour ajouter des valeurs '$ _POST' à votre chaîne de requête. – tadman

Répondre

0

Voir si cela aide:

function postMessage($message){ 
    mysqli_query(connectdb(), "INSERT INTO messages (message) VALUES ("'".mysqli_real_escape_string($message)."'")"); 
} 

// connectdb(); // this is probably not needed since this function 
// is called in postMessage function 
if (isset($_POST['message'])){ 
    postMessage($_POST['message']); 
} 
+0

Utilisez une requête préparée ou vous devez utiliser 'mysqli_real_escape_string()'. – Barmar

+1

Le champ de message de la base de données utilise le type TEXT. Je suis d'accord sur le fait que le code est vulnérable aux attaques, mais c'est juste un truc de dev localhost pour se faire, je ne suis pas concerné par les attaquants car ils n'ont pas accès à ce serveur local. Je vais certainement améliorer sa sécurité une fois que je traiterai le bug des "seuls numéros". Le comportement est le suivant: Une fois que j'ai entré un nombre, la page se met à jour comme d'habitude et me montre la nouvelle entrée, ainsi que dans la base de données. mais alors si j'entre même 1 lettre je n'obtiens rien, même pas une erreur. Il met juste à jour et montre les mêmes vieilles entrées. – meta11144

+0

ce qui se passe lorsque vous supprimez la fonction postMessage et utilisez simplement ceci: if (isset ($ _ POST [ 'message'])) { mysqli_query (connectdb(), "INSERT INTO messages (message) VALUES ('". $ _POST ["message"]. "')"); } – Maximus2012

Questions connexes