PHP et Sqlserv insert ligne dans une table

Résolu/Fermé
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020 - Modifié le 10 mai 2020 à 17:54
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020 - 17 mai 2020 à 17:25
Bonjour,
J’ai profité du confinement pour mi remettre, mais ce n’est pas comme le vélo, je suis donc débutant. Ça fait 3 jours que je galère pour certainement ce qui va vous paraitre simple. Je vais essayer d’être le plus clair possible. Je voudrais que l’utilisateur puisse ajouter un album mais voilà la ligne dans la table albums ne se crée pas. Si j‘insère manuellement cette ligne il n’y a aucun pb coté utilisateur il peut remplir avec ces photos… Mais voilà l’idée c’est que c’est lui qui doit pouvoir crée ses propres albums avec les noms qui veut. J’ai beau tourner le problème dans tous les sens et aucun résultat j’ai cherché sur Google et j’en suis toujours au même point, je dois passer à côté d’un truc. Désespérer s’il vous plait j’ai besoin de votre aide.
<?php
include "../base/base.php";
session_start();
$idc=$_SESSION["cnx"];
$titre=$_GET["t"];


// crée une entrée dans la table albums et récupère l'id de l'album comme nom du sous dossier
$sql="insert into albums
set idc=:cnx,
 titre=:t,
autorisation=0";
$rq=$db->prepare($sql);
$rq->bindParam(":cnx",$idc);
$rq->bindParam(":t",$titre);
$rq->execute(); 
$albid=$db->lastInsertId();

mkdir("../images/perso/".$idc."/".$albid."");

$chemin="../images/perso/3556/Bonbon"; // si je mets "..." pour mkdir ça me crée bien le sous répertoire bonbon dans 3556//


?>

En gros je dois récupérer l’id de l’utilisateur qui deviendra idc dans la table albums, je récupère également le titre que l’utilisateur a saisi, et ça doit créer l’id qui s’auto renseigne par rapport au dernier id crée. La ligne est sensée se créer dans la table puis vient la création du sous répertoire qui prendra le nom de l’id de la table albums
Je pense que ça ne récupère pas l’id de l’utilisateur et donc rien ne se fait. Dans la page précédente il y a :
<?php
include "../base/base.php";
include "../outils/fonctions.php";
/* sécurité */
session_start();
$id=0;
if (isset($_SESSION["cnx"])) {
  $id=$_SESSION["cnx"];
}
if ($id==0) {
 header("location: ../index.php?m=1");
}
activer($id);

// caractéristiques "uniques"
$sqlspec="select pseudo, image from users where id=:id";
$rqspec=$db->prepare($sqlspec);
$rqspec->bindParam(":id",$id);
$rqspec->execute();
$perso=$rqspec->fetch(PDO::FETCH_ASSOC);

// nombre de visites
$nbv=nbv($db,$id);

// albums privés
$sqlal="Select
  albums.id,
  albums.titre
From
  albums
Where
  albums.idc = :id";
$rqal=$db->prepare($sqlal);
$rqal->bindParam(":id",$id);
$rqal->bindColumn("id",$albid);
$rqal->bindColumn("titre",$albtitre);
$rqal->execute();

?>

Puis :
<script>
 function gal(dir) {
  $("#galerie").hide().load("../serveurs/galerie.php?d="+dir,function(){
  $('#galerie a').lightBox();
  $("#galerie").slideDown();
  });
 }
 
 function addalbum() {
  titre=prompt("Titre du nouvel album");
  $.get("../serveurs/addalbum.php?t="+titre,function() {
   location.reload();
  });
 }
 
 function delAlb(n) {
  if (confirm("Confirmez la suppression de l'album")) {
   $.post("../serveurs/delalb.php?n="+n,function() {
    location.reload();
   });
  }
 }

 function gesphot(a) {
  location.href="gesphot.php?a="+a;
 }

 function closedetailsvisites() {
  $("#detailsvisites").hide();
 }
 
 function listvisites() {
  id=<?php echo $id;?>;
  $("#visiteurs").load("../serveurs/listevisites.php",{id: id},function(){
   $("#detailsvisites").show();
  })
 }


