2010-03-28 6 views
0

Mon niveau de connaissance ici est comme zilch, mais s'il vous plaît ours avec moi.La table de MySQL ne met pas à jour, ne peut pas trouver le message d'erreur

J'ai un site construit en PHP/MySQL qui utilise le moteur de template Smarty. Il y a un formulaire d'enregistrement qui, pour une raison ou une autre, n'affiche pas les données dans la base de données. Voici la fonction:

$u = new H_User; 
    $u->setFrom($p); 
    $smarty->assign('user', $u); 
    $val = $u->validate(); 
    if ($val === true) { 

     $temp = new H_User; 
     $temp->orderBy('user_id desc'); 
     $temp->find(true); 

     $next_id = $temp->user_id + 1; 

     $u->user_id = $next_id; 
     $u->user_password = md5($p['user_password']); 
     $u->user_regdate = mktime(); 
     $u->user_active = 0; 
     $u->insert(); 
     $hash = md5($u->user_email . $u->user_regdate); 

     $smarty->assign('hash', $hash); 
     $smarty->assign('user', $u); 

     $smarty->assign('registration_complete', true); 

     $d = new H_Demographic; 
     $d->setFrom($p); 
     $d->insert(); 

Comment puis-je savoir ce qui ne va pas ici? Je ne reçois aucune erreur PHP et je ne sais pas comment obtenir MySQL pour afficher les erreurs qui pourraient indiquer ce qui ne va pas avec cette syntaxe.

PLUS D'INFO PAR DEMANDE EN

# 
# Table structure for table `user` 
# 

DROP TABLE IF EXISTS `user`; 
CREATE TABLE `user` (
    `user_id` mediumint(8) NOT NULL default '0', 
    `user_active` tinyint(1) default '1', 
    `username` varchar(25) NOT NULL default '', 
    `user_password` varchar(32) NOT NULL default '', 
    `user_session_time` int(11) NOT NULL default '0', 
    `user_session_page` smallint(5) NOT NULL default '0', 
    `user_lastvisit` int(11) NOT NULL default '0', 
    `user_regdate` int(11) NOT NULL default '0', 
    `user_level` tinyint(4) default '0', 
    `user_posts` mediumint(8) unsigned NOT NULL default '0', 
    `user_timezone` decimal(5,2) NOT NULL default '0.00', 
    `user_style` tinyint(4) default NULL, 
    `user_lang` varchar(255) default NULL, 
    `user_dateformat` varchar(14) NOT NULL default 'd M Y H:i', 
    `user_new_privmsg` smallint(5) unsigned NOT NULL default '0', 
    `user_unread_privmsg` smallint(5) unsigned NOT NULL default '0', 
    `user_last_privmsg` int(11) NOT NULL default '0', 
    `user_emailtime` int(11) default NULL, 
    `user_viewemail` tinyint(1) default NULL, 
    `user_attachsig` tinyint(1) default NULL, 
    `user_allowhtml` tinyint(1) default '1', 
    `user_allowbbcode` tinyint(1) default '1', 
    `user_allowsmile` tinyint(1) default '1', 
    `user_allowavatar` tinyint(1) NOT NULL default '1', 
    `user_allow_pm` tinyint(1) NOT NULL default '1', 
    `user_allow_viewonline` tinyint(1) NOT NULL default '1', 
    `user_notify` tinyint(1) NOT NULL default '1', 
    `user_notify_pm` tinyint(1) NOT NULL default '0', 
    `user_popup_pm` tinyint(1) NOT NULL default '0', 
    `user_rank` int(11) default '0', 
    `user_avatar` varchar(100) default NULL, 
    `user_avatar_type` tinyint(4) NOT NULL default '0', 
    `user_email` varchar(255) default NULL, 
    `user_icq` varchar(15) default NULL, 
    `user_website` varchar(100) default NULL, 
    `user_from` varchar(100) default NULL, 
    `user_sig` text, 
    `user_sig_bbcode_uid` varchar(10) default NULL, 
    `user_aim` varchar(255) default NULL, 
    `user_yim` varchar(255) default NULL, 
    `user_msnm` varchar(255) default NULL, 
    `user_occ` varchar(100) default NULL, 
    `user_interests` varchar(255) default NULL, 
    `user_actkey` varchar(32) default NULL, 
    `user_newpasswd` varchar(32) default NULL, 
    `first_name` varchar(40) NOT NULL default '', 
    `last_name` varchar(40) NOT NULL default '', 
    `level` int(10) unsigned NOT NULL default '0', 
    `disabled` tinyint(1) NOT NULL default '0', 
    PRIMARY KEY (`user_id`), 
    KEY `user_session_time` (`user_session_time`) 
) TYPE=MyISAM; 
+1

Le code que vous montrez n'est pas pertinent, nous devons voir ce que fait '$ d-> insert()'. –

+0

Le schéma de la table (s) liée à la classe 'H_User' serait également bon. – prodigitalson

Répondre

0

J'essaie toujours de comprendre cela et jeter cela dans un commentaire par rapport à une réponse si je présente mes excuses si cela apparaît comme une réponse parce que ce n'est pas . Essayez de mettre le code suivant pour cracher vos erreurs:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

Vous pouvez regarder votre fichier php.ini pour permettre l'affichage des erreurs aussi bien.

+0

ajouté ce code, mais aucune erreur n'a été révélée – mobius1ski

0

Avez-vous accès au journal des erreurs de votre serveur? Cela devrait montrer des erreurs MySQL, je pense. Mais comme Pekka l'a dit, ce n'est pas vraiment assez d'infos pour continuer.

+0

je le fais, mais il ne signale pas les erreurs mysql ou des erreurs liées à ce site. – mobius1ski

0

Les connexions MySQL ont toutes un moyen d'accéder aux dernières erreurs lancées par elles. Cela dépend de la méthode que vous utilisez pour vous connecter à la base de données. Par exemple, j'utilise mysqli class. Par conséquent, à titre d'exemple directement sur le site Web de PHP:

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

/* check connection */ 
if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit(); 
} 

if (!$mysqli->query("SET a=1")) { 
    printf("Errormessage: %s\n", $mysqli->error); 
} 

comment je pouvais connecter et récupérer une erreur si elle a été levée. Comment envoyez-vous des données à la base de données? Avez-vous un exemple de code qui injecte les données dans la base de données?

0

mis

trigger_error(mysql_error()); 

après

$d->insert(); 

Modifier:

Comme Marc B a, vous devez utiliser

trigger_error(mysqli_error()); 

à la place pour mysqli_ fonctions. PHP peut parfois être boiteux.

+0

Cela ne fonctionnerait que si smarty utilise les fonctions mysql _ *() en interne. Si vous utilisez mysqli directement, ou indirectement via MDB2/PDO, cela sera inutile. –

+0

@Marc B: Comment ça? Est-ce que Smarty contourne les fonctions MySQL de PHP? Selon le manuel, 'mysql_error()' "Retourne le texte d'erreur de la dernière fonction MySQL." Sûrement que ce serait * un * appel à MySQL? – Duncan

+0

mysqli et mysql utilisent des pools de connexions séparés. Un handle db produit dans un ne peut pas être utilisé dans les appels de fonctions équivalents de l'autre. –

Questions connexes