Partage
  • Partager sur Facebook
  • Partager sur Twitter

Chat en j-query(enfin, je crois)

Bug lors de l'envoi du message: page blanche!

Sujet résolu
    5 juillet 2009 à 19:30:12

    Bonjour!
    Un ami à moi m'a fait un chat en J-Query, ou en Ajax, ou alors, en JSON, enfin, je sais plus, mais il m'a fait un chat. Le problème, les problèmes, c'est que depuis peu, quand on envoie un message, il affiche

    Citation

    {"response":"Good work","nickname":"Young","message":"=)","time":1246814192}

    et en plus, les accents sont convertis à cause de l'encodage UTF-8 de mes pages, donc le plus urgent serait de ne plus atterrir sur cette page blanche... Ensuite, il faudrait régler les accents... Et maintenant, le moment que vous attendez pas tous mais presque, les codes!

    chat.php(la page qui inclut le chat par la suite):
    <?php
    	$page = 'Mini-Chat';
    	include('haut.php');
    ?>
    
    <div class="left">
    <br />
    <h1>Mini-Chat</h1>
    
    <?php 
    	include('chata.php');
    ?>
    <br /></div></div>
    <?php include('bas.php'); ?>
    


    chata.php(le chat en ajax inclus dans l'autre page):
    <style type="text/css">
        #daddy-shoutbox {
          padding: 5px;
          color: white;
          width: 530px;
          font-family: Arial,Helvetica,sans-serif;
          font-size: 11px;
    	  overflow:auto;
        }
        .shoutbox-list {
          border-bottom: 1px solid #627C98;
    
          padding: 5px;
          display: none;
        }
        #daddy-shoutbox-list {
          text-align: left;
          margin: 0px auto;
    	  height: 300px;
    		overflow:auto;
        }
        #daddy-shoutbox-form {
          text-align: left;
    
        }
        .shoutbox-list-time {
          color: #8DA2B4;
        }
        .shoutbox-list-nick {
          margin-left: 5px;
          font-weight: bold;
        }
        .shoutbox-list-message {
          margin-left: 5px;
        }
    
      </style>
        <script type="text/javascript" src="js/jquery.js"></script>
    
      <script type="text/javascript" src="js/jquery.form.js"></script>
      <center>
      <div id="daddy-shoutbox">
        <div id="daddy-shoutbox-list"></div>
        <br />
    	<?php
    	if(!empty($_SESSION['pseudo']))
    	{
    	?>
    		<form id="daddy-shoutbox-form" action="demos/jquery-shoutbox/daddy-shoutbox.php?action=add" method="post">
    			<input type="hidden" name="nickname" value="<?php echo $_SESSION['pseudo'] ?>"/> Message : <input type="text" name="message" style="width:70%" autocomplete="off"/>
    			<input type="submit" value="chatter" />
    			<span id="daddy-shoutbox-response"></span>
    		</form>
    	<?php
    	}
    	else
    	{
    		?>
    		<form id="daddy-shoutbox-form" action="demos/jquery-shoutbox/daddy-shoutbox.php?action=add" method="post">
    			Pseudo:<input type="text" name="nickname"/> Message : <input type="text" name="message" autocomplete="off"/>
    			<input type="submit" value="chatter" />
    			<span id="daddy-shoutbox-response"></span>
    		</form>
    		<?php
    	}
    	?>
      </div>
      </center>
    
      <script type="text/javascript">
            var count = 0;
            var files = 'demos/jquery-shoutbox/';
            var lastTime = 0;
    
            function prepare(response) {
              var d = new Date();
              count++;
              d.setTime(response.time*1000);
              var mytime = d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();
              var string = '<div class="shoutbox-list" id="list-'+count+'">'
                  + '<span class="shoutbox-list-time">'+mytime+'</span>'
                  + '<span class="shoutbox-list-nick">'+response.nickname+':</span>'
                  + '<span class="shoutbox-list-message">'+response.message+'</span>'
                  +'</div>';
    
              return string;
            }
    
            function success(response, status)  {
              if(status == 'success') {
                lastTime = response.time;
                $('#daddy-shoutbox-response').html('<img src="'+files+'images/accept.png" />');
                $('#daddy-shoutbox-list').append(prepare(response));
                $('input[@name=message]').attr('value', '').focus();
                $('#list-'+count).fadeIn('slow');
                timeoutID = setTimeout(refresh, 3000);
              }
            }
    
    		var x = true
    
            function validate(formData, jqForm, options) {
              for (var i=0; i < formData.length; i++) {
                  if (!formData[i].value) {
                      $('input[@name='+formData[i].name+']').css('background', 'red');
    				  x = false;
                      return false;
                  }
    			  if(!x)
    					$('input[@name='+formData[i].name+']').css('background', '#FFF');
              }
              $('#daddy-shoutbox-response').html('<img src="'+files+'images/loader.gif" />');
              clearTimeout(timeoutID);
            }
    
            function refresh() {
              $.getJSON(files+"daddy-shoutbox.php?action=view&time="+lastTime, function(json) {
                if(json.length) {
                  for(i=0; i < json.length; i++) {
                    $('#daddy-shoutbox-list').append(prepare(json[i]));
                    $('#list-' + count).fadeIn('slow');
                  }
                  var j = i-1;
                  lastTime = json[j].time;
                }
                //alert(lastTime);
              })
              timeoutID = setTimeout(refresh, 3000);
            }
    
    		function scroll()
    		{
    			var message = document.getElementById('daddy-shoutbox-list');
    			message.scrollTop = message.scrollHeight;
    		}
    
            // wait for the DOM to be loaded
            $(document).ready(function() {
                var options = {
                  dataType:       'json',
                  beforeSubmit:   validate,
                  success:        success
                };
                $('#daddy-shoutbox-form').ajaxForm(options);
                timeoutID = setTimeout(refresh, 100);
            });
    
    		setInterval(scroll, 1000);
      </script>
    


    daddy-shoutbox.php(je crois que c'est la page qui traite les messages, c'est surement là que ça plante...):
    <?php
      function replace(&$item, $key) {
        $item = str_replace('|', '-', $item);
      }
      
      if (!function_exists('file_put_contents')) {
    		function file_put_contents($fileName, $data) {
    			if (is_array($data)) {
    				$data = join('', $data);
    			}
    			$res = @fopen($fileName, 'w+b');
    			if ($res) {
    				$write = @fwrite($res, $data);
    				if($write === false) {
    					return false;
    				} else {
    					return $write;
    				}
    			}
    		}
    	}
      
      //file_put_contents('debug.txt', print_r($_GET, true));
      switch($_GET['action']) {
        case 'add':
          array_walk($_POST, 'replace');
          $arr = file('messages.txt');
          
          if(count($arr) > 10)
            array_shift($arr);
          
          $_POST['nickname'] = htmlspecialchars($_POST['nickname']);
          $_POST['message'] = htmlspecialchars($_POST['message']);
    	  
          $time = time();
          $arr[] = $time.'|'.$_POST['nickname'].'|'.$_POST['message'].'|'.$_SERVER['REMOTE_ADDR']."\n";
          file_put_contents('messages.txt', implode('', $arr));
    
          $data['response'] = 'Good work';
          $data['nickname'] = htmlspecialchars($_POST['nickname']);
          $data['message'] = htmlspecialchars($_POST['message']);
          $data['time'] = $time;
        break;
        
        case 'view':
          $data = array();
          $arr = file('messages.txt');
          if(!$_GET['time'])
            $_GET['time'] = 0;
          foreach($arr as $row) {
            $aTemp = null;
            list($aTemp['time'], $aTemp['nickname'], $aTemp['message']) = explode('|', $row); 
            if($aTemp['message'] AND $aTemp['time'] > $_GET['time'])
              $data[] = $aTemp;
          }
          //file_put_contents('debug.txt', print_r($data, true));
        break;
      }
    
      include('bbcode.php');
      require_once('JSON.php');
      $json = new Services_JSON();
      $out = $json->encode($data);
      print stripslashes(html_entity_decode($out));
    ?>
    


    Voila, j'espère que ces pages suffiront...
    Au revoir!
    • Partager sur Facebook
    • Partager sur Twitter

    L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

      6 juillet 2009 à 21:32:38

      Il a été révélé par la suite que ce chat ne marche pas, mais seulement sur mon ordinateur, je dois créer un nouveau topic?
      • Partager sur Facebook
      • Partager sur Twitter

      L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

        8 juillet 2009 à 12:36:09

        UP...
        • Partager sur Facebook
        • Partager sur Twitter

        L'important n'est pas de savoir maîtriser une technologie à la perfection, mais d'avoir une belle capacité d'adaptation.

        Chat en j-query(enfin, je crois)

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown