de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par thuillier-charmet » 27 févr. 2020, 12:26

Le @ devant une fonction sert juste à masquer les erreurs s'il y en a.

Et j'ai pas lu tout le code mais je vois déjà ici une erreur :
// ici ça fait un seul paramètre
@mysqli_query("$connection , $result");

// comme ça c'est mieux si ce n'est que le deuxième paramètre est sensé
// être une requête et non un résultat
@mysqli_query($connection , $result);


il y a moins d’une minute
ah! merci , c'était un peu trop bien (j'ai pas trouvé le smiley mort de rire :D )

J'ai résolus le probléme pour le nombre de pétitionnaires grâce a l'excellent tuto pour les requetes https://sql.sh/fonctions/agregation/count
 
 // Gestion des requêtes
    
    $sql = "SELECT * FROM `power_petition`";
    
    // On compte le nombre de petitionnaires
    $result = mysqli_query($connection , $sql);
    $row_cnt = mysqli_num_rows($result);

   // On affiche ce nombre
    printf("Il y a %d petitionnaires.\n", $row_cnt);

    /* Fermeture du jeu de résultats */
    mysqli_free_result($result);
    }

    echo '</table></center>';

    /* fermeture de la connexion MYSQL */
    mysqli_close($connection);
    

?>

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par thuillier-charmet » 26 févr. 2020, 17:22

Le @ devant une fonction sert juste à masquer les erreurs s'il y en a.

Et j'ai pas lu tout le code mais je vois déjà ici une erreur :
// ici ça fait un seul paramètre
@mysqli_query("$connection , $result");

// comme ça c'est mieux si ce n'est que le deuxième paramètre est sensé
// être une requête et non un résultat
@mysqli_query($connection , $result);


il y a moins d’une minute
ah! merci , c'était un peu trop bien (j'ai pas trouvé le smiley mort de rire :D )

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par Saian » 26 févr. 2020, 16:46

Le @ devant une fonction sert juste à masquer les erreurs s'il y en a.

Et j'ai pas lu tout le code mais je vois déjà ici une erreur :
// ici ça fait un seul paramètre
@mysqli_query("$connection , $result");

// comme ça c'est mieux si ce n'est que le deuxième paramètre est sensé
// être une requête et non un résultat
@mysqli_query($connection , $result);

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par thuillier-charmet » 26 févr. 2020, 16:39

rebonjour,

