IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Bart
Člen
Avatar
Bart:14.1.2017 14:13

Ahoj, našel jsem jednoduchý chat, který nemá funkci zasílání soukromé zprávy. Skusil jsem přez Ajax poslat výběr jména provedený skrze databázi SQL"<select name=" , ale vždy to skončí "Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'" . Byl bych rád za nasměrování děkuji. Michal

<html>
<head>

<link rel="stylesheet" type="text/css" href="./style/style.css" />

</head>

<body>

<div id="main">

    <div class="container"><?php echo $lang['Chat']; ?>

        <form method="post" action="shout.php">
                  <input type="hidden" id="name" name="name" value="<?php echo $dsnm ?>" />
                              <input type="text2" id="message" name="message" class="message" placeholder= "<?php echo $lang['Yourmessage']; ?>" />
                                  <input type="submit" id="submit" value="<?php echo $lang['send']; ?>" />
                                  <select name="toname" id="toname" style="width:527px;">
                                                        <option>--Send Chat To--</option>
                                                                <?php
                                                                        $dsn = 'mysql:host=localhost;dbname=';
                                                                        $username = '';
                                                                        $password = '';

                                                                        try {
                                                                        $con = new PDO($dsn, $username, $password);
                                                                        } catch (PDOException $e) {}
                                                                        $sql = "SELECT dsnm FROM players where dsnm!='$dsnm' ORDER BY dsnm";
                                                                        $qry = $con->prepare($sql);
                                                                        $qry->execute();
                                                                        $fetch = $qry->fetchAll();
                                                                        foreach ($fetch as $fe):
                                                                                $toname = $fe['dsnm'];
                                                                ?>
                                                                        <option title="<?php echo $toname; ?>"><?php echo $fe['dsnm']; ?> </option>
                                                                <?php endforeach; ?>
                                                </select>

        </form>

        <div><div id="shout" style="padding:0 10px 0; overflow-x:hidden; height:225px;; overflow-y:auto;"/>

        </div>
    </div>

</div>

<script src="jquery.min.js"></script>

<script type="text/javascript">
$(function() {

    //populating shoutbox the first time
    refresh_shoutbox();
    // recurring refresh every 15 seconds
    setInterval("refresh_shoutbox()", 15000);

    $("#submit").click(function() {
        // getting the values that user typed
        var name    = $("#name").val();
        var message = $("#message").val();
        var toname = $("#toname").val();

        // forming the queryString
        var data    = 'name='+ name +'&message='+ message +'&toname='+ toname;

        // ajax call
        $.ajax({
            type: "POST",
            url: "../pages/shout.php",
            data: data,
            success: function(html){ // this happen after we get result
                $("#shout").slideToggle(500, function(){
                    $(this).html(html).slideToggle(500);
                    $("#message").val("");
                });
          }
        });
        return false;
    });
});

function refresh_shoutbox() {
    var data = 'refresh=1';
       $.ajax({
            type: "POST",
            url: "../pages/shout.php",
            data: data,
            success: function(html){ // this happen after we get result
                $("#shout").html(html);
            }
        });
}


</script>
</body>
</html>

// Shout.php //
<?php
error_reporting(0);
/*** mysql hostname ***/
$hostname = 'localhost';

/*** mysql username ***/
$username = '';

/*** mysql password ***/
$password = ' ';

$dbname = ' ';


try {
    $db = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

$name = isset($_POST['name']) ? $_POST['name'] : $dsnm;

if(!Empty($_POST['message'])) {
    $name = $_POST['name'];
    $message = $_POST['message'];
    $toname = $_POST['toname'];


    /*** set all errors to execptions ***/
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "INSERT INTO chatbox (time, name, message, toname)
            VALUES (NOW(), :name, :message, :toname )";
    /*** prepare the statement ***/
    $stmt = $db->prepare($sql);

    /*** bind the params ***/
    $stmt->bindParam(':name', $name, PDO::PARAM_STR);
    $stmt->bindParam(':message', $message, PDO::PARAM_STR);
    $stmt->bindParam(':toname', $toname, PDO::PARAM_STR);

    /*** run the sql statement ***/
    if ($stmt->execute()) {
        populate_shoutbox();
        }
        }
else{}
}
catch(PDOException $e) {
    echo $e->getMessage();
}

if($_POST['refresh']) {
    populate_shoutbox();
}


function populate_shoutbox() {
    global $db;
//      $name = "test";

 $sql = "SELECT name, toname, message, time FROM chatbox WHERE name='$name' ORDER BY time";

                echo '<ul>';
    foreach ($db->query($sql) as $row) {
        echo '<dl>';
        echo '<span class="time">'.$row['time'].' &nbsp;&nbsp; </span>';
        echo '<span class="name">'.$row['name'].'</span>';
        echo '==><span class="toname">'.$row['toname'].'</span>';
        echo ' - <span class="message">'.$row['message'].'</span>';

        echo '</dl>';
    }
    echo '</ul>';
}
?>
Editováno 14.1.2017 14:13
 
Odpovědět
14.1.2017 14:13
Avatar
Bart
Člen
Avatar
Bart:15.1.2017 12:55

Problém vyřešen. Databáze SQL - upraven řádek ID z PRIMARY na INDEX.
Funguje i odesílání výběru.

Proč nefunguje vložení proměnné ($name) do "function populate_shou­tbox()"

 
Nahoru Odpovědět
15.1.2017 12:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.