</script>


Et :
<div id="sideleft">
  <ul>
   <li><a href="#" onClick="addalbum();">Ajouter un album</a></li>
   <li><a href="photos.php">Retour</a></li>
  </ul> 
 </div>

EDIT Ajout du LANGAGE dans les BALISES DE CODE

Voili voilou si une âme charitable a une idée sur ce que j’ai loupé, se serait super car je ne sais plus quoi faire.
A voir également:

6 réponses

jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
10 mai 2020 à 17:59
Bonjour,

Avant tout ... tu es sûr que c'est du sqlserver ?
Ca ne serait pas plutôt du mysql ? ( car les variables nommées.. il me semblais que ça ne passait pas en sqlserver )

Et si sqlserver.. quelle version ?

Ensuite.. d'où vient ta variable $_SESSION["cnx"] ?
A quels fichiers correspondent chaque script que tu nous montres ??
Lequel correspond, par exemple, au fichier addalbum.php ?

Que contient ton fichier fonctions.php où se trouve, certainement la fonction activer()




0
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020
10 mai 2020 à 18:44
Bonjour, oui en effet c'est Mysql me suis trompé d'endroit désolé, le premier script c'est dans addalbum.php, les autres dans gphotopriv.php qui est visible de l'utilisateur quand il se connecte
0
jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
10 mai 2020 à 18:51
Je déplace donc ta question au bon endroit.
Par contre, je ne sais toujours pas d'où vient ta variable de session...

Je précise également qu'une requête INSERT ne se fait pas avec un SET ......
ça c'est pour un UPDATE ( même si mysql peut le comprendre.. c'est fortement déconseillé de l'utiliser).
Il faut utiliser la vraie syntaxe sql ...
INSERT INTO matable ( champ1 , champ2 ...)
VALUES ( "valeur1", "valeur2".. )


Et vu que tu fais du PDO, il serait bien
1 - d'activer l'affichage des erreurs PDO
2 - De placer CHAQUE requête dans un bloc TRY/CATCH
3 - Afficher les erreurs PHP

Je t'invite à lire et à appliquer le contenu de ce lien :
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


Ensuite,
Tu nous dis

le premier script c'est dans addalbum.php

Hors.. ce script est appelé en AJAX
 $.get("../serveurs/addalbum.php?t="+titre,function() {
   location.reload();
  });

Déjà, il est préférable de faire du POST au lieu du GET (lorsque l'on fait de l'ajout, modification...)
Ensuite, ton "reload" ne te permet pas de voir les éventuelles erreurs.
Il serait bien, d'ailleurs, de le mettre en commentaire et de regarder dans la console de ton navigateur ce qui s'y passe.
(pour ça, je te conseille d'utiliser FireFox, dont la console est plus simple à utiliser pour débuguer de l'ajax ).
Tu peux éventuellement nous en mettre une capture écran ( pense bien à activer le debugage xhr )
0
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020
Modifié le 10 mai 2020 à 19:55
Merci beaucoup je vais voir tout ça, pour fonction.php il contient en ce qui concerne l'album :
//////////////////// pour album privé
function loadpriv($originale,$pid,$albid,$tmax=500) {
 // $originale = $_FILES['photo'];
 // $idc = id user dans la table albums
 // $max = 500 par défaut pour les photos
 // albid = id de l'album dans la table albums, c'est en même temps le nom du sous dossier
 // de /images/perso/idc/albid
 // transformation en .jpg pour simplification
 
 $nomphoto=strtolower($originale['name']);
 $definitive="../images/perso/".$pid."/".$albid."/".$nomphoto;
 $destination = '../images/upload/'.$nomphoto;

 move_uploaded_file($originale['tmp_name'], $destination);
 
 $extension=strrchr($nomphoto,".");
 // création image temporaire
 switch ($extension) {
  case ".jpg":
  case ".jpeg":
   $image=imagecreatefromjpeg($destination);
   break;
  case ".gif":
   $image=imagecreatefromgif($destination);
   break;
  case ".png":
   $image=imagecreatefrompng($destination);
   break;
 }

 $taille=getimagesize($destination);
 $largeur=$taille[0];
 $hauteur=$taille[1];
 
 if ($largeur < $hauteur) { 
 $nlargeur=round(($largeur*$tmax)/$hauteur); 
 $nhauteur=$tmax;
 } else { 
 $nhauteur=round(($hauteur*$tmax)/$largeur); 
 $nlargeur=$tmax; 
 }

 $nouv=imagecreatetruecolor($nlargeur,$nhauteur);
 imagecopyresampled($nouv,$image,0,0,0,0,$nlargeur,$nhauteur,$largeur,$hauteur);
 
 // sauvegarde image jpeg dans emplacement definitif
 imagejpeg($nouv,$definitive,100);

 unlink($destination);
}