j'ai refait le script en mode procédurale :
<?php

    echo '<center><table><tr><td><b>Nom</b></td><td><b>Prénom</b></td><td><b>Date de signature</b></td><td><b>country name</b></td></tr>';

    // On se connecte à la base de données
    $connection = mysqli_connect("$host", "$login", "$password", "$bdd");
    if (mysqli_connect_errno()) 
    {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  exit;
    }

    // On sécurise les champs
    $nom = htmlspecialchars($_POST['nom']);
    $prenom = htmlspecialchars($_POST['prenom']);
    $pays = htmlspecialchars($_POST['pays']);
    $date = date('d/m/Y');
    $submit = htmlspecialchars($_POST['submit']);

    // On vérifie que tous les champs sont bien remplis
    if($submit && empty($nom))
    {
        // Message d'erreur
        die('<center>Vous devez remplir tous les champs.<br /><br /></center>');
    }

    if($submit && empty($prenom))
    {
        // Message d'erreur
        die('<center>Vous devez remplir tous les champs.<br /><br /></center>');
    }
    if($submit && empty($pays))
    {
        // Message d'erreur
        die('<center>Vous devez remplir tous les champs.<br /><br /></center>');  
    }

    // On vérifie que les champs sont assez longs pour être raisonnables
    $long1 = strlen($nom);
    $long2 = strlen($prenom);
    $long3 = strlen($pays);
    // Si le nom est trop court (plus petit que 3 caractères)
    if($submit && $long1 < '3')
    {
        // Message d'erreur
        die('<center>Votre nom doit faire plus de 3 caractères.<br /><br /></center>');
    }

    // Si le prénom est trop court (plus petit que 3 caractères)
    if($submit && $long2 < '3')
    {
        // Message d'erreur
        die('<center>Votre prénom doit faire plus de 3 caractères.<br /><br /></center>');
    }
    // Si le pays est trop court (plus petit que 3 caractères)
    if($submit && $long3 < '3')
    {
        // Message d'erreur
        die('<center>Votre pays doit faire plus de 3 caractères.<br /><br /></center>');
    }

    if($submit)
    {
        // On enregistre la participation à la pétition
      $result = mysqli_query($connection, "INSERT INTO power_petition VALUES , ('', '" . $nom . "', '" . $prenom . "', '". $date ."','". $pays ."')");
      
    }

    // On sélectionne les résultats
    $sql = @mysqli_query("$connection , $result");


    // On compte le nombre de signatures
    $signs = @mysqli_num_rows($sql);

    while($donnees = @mysqli_fetch_array($sql))
    {

?>
et je n'ai plus d'erreur mais ca bug pour mettre en forme, je ne vois pas que viens faire @mysqli dans cette histoire #-o (je suppose aussi qu'il faut utiliser la fonction array :?: )
si je comprends bien on securise les champs avec real_escape_string :?: comme vue avec l'excellent tuto (post446278.html#p446278) :) :?:
un petit coup de pouce ferait pas de mal , merci

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par @rthur » 25 févr. 2020, 16:20

je rajoute donc un i pour mysql_query et mysql_close et @mysqli_num_rows et @mysql_fetch_array comme vu "bétement" dans l'excellent tuto (post446278.html#p446278)
Il y avait aussi un paragraphe en gras qui commence par IMPORTANT, dans cet excellent tuto :D

Re: de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par Saian » 25 févr. 2020, 14:57

Salut, si tu prends le temps de lire la documentation de ces fonctions, tu verras qu'il faut passer le lien mysqli (récupérer lors de la connexion) en paramètre, ce qui n'était pas nécessaire avec les fonctions mysql.

de l'aide i am dead with 7,3 ! ( migration php 5,4->7,3)

par pascal1961 » 25 févr. 2020, 14:42

Bonjour,

J'ai un petit script qui marchait parfaitement bien avec php 5.3 mais avec l'obsoléte fonction mysql ,avec 7,3 les choses se complique pour le newbe que je suis.
le script (c'est une petition basique) a transformé en 7,3 est :
<?php
 echo '<center><table><tr><td><b>Nom</b></td><td><b>Prénom</b></td><td><b>Date de signature</b></td><td><b>country name</b></td></tr>';
    // On se connecte à la base de données
1     mysql_connect("$host", "$login", "$password");
2   mysql_select_db("$bdd");
    // On sécurise les champs
3    $nom = htmlspecialchars($_POST['nom']);
4    $prenom = htmlspecialchars($_POST['prenom']);
5   $pays = htmlspecialchars($_POST['pays']);
6   $date = date('d/m/Y');
7    $submit = htmlspecialchars($_POST['submit']);
    // On vérifie que tous les champs sont bien remplis
8    if($submit && empty($nom))
9   {
        // Message d'erreur
10        die('<center>Vous devez remplir tous les champs.<br /><br /></center>');
11  }
12   if($submit && empty($prenom))
13 {
        // Message d'erreur
14      die('<center>Vous devez remplir tous les champs.<br /><br /></center>');
15  }
16 if($submit && empty($pays))
17 {
        // Message d'erreur
18  die('<center>Vous devez remplir tous les champs.<br /><br /></center>');  
19 }
    // On vérifie que les champs sont assez longs pour être raisonnables
20 $long1 = strlen($nom);
21 $long2 = strlen($prenom);
22 $long3 = strlen($pays);
    // Si le nom est trop court (plus petit que 3 caractères)
 23 if($submit && $long1 < '3')
 24 {
        // Message d'erreur
 25     die('<center>Votre nom doit faire plus de 3 caractères.<br /><br /></center>');
 26 }
    // Si le prénom est trop court (plus petit que 3 caractères)
 27 if($submit && $long2 < '3')
28 {
        // Message d'erreur
29   die('<center>Votre prénom doit faire plus de 3 caractères.<br /><br /></center>');
30 }
    // Si le pays est trop court (plus petit que 3 caractères)
31    if($submit && $long3 < '3')
32   {
        // Message d'erreur
33        die('<center>Votre pays doit faire plus de 3 caractères.<br /><br /></center>');
34    }
35  if($submit)
36    {
        // On enregistre la participation à la pétition
37       mysql_query("INSERT INTO power_petition VALUES('', '" . $nom . "', '" . $prenom . "', '". $date ."','". $pays ."')");
38   }
    // On sélectionne les résultats
39  $sql = mysql_query('SELECT * FROM power_petition ORDER BY id DESC');
    // On compte le nombre de signatures
40   $signs = @mysql_num_rows($sql);
41  while($donnees = @mysql_fetch_array($sql))
42   {
43 ?><tr><td><?php echo $donnees['nom']; ?></td><td><?php echo $donnees['prenom']; ?></td><td><?php echo $donnees['date']; ?></td><td><?php echo $donnees['pays']; ?></td></tr>
44 <?php
45  }
46    echo '</table></center>';
    // On ferme la connexion MYSQL
47  mysql_close();
48 ?>
a la ligne 1 je mets :
mysqli_connect("$host", "$login", "$password" , "$bdd");
et le message d'erreur disparait.
je rajoute donc un i pour mysql_query et mysql_close et @mysqli_num_rows et @mysql_fetch_array comme vu "bétement" dans l'excellent tuto (post446278.html#p446278)

pour produire 2 nouvelles erreurs :
"call to undefinied function mysqli_query() expected at least 2 parameters 1 is given "
"mysqli_cloase () expects exactly 1 parameters o is given"
mais cela ne fonctionne pas , trop simple ?? #-o :?:

merci pour votre aide