J'utilise le code ci-dessous qui télécharge un fichier et insère des données dans la table "Image" à l'aide de MySQLI:
ImageId SessionId QuestionId 220 cat.png 1 221 dog.png 4
7 Réponses :
Premièrement, enregistrez l'ID d'insertion gagné à partir de votre addition d'enregistrement (après l'INSEXT> INSERT-> EXECUTE):
$lastID = $insert->insert_id;
Donc, pour les bind_params pour ImageID dans la deuxième requête, est-ce que Simplay $ $ LASID? E.g: $ insertImageQuesttion-> bind_param ("SSS", $ Last, $ sessid, $ _Post ['NumQuestion'] [$ i]); code>
Isnt l'ID d'image du 1er paramètre? $ insertImageQuestion-> bind_param ($ Last, $ sesside, $ _Post ['NumQuestion'] [$ i]);
Oui mais besoin d'utiliser SSS code> lors de la liaison des paramètres pour montrer que je lie trois paramètres. Chaque S représente un paramètre
Étant donné que les identifiants sont des nombres, il ne devrait-il pas être iii code> plutôt que
SSS code>?
Je viens de remarquer que dans votre exemple, SessionID est une chaîne comme "chien.png", pas un entier (il est confus d'appeler cela un identifiant). Donc, le paramètre Bind doit être ISI code>.
OK, essayez ceci: $ lastide = $ insertion-> insertion_id;
Tout d'abord, que se passe-t-il lorsque vous echo $ en dernier? Obtenez-vous une valeur de valeur à l'écran? P>
Sinon, nous devons la résoudre tout d'abord pour que $ ladide renvoie la valeur correcte. p>
Votre code d'insertion semble être correct. p>
Quand je fais écho au dernier $, rien n'apparaît à l'écran, mais si vous lisez le dernier paragraphe à ma question, je ne sais pas si quelque chose sortirait à l'écran car le téléchargement se produit sur une page séparée.
@ user1394925: Vous pouvez toujours observer la réponse du script de téléchargement à l'aide des outils de développement de votre navigateur ou d'autres outils tels que Fiddler2 .
Vous devez obtenir le dernier identifiant inséré de la première table et insérer dans votre 2e table (image_question). p>
Je ne connais pas le codage PHP, mais cette tâche est simple aussi. Cette opération sera exécutée à l'intérieur de Dao Class.so, que ce soit php ou java. p>
Si la deuxième insertion échoue, alors ceci devrait vous dire quelle est l'erreur provenant de l'exécution de l'instruction. p> Votre code PHP semble bien , l'erreur pourrait être due à une contrainte de clé étrangère ou à toute autre contrainte sur vos tables DB. P> PS: strong> Je pense que vous devez valider le type de fichiers que vous autorisez à être téléchargés Donc, les gens ne peuvent pas télécharger * .php ou * .js fichiers, cela peut conduire à des attaques catastrophiques XSS.
Essayez également d'éviter d'utiliser le même nom de fichier que tel que téléchargé par l'utilisateur, vous souhaiterez peut-être préfixer une variable aléatoire, de sorte que vous pouvez maintenant avoir p>
Il ne semble pas y jeter d'erreur du tout, mais je pense que le problème est qu'il lie une valeur nulle, car je pense que cela ne récupère pas la dernière "imageid". J'ai réalisé que je n'ai que 2 heures de la prime à gauche si rapidement, comment changeriez-vous le code PHP afin qu'il récupère le dernier "imageID"? En supposant que c'est le problème
Bind avec MySQLI fonctionne avec des références à des variables. Je ne pense pas que votre dernier argument dans la deuxième commande de commandes de la deuxième commande, la façon dont vous vous attendez.
Attribuez le dernier argument $ _Post ["$ i] à une variable et utilisez cette variable dans l'appel de méthode de liaison . Je suppose que ceci n'est pas défini, évaluant à NULL, et la liaison est défaillante puisque vous ne pouvez pas lier une null comme une chaîne ou une liaison ne peut pas utiliser un tableau multidimensionnel puisque l'introduction d'une variable passée à titre de référence. P>
Essayez ceci: p>
//Below will set a default value of empty string if the POST variable is not set $postVar = isset($_POST['numQuestion'][$i])?$_POST['numQuestion'][$i]:''; $insertimagequestion->bind_param("sss", $lastID, $sessid, $postVar);
Supposons que la deuxième liaison ne fonctionne pas, comment changeriez-vous le code PHP pour le faire fonctionner? Je ne peux pas sembler obtenir l'erreur d'être affichée car la page de fichier de téléchargement est sur un fichier PHP séparé sur la page qui effectue en réalité le téléchargement à l'aide d'un plugin et de Ajax
@ user1394925 Le code nouvellement ajouté ci-dessus protégera contre les valeurs nulles liées et atténuera les problèmes de référence avec le travail avec une matrice multidimensionnelle. Vous voudrez peut-être faire de la valeur par défaut de Postvar d'une autre que la chaîne vide '' ou vérifiez une valeur valide avant d'essayer l'insert.
Rien n'est inséré dans la table image_Question, aucune erreur apparaissant sur la page ImageUpload.PHP, mais la raison pour laquelle je pense que cela ne peut afficher aucune erreur est parce que le téléchargeur Ajax et le script PHP qui effectue le téléchargement est sur une page séparée et ils seul lien avec Ajax, ils se lient sur le fond
@ user1394925 En supposant que $ dedans, $ sesssid et $ postvar sont des chaînes légimitates, la liaison / exécution doit fonctionner. Vous pourriez avoir un conflit clé dans la DB ou quelque chose comme ça. Var_Dump Les résultats des deux insert d'objets après les exécuter dans votre journal d'erreur PHP et les examiner. C'est le moyen le plus simple d'inspecter si vous ne pouvez pas les transmettre à l'appel d'Ajax à l'affichage.
@ user1394925 Je voulais dire jeter le résultat de l'exécution des inserts. Vous pouvez obtenir cela avec $ insertion-> get_result () et $ insertImageQuestion-> get_result ()
J'ai essayé la $ insertion-> get_result () et $ insertifImageQuestion-> get_result () mais rien n'est émettre du tout
@ user1394925 Avez-vous fait quelque chose comme ceci: $ résultat = $ insertion-> get__result (); $ résultatt = var_export ($ résultat, vrai); error_log ($ résultattext); code> puis vérifié vos journaux d'erreur et n'a rien vu?
Pas de rayon d'erreur, rien dans le Firebug. J'ai ajouté une contrainte de clé foriegn entre la table d'images et l'image_Question en liant le champ ImageID, je ne sais tout simplement pas quel problème est
@ user1394925 Avez-vous vérifié vos journaux d'erreur PHP? /var/log/phperrors.php et les journaux d'erreur Apache?
Ce code $ résultat = $ insertion-> get__result (); $ résultatt = var_export ($ résultat, vrai); error_log ($ résultattext); code> ne fonctionne pas réellement.
@ user1394925 Force brute. Après chaque ligne de décharge chaque variable à votre journal d'erreur - quelque chose n'est pas ce qu'il semble. Si rien ne se connecte au journal, vous avez de plus gros problèmes.
J'ai essayé de déterminer où pourrait être l'échec.
Il n'y a pas de problème avec la deuxième requête et vous obtenez un dernier identifiant d'insertion avec succès. J'ai utilisé des valeurs statiques pour les variables pour la deuxième requête qui fonctionnait bien. Même si vous pouvez vérifier les valeurs du codes sans check. P>
Prenez soin de la foll: p>
if (!$insertimagequestion = $mysqli->prepare("$imagequestionsql")) { // Handle errors with prepare operation here echo "Prepare statement err"; } if ($insert->errno) { // Handle query error here echo "insert execution error"; }
Je vais essayer votre réponse, $ Last et $ Sessid Aller dans des colonnes où il ne permettrait pas de valoriser les valeurs nulles, mais cela ne devrait pas être un problème car je souhaite insérer ces valeurs dans ces colonnes, non?
Vérification de 500 Erreur Code> Réponses en Firebug -> Outils de développeur NET / Chrome -> Onglet Réseau. Même si rien n'est retourné en tant que texte, cela vous aidera à déboguer une erreur de syntaxe / sémantique par opposition à une erreur logique. P>
Vous devriez probablement vraiment gérer les erreurs au lieu de simplement les ignorer. Cela vous dira probablement ce qui ne va pas.
$ _ POST ['NUMQUESTION'] [$ I] code> - Où avez-vous défini
$ i code>?