function sql2fr($dt) {
 $dx=explode("-",$dt);
 $dr=array_reverse($dx);
 $res=implode("/",$dr);
 return $res;
}

function sql3fr($dt) {
 $dy=explode(" ",$dt);
 $dx=$dy[0];
 return sql2fr($dx);
}

j'ai rajouté un include dans le fichier addalbum.php mais sans résultat, je vais voir déjà tout ce que tu m'as dit.
0
jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
10 mai 2020 à 20:14
Ta fonction activer($id); .. elle se trouve dans quel fichier ?
Si elle n'est pas dans le fichier fonction.php ... c'est qu'elle se trouve ailleurs... mais tu n'as pas inclus le fichier correspondant.
0
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020
10 mai 2020 à 20:20
Non elle est sur gphotopriv.php qui appelle la fonction addalbum ()
0
jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
10 mai 2020 à 20:26
Sauf que tu appelles addalbum en ajax .... donc les fichier php qui sont chargés dans la fenêtre qui exécute le Javascript ne le sont pas dans le script appelé...
Il faut inclure tous les fichiers nécessaire dans ton fichier addalbum.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020
Modifié le 10 mai 2020 à 21:26
effectivement la fonction activer($id) se trouve dans fonction.php
function activer($id) {
 global $db;
 $sqlact="update users 
 set connexion=addtime(now(),'0:10:0') 
 where id=:id";
 $rqact=$db->prepare($sqlact);
 $rqact->bindParam(":id",$id);
 $rqact->execute();
}
0
jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
10 mai 2020 à 20:31
Tu ne l'avais pas mis lorsque tu nous as collé le code du fichier tout à l'heure.....
Mais ok.

Donc fais les corrections que je t'ai proposé et regarde la console de ton navigateur.
Reviens nous voir ensuite...

PS : Lorsque tu postes ton code, merci d'indiquer le langage dans les balises afin d'avoir la coloration syntaxique. Ca fait plusieurs fois que je corrige tes messages....
Pour plus d'infos, merci de lire entièrement ce qui est indiqué ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020 > jordane45 Messages postés 38325 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024
17 mai 2020 à 17:25
Bonjour,
finalement le problème est résolu et c'était tout simple.
autorisation=0";

n'avait rien à faire dans le fichier addalbum.php
Finalement c'est juste :
$sql="insert into albums
set
idc=:cnx,
titre=:t";
$rq=$db->prepare($sql);
$rq->bindParam(":cnx",$idc);
$rq->bindParam(":t",$titre);
$rq->execute();
$albid=$db-> lastInsertId();

Il n'y avait aucune erreur détectée, je me suis focalisé sur :
lastInsertId()
où j'ai cru comprendre que ce n'était compatible que par Sql Serveur et pas ou plus sur Mysql, mais finalement c'est bon.
0
nicolas06100 Messages postés 12 Date d'inscription lundi 4 mai 2020 Statut Membre Dernière intervention 1 juin 2020
10 mai 2020 à 21:03
Ok Merci beaucoup , j'suis nouveau sur le site j’apprends sur le tas, jviens de voir pour le langage jvais voir pour les corrections, concernant la console elle ne semble pas détecter d'erreur mais bon j'vais lire tout ce que tu m'as indiqué et appliquer tout ce que tu m'as dit puis je reviendrais. A l'époque cette page fonctionné correctement c'est ça que je trouve bizarre.
0