Php mysql + xmlHttpRequest

lb2711 Messages postés 1 Date d'inscription vendredi 12 mars 2010 Statut Membre Dernière intervention 17 novembre 2011 - 17 nov. 2011 à 01:48
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 17 nov. 2011 à 11:50
Bonjour,


J'ai un problème avec mon script. 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 un lien subscribe pour 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 relu la doc un peu partout depuis deux jours mais là je sèche. quelqu'un aurait une idée svp de mon erreur ?

Voici mon code, merci pour votre aide

       
//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.';
        }

1 réponse

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
17 nov. 2011 à 11:50
Salut,

Avant d'aller plus loin je te conseille de refaire entièrement ton script. En effet, tu utilise d'une très mauvaise manière la base de données : c'est une base de données relationnelle et tu l'utilises comme une multivaluée, ce qu'il ne faut pas faire. Afin de mieux comprendre ton erreur et réécrire correctement ton script, je te recommande la lecture de cet article : Des bases de données relationnelles et multivaluées.
0
Rejoignez-nous