php mysql + xmlHttpRequest

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : php mysql + xmlHttpRequest

Re: php mysql + xmlHttpRequest

par KwarK » 15 nov. 2011, 18:42

Bonjour,


Je fais un petit up car j'ai toujours un problème. Si je me connecte avec User A et que je m'inscrit à un event, ma colonne event_subscriber qui contient la chaine de caractère des users inscrit à cet event se met bien à jour.

Mais dès que je me connecte avec User B et que je clique subscribe sur un event, l'user écrase la chaîne de caractère et efface User A alors que j'aimerais que l'user se rajoute derrière avec une virgule.

J'ai suivi vos conseils, relu la doc mais là ça fait deux jours que je cherches et je sèche. quelqu'un aurait une idée svp ?
	
//Wordpress deprecated
	
ini_set('display_errors','off');

//Global Wordpress

global $wpdb;

if(!isset($wpdb))
{
    require_once('../../../wp-config.php');
    require_once('../../../wp-load.php');
    require_once('../../../wp-includes/wp-db.php');
}

define('WP_CALENDAR_TABLE', $wpdb->prefix . 'calendar');

//Deal xmlHttpRequest

header('Content-type: text/html; charset=UTF-8');

//Methode post < XMLHTTPREQUEST >

$raid = $_POST["raid"];
$date = $_POST["date"];
$time = $_POST["time"];
$user = $_POST["user"];

//Ne pas faire confiance

function testDate( $date )
        {
                $temp = implode('-', array_reverse( explode('-',$date) ) ) ;
                return preg_match( '`^\d{1,2}-\d{1,2}-\d{4}$`' , $temp ) ;
        }
function testTime( $time )
        {
                $temp = ''.$time.'';
                return preg_match( '`^\d{1,2}:\d{1,2}:\d{1,2}$`' , $temp ) ;
        }
if(testTime( $time ) == false || testDate ( $date ) == false){
        echo 'No banana, bad monkey.';
        exit;
        }

//Requête principale
 
$sql = $wpdb->query("SELECT event_subscriber FROM " . WP_CALENDAR_TABLE . " WHERE event_title='".$raid."' AND event_begin='".$date."' AND event_time='".$time."'");

        if($sql == true)
        {       // Verifier la colonne event_subscriber(S)
       
                $temp = implode(",", $sql);
                $verif = preg_match('#,'.$user.'#', $temp);
               
                // Si user deja inscrit mettre à jour la chaine de caractères contenant les users inscrit (séparé par une virgule)
                if($verif == false)
                {
                        $update = explode(",", $temp);
                                       
                        array_push($update, ''.$user.'');
                                       
                        $users = implode(",", $update);
                                         
                        $sql = $wpdb->query("UPDATE " . WP_CALENDAR_TABLE . " SET event_subscriber='".$users."' WHERE event_title='".$raid."' AND event_begin='".$date."' AND event_time='".$time."'");
       					
			$date_fr = implode('-', array_reverse( explode('-',$date) ) ) ;
						
                        echo 'You subscribe for the event "' .$raid.'"';
                        echo ' of ' .$date_fr. '';
                        echo ' at '.$time.'';
                        echo ' with nicename "'.$user.'"';
                }
                                       
                else
                {
                        echo 'Your are already registered for this raid "'.$raid.'"';
                }
        }
       
        else
        {
                echo 'Bad request. Contact administrator of this site.';
        }

Re: php mysql + xmlHttpRequest

par KwarK » 10 nov. 2011, 17:03

Bonjour Moogli et Mazarini,


Je fais quelques recherches sur la doc php et vos commentaires laissés. Je revois tout.

Merci pour vos conseils et ce que vous faites ici (toutes les réponses apportées à tous).

Re: php mysql + xmlHttpRequest

par moogli » 10 nov. 2011, 15:30

Merde Moogli est trop rapide^^
pour une fois ^^

j'ai oublié de dire que tu pouvais tester avec un simple formulaire html qui envoie les données afin de juste valider le script php, sans moulinette ajax ;)

et pour les test vire le ini_set('display_errors','off'); qui est plus que génant ^^

@+

Re: php mysql + xmlHttpRequest

par Mazarini » 10 nov. 2011, 15:25

