8722 sujets

Développement web côté serveur, CMS

Pages :
(reprise du message précédent)

Ca améliore les performances en terme de mémoire de déclarer les variables avant de les utiliser (ça permet de savoir au serveur qu'il y aura x variables et donc x places de mémoires à prévoir).

Mais non, c'est pas capital, comme dit, c'est qu'une "notice", pas un warning. Mais c'est une erreur à corriger pour la refonte ^^
Merci de ta réponse,

J'ai un soucis de securité que je ne comprends pas bien,

j'ai ça qui normalement empèche d'aller en backoffice sans être authentifié


<?php session_start(); 
//echo "ID : $Ses_id";
        //die(); //Termine le script 
   if(!isset($_SESSION))

	{ 
        $verification ="formlogin.php?retour=index.php";  
        //C'est la page de login/password 
        //retour contient le chemin de la présente page. 
        echo "<script language='JavaScript'>\n 
            document.location.replace('$verification'); 
            </script>\n"; 
        die(); //Termine le script 
     } 
    ?> 


ça qui me déconnecte ma session


<?php session_start();         
    unset($_SESSION[Ses_id]);
    session_unset();
    
    setcookie("lefPseudo","",time()+86400*365); 
    setcookie("lefPass","" ,time()+86400*365); 
    session_write_close();
    
        if (!isset($retour)){ 
                $retour = "/"; 
                //on définit une valeur de retour au cas ou. 
        } 
        echo "<script language='JavaScript'> 
        document.location.replace('index.php'); 
        </script>"; ?>




et enfin ça qui vérifie pour toute les pages backoffice que la personne est bien en session autorisée à afficher la page


<?php session_start(); 
//echo "ID : $Ses_id";
        //die(); //Termine le script 
   if(!isset($_SESSION))

	{ 
        $verification ="formlogin.php?retour=index.php";  
        //C'est la page de login/password 
        //retour contient le chemin de la présente page. 
        echo "<script language='JavaScript'>\n 
            document.location.replace('$verification'); 
            </script>\n"; 
        die(); //Termine le script 
     } 
    ?> 



apparemment là je rentre dans toutes les pages sans être connecté
en fait je pense que c'est le dernier script qui n'est pas bon (à tout le moins) parce qu'il ouvre la session et demande ensuite si elle est ouverte je pense qu'il faudrait qu'il demande une variable de sécu plutôt que demander si la session est ouverte non ?
Je vérifie ainsi :

if(!isset($_SESSION['id'])){header("location: index.php");};


Je déco ainsi :

// On démarre la session  
session_start ();  
 
// On détruit les variables de notre session  
session_unset ();  
 
// On détruit notre session  
session_destroy (); 
header("location:index.php");
Tu es un peu en train de me dire que j'avais une uzine à gaz pour pas grand chose !!
Smiley cligne

merci ça a l'air de parfaitement marcher

Je me trompe ou dans mon site en php 3 ou 4 les variables de sessions etaient persitantes et là il va falloir que je les appelles dans toutes les pages ?
Aucune idée pour le temps du php 3/4, j'ai démarré au PHP 5... Smiley biggol

Mais ça n'empêche pas que c'est persistant en php5, faut juste le session_start() à mettre tout en début du fichier (à la toute, toute première ligne). Elle a même l'avantage d'être une super-globale donc d'être globale dans tous les contextes et automatiquement (genre dans les fonctions et les méthodes).
Bon alors je pense que ça n'a pas du changé
en revanche pour les passer ces variable de cession ça coince encore



 $array=mysqli_fetch_assoc($requete);
  
        $Ses_id=$array["ID"];
        $Ses_pseudo_membre=$array["LOGIN"];
        $Ses_pseudo_pass=$array["PASSWORD"];
   // CHAMPS SUPLEMENTAIRES
   // Si vous avez ajouté des champs dans la table SQL, inspirez-vous de la ligne précédente pour récupérer leur valeur. Exemple :
        $Ses_email=$array["Email"];
        $Ses_ville=$array["VILLE"];
        $Ses_societe=$array["Societe"];
        $Ses_nom=$array["Nom"];
        $Ses_prenom=$array["Prenom"];
        $Ses_cp=$array["CP"];

  
        $_SESSION[$Ses_id]; 
        $_SESSION['$Ses_pseudo_membre']; 
        $_SESSION['$Ses_pseudo_pass']; 
        $_SESSION['$Ses_email']; 
        $_SESSION['$Ses_ville']; 
        $_SESSION['$Ses_societe']; 
        $_SESSION['$Ses_nom']; 
        $_SESSION['$Ses_prenom'];
        session_write_close();



J'obtient des messages""undefine index" je pense que c'est parce que ce sont des array
Euh... C'est quoi ces variables entouré de simple quote en guise de clé ? Smiley biggol

Tu voulais pas plutôt faire :

$_SESSION['id']=$Ses_id; 

(ou un truc approchant)

$_SESSION se gère exactement comme un tableau, vu que c'en est un... Tu peux d'ailleurs même directement faire :

$_SESSION['id']=$array["ID"];


Voire même encore plus marrant :

$_SESSION=mysqli_fetch_assoc($requete);

(dans ce dernier cas, les clés de $_SESSION seront les noms des champs de la requête SQL ^^)
oui elles sont super global mais je suis obligé de les appeler et de les associer à une variable en début de fichier si je ne veux pas tout réécrire non ?

C'est à dire que la où j'avais $Ses_id

Il faut que je fasse un include avec un fichier d'appel genre

$Ses_id=$_SESSION['Ses_id'];

ou je me trompe ?
Smiley biggrin

Oui mais non, je vais les déclarer dans le fichier secu.^hp qui est appelée dans chaque page connectée en session, comme ça je ne le fais qu'une fois !!! Smiley langue Smiley langue Smiley langue
bon alors là, ya un truc obsolète mais je ne trouve pas

Normalement ça doit me générer un fichier xml pour placer ensuite des repères google map
mais là ça me sort les noms de variables, pas les variables


<markers>
<ma n="IMMOID" a="LAT" b="LNG" t=""/>
<ma n="IMMOID" a="LAT" b="LNG" t=""/>
<ma n="IMMOID" a="LAT" b="LNG" t=""/>
<ma n="IMMOID" a="LAT" b="LNG" t=""/>
<ma n="IMMOID" a="LAT" b="LNG" t=""/>
...





$db_link = mysqli_connect($sql_serveur,$sql_user,$sql_passwd,$sql_bdd);
if(!$db_link) {echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier conf.php3"; exit;}


// Set the active mySQL database


// Select all the rows in the markers table
$query = "SELECT 'IMMOID','LAT','LNG','TYPELOG' FROM annonces WHERE ADMVISIBLE=0 AND VISIBLE=0 AND LAT!=0 ORDER BY DATEMAJ ASC";
//LAT !=0
$result = mysqli_query($db_link,$query);
if (!$result) {
  die('Invalid query: ' . mysqli_error());
}

//////////////////////////

$type= "bar";



// Start XML file, echo parent node
echo '<markers>';


// Iterate through the rows, printing XML nodes for each
while ($row = @mysqli_fetch_assoc($result)){
    
   // ADD TO XML DOCUMENT NODE
  echo '<ma ';
  echo 'n="' . $row['IMMOID'] . '" ';
  //echo 'address="' . parseToXML($row['VILLE']) . '" ';
  echo 'a="' . $row['LAT'] . '" ';
  echo 'b="' . $row['LNG'] . '" ';
  echo 't="' . definityp($row['TYPELOG']) . '" ';
  echo '/>';

}



bon je vais chercher mais si tu as la réponse je veux bien !-)
j'espère que tu n'es pas parti faire un tour du monde parce que je ne trouve pas
le while tourne bien sur le nombre de ligne revenu
mais il ne me sort pas les contenus des variables, j'ai remplacé $row par $array rien n'y fait
Non, rassure-toi, suis pas partie au bout du monde, je bossais juste (ouais, ça arrive les informaticiennes freelance qui bossent Smiley lol )

C'est à cause de ton mysql ^^

a écrit :
$query = "SELECT 'IMMOID','LAT','LNG','TYPELOG' FROM annonces WHERE ADMVISIBLE=0 AND VISIBLE=0 AND LAT!=0 ORDER BY DATEMAJ ASC";


Si tu passes ça dans phpmyadmin, tu vas avoir un magnifique tableau ressemblant à ça :

upload/32733-erreurmysq.png

Tu remarqueras que ça marche sur n'importe quel table et n'importe quel where (ça ne changera que le nombre de ligne). Ici, c'est sur une de mes tables ^^

La raison ? Tu as utilisé un simple quote. Il selectionne donc gentiment la valeur IMMOID, LAT, LNG, TYPELOG et, à défaut, crée même gentiment le champ du même nom (si c'est pas gentil ça).

Et donc là où tu as l'impression qu'il te retourne le nom du champs, il te retourne en fait la valeur que tu lui as demandé de renvoyer.

Comment empêcher ça ? C'est pas un simple quote qu'on utilise pour protéger les champs... C'est euh... un guillemet oblique (sorry aux fans de typo, je vois pas d'autre nom) qu'il faut utiliser.

"Et je trouve ça où ?" (t'as vu j'anticipe ^^) Bah sur mon clavier Belge c'est alt+%. Mais j'ignore si en azerty français ça existe et où le trouver... Je sais que c'est l'équivalent de l'accent aigu... donc au pire, un copier-coller ´ et tu l'as ^^

(au pire, tu ne protèges pas tes noms de champs. Ca n'est obligatoire que pour quelques signes particuliers comme le . et pour les champs et tables ayant des noms de fonction mysql comme Drop ^^)
Un grand merci pour ce cours qui a tout résolu en 5 s, chère amie Belge.
En effet des que j'ai retiré les quotes mon fichier a rendu le xml attendu
Demain je fais une pose je reprends sur le backoffice vendredi

Bonne soirée
Cezig
MDR, j'ai mis une heure à essayer de t'expliquer le pb ci dessous ou je n'arrivais pas à editer la variable $TODEL, et je viens de voir que je changeais d'encadrement de variable en passant de " " à ' ' et apparement PHP5.3 refuse !

Bon j'envoie quand même le mail parce que j'ai mis trop de temps à l'ecrire !

casse tête chinois

J'ai un script de suppression de photo qui doit supprimer le lien dans la base dans les champs PHOTO1 PHOTO2...

ET

le fichier correspondant dans le dossier construit avec la racine ANN_$IMMOID

L'indice 1,2,3 ou 4 (final du champs PHOTO) passe en $_GET URL par la Variable PIC idem pour le IMMOID

Les script m'éfface bien le bon lien dans la base

[code=php]
$reqstring = "SELECT * FROM annonces WHERE IMMOID = $IMMOID";

$requete=mysqli_query($db_link,$reqstring) or die(mysql_error());

$DataReturn = 0;
$DataReturn = mysqli_num_rows($requete);

$index = 0;
if( $DataReturn > 0)

{
$array=mysqli_fetch_assoc($requete);
$PIC=$_GET['PIC'];
$DELSTR = "PHOTO$PIC";

$PROPID=$array["PROPID"];
$PH1=$array["PHOTO1"];
$PH2=$array["PHOTO2"];
$PH3=$array["PHOTO3"];
$PH4=$array["PHOTO4"];

$TODEL = $array['$DELSTR'];
}
Autre question :

Est-ce que tu sais si pour la function

move_uploaded_file ($fichier, $dir);

il faut connaitre le chemin du serveur de type c:/serveur/...
ou si cela peut être un chemin relatif

mon script utilise l'adresse complète du chemin mais il ne fonctionne pas en php5.3

Merci et bon WE
Essaye plutôt : $DELSTR = "PHOTO".$PIC;

De base, pour les variables, essaye de les sortir du string (délimité par les " ") en utilisant le concaténage avec le point.

Là en fait, tu rentrais dans $DELSTR la valeur "PHOTO$PIC" et non pas PHOTO1, PHOTO2.

Pour la seconde question, je ne sais pas ^^
Pages :