Bonjour,
                $sql = $wpdb->get_results("SELECT event_subscriber FROM...);
                $subscribers = $wpdb->get_results($sql);
Je ne comprends pas le double accès à la méthode get_results avec des paramètres totalement différents mais je ne connais pas l'objet que tu utilises.
$list_total = array_push($table_subscriber[$user]);
Ca ne serai pas plutot array_push($table_subscriber,$user)
$table_subscriber[] = $user serai aussi bien.

Merde Moogli est trop rapide^^
Vloila pour ce que je vois au premier coup d'oeil.

Re: php mysql + xmlHttpRequest

par moogli » 10 nov. 2011, 15:21

salut,

niveau JS je suis pas super doué, mais ça a l'air correcte ;)

coté php, y a des choses que je ne comprend pas et ton explication n'y aide pas.
des commentaires dans le code :
<?php
 //VERIFY AND UPGRADE SUBCRIBERS LIST    
                 $sql = $wpdb->get_results("SELECT event_subscriber FROM " . WP_CALENDAR_TABLE . " WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
                 // $sql est un tableau 
                 $subscribers = $wpdb->get_results($sql); // ceci ne semble pas correct $sql étant un jeux de résultat fournit au dessus !
                 
                 $table_subscriber = array(); // inutile mais pourquoi pas ;)
                 
                 $table_subscriber = explode(",",$subscribers); // $subscribers est un tableau ceci est docn étonnant
                 
                 if ($subscribers == '') // on utile pas ce type de test sur un tabelau
                 {
                         
                         $sql = $wpdb->get_results("UPDATE " . WP_CALENDAR_TABLE . " SET event_subscriber=''".mysql_real_escape_string($user)."'' WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
                 // je pense qu'un query serait plus adapté ?
                 }
                 
                 else
                 {
                 
                         if (!in_array($table_subscriber[$user]))
                         {
                                 $list_total = array_push($table_subscriber[$user]);
                                 
                                 $update = implode(",",$table_subscriber);
                                 // idem query ?
                                 $sql = $wpdb->get_results("UPDATE " . WP_CALENDAR_TABLE . " SET event_subscriber='".mysql_real_escape_string($update)."' WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
                                 
                                         //RESPONSE
                                 $temp = implode('-', array_reverse( explode('-',$date) ) ) ;
                                 echo 'You just sign up for the event "' .mysql_real_escape_string($raid).'"';
                                 echo ' of ' .mysql_real_escape_string($temp). '';
                                 echo ' at '.mysql_real_escape_string($time).'';
                                 echo ' with nicename "'.mysql_real_escape_string($user).'"';
                                 
                         }
                                 
                         else
                         {
                                 
                                 echo 'You are already registered for this raid "'.mysql_real_escape_string($raid).'"';
                                 
                         }
                 }
//pas utile
unset($raid, $date, $time, $user, $list_total);
je ne connais pas wordpress, j'ai juste regardé rapidement sur la doc
la doc de la classe de connection au sgbd
la doc du get_result()

peut être que si tu reformulé plus simplement ce que tu souhaite je pourrais mieux comprendre.

je ne comprend pas trop tes update au milieux de tous cela.


@+

php mysql + xmlHttpRequest

par KwarK » 10 nov. 2011, 14:38

Bonjour à tous,


Je suis en galère avec implode/explode pour une requête sql apportant le résultat d'une seule cellule. J' ai un fichier xmlHttpRequest chargé, il fonctionne. Un lien a permet d'appeler la function adaptée permettant de cibler le fichier php permettant l'inscription en bdd.

Je cherche a utiliser une seule cellule et ajouter chaque user dans cette cellule avec une virgule. Je dois en + récupérer la liste users déjà inscrit dans cette cellule avant d'ajouter le suivant à la fin de la chaine contenue dans cette cellule mais je suis en galère totale. La cellule peut être aussi vide. J'ai essayer plein de chose avant de vous rejoindre (consulter la doc, des tutos) mais je dois louper un truc avec les explode/implode que je ne saisit pas, et je crois que je passe à côté de quelque chose avec çà et la requête mysql.

Voici mon code en espérant un petit coup de pouce. J'utilise Wordpress.

Je suis sûr que je me complique la vie et qu'il y a moyen de raccourcir tout çà avec une boucle, je dois me mélanger pas mal les pinceau avec les implode/explode et la façon de les utiliser pour manipuler le résultat de la requête sql en elle même.

Si une âme charitable veut bien m' éclairer ? merci

subscribe.php
<?php
		
ini_set('display_errors','off');

//GLOBAL WORDPRESS
global $wpdb;

if(!isset($wpdb))
{
    require_once('../../../wp-config.php');
    require_once('../../../wp-load.php');
    require_once('../../../wp-includes/wp-db.php');
}

define('WP_CALENDAR_TABLE', $wpdb->prefix . 'calendar');

//DEAL FROM REQUEST.JS
header('Content-type: text/html; charset=UTF-8');

//METHOD POST < XMLHTTPREQUEST > VALUE FOR SUBSCRIBE FUNCTION IN REQUEST.JS
$raid = $_POST["raid"];
$date = $_POST["date"];
$time = $_POST["time"];
$user = $_POST["user"];

function testDate( $date )
	{
		$temp = implode('-', array_reverse( explode('-',$date) ) ) ;
		return preg_match( '`^\d{1,2}-\d{1,2}-\d{4}$`' , $temp ) ;
		if ($temp == false){
			echo 'No banana, bad monkey';
		}
	}
function testTime( $time )
	{
		$temp = ''.$time.'';
		return preg_match( '`^\d{1,2}:\d{1,2}:\d{1,2}$`' , $temp ) ;
		if ($temp == false){
			echo 'No banana, bad monkey';
		}
	}
	
		//VERIFY AND UPGRADE SUBCRIBERS LIST	
		$sql = $wpdb->get_results("SELECT event_subscriber FROM " . WP_CALENDAR_TABLE . " WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
		
		$subscribers = $wpdb->get_results($sql);
		
		$table_subscriber = array();
		
		$table_subscriber = explode(",",$subscribers);
		
		if ($subscribers == '')
		{
			
			$sql = $wpdb->get_results("UPDATE " . WP_CALENDAR_TABLE . " SET event_subscriber=''".mysql_real_escape_string($user)."'' WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
		
		}
		
		else
		{
		
			if (!in_array($table_subscriber[$user]))
			{
				$list_total = array_push($table_subscriber[$user]);
				
				$update = implode(",",$table_subscriber);
				
				$sql = $wpdb->get_results("UPDATE " . WP_CALENDAR_TABLE . " SET event_subscriber='".mysql_real_escape_string($update)."' WHERE event_title='".mysql_real_escape_string($raid)."' AND event_begin='".$date."' AND event_time='".$time."'");
				
					//RESPONSE
				$temp = implode('-', array_reverse( explode('-',$date) ) ) ;
				echo 'You just sign up for the event "' .mysql_real_escape_string($raid).'"';
				echo ' of ' .mysql_real_escape_string($temp). '';
				echo ' at '.mysql_real_escape_string($time).'';
				echo ' with nicename "'.mysql_real_escape_string($user).'"';
				
			}
				
			else
			{
				
				echo 'You are already registered for this raid "'.mysql_real_escape_string($raid).'"';
				
			}
		}
		
unset($raid, $date, $time, $user, $list_total);

?>
request.js
// JavaScript Document

//Subscribe function

function subscribe(){
var user = document.getElementById('user').innerHTML;
var raid = document.getElementById('raid').innerHTML;
var date = document.getElementById('date').innerHTML;
var time = document.getElementById('time').innerHTML;
var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
   xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest. Veuillez mettre à jour.");
   return;
}

xhr_object.open("POST", "/wp-content/plugins/calendar/subscribe.php", true);

xhr_object.onreadystatechange = function() {
   if(xhr_object.readyState == 4) alert(xhr_object.responseText);
}

xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
var data = "user="+user+"&raid="+raid+"&date="+date+"&time="+time;
xhr_object.send(data);
}

//Unsubscribe function

function unsubscribe(){
var user = document.getElementById('user').innerHTML;
var raid = document.getElementById('raid').innerHTML;
var date = document.getElementById('date').innerHTML;
var time = document.getElementById('time').innerHTML;
var xhr_object = null;

if(window.XMLHttpRequest) // Firefox
   xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // Internet Explorer
   xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { // XMLHttpRequest non supporté par le navigateur
   alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest. Veuillez mettre à jour.");
   return;
}

xhr_object.open("POST", "/wp-content/plugins/calendar/unsubscribe.php", true);

xhr_object.onreadystatechange = function() {
   if(xhr_object.readyState == 4) alert(xhr_object.responseText);
}

xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
var data = "user="+user+"&raid="+raid+"&date="+date+"&time="+time;
xhr_object.send(data);
}

//Alerte for log link if not define

function nolink(){
	alert("Aucun lien vers un log de donnée de raid n'a été défini.");
	}
edit: correction orthographique