URGENT ECOLE : Insertion MySQL dans une boucle FOR (php)

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 14:29

C'est clair, il faut s'aider! :roll: 8)

Un dernier truc tout simple pour un qui connait un peu mieux, comment vérifier si une table est vide? J'avais pensé à faire un SELECT sur l'id 1 par exemple pour voir si la table est vide ou pas, mais l'idéal serait une fonction qui vérifie si une table est vide ou pas. Ca existe? :lol:

Merciiii.

Mammouth du PHP | 19672 Messages

01 mai 2005, 14:36

SELECT COUNT(*) FROM `table`

Si le résultat retrouné est 0, la table est vide. ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 15:01

Euh ça vérifie s'il existe des champs dans la table ça apparemment. Moi je voudrais vérifier si les nombres premiers ont déjà été insérés car sinon il réinsère à chaque fois de 2 à 97 avec un ID incrémenté (après 97 ca revient à 2 et ainsi de suite).

Code : Tout sélectionner

if($j > $k) { // Séléctionne toute la table $select = "SELECT COUNT(*) FROM `$tablename`;"; $cmd_select = mysql_query($select) or die ("<br>Erreur de séléction dans la table $tablename"); // Teste si l'insertion n'a pas déjà été effectuée. Si ce n'est pas le cas, insertion des nombres 1ers if($cmd_select == 0) { // Insertion dans la table $requete = "INSERT INTO `$tablename` (colonne2) VALUES (". $i .");"; $execution = mysql_query($requete) or die ("<br>Erreur d'insertion MySQL."); // Si l'insertion dans la table a échouée, affichage du code d'erreur ainsi que de sa description if(!$execution) { echo("<p>Erreur lors de l'insertion : Erreur numéro ". mysql_errno() ." <br>\nDescription de l'erreur : ". mysql_error() ."</p>\n"); } } }
Ceci ne m'insère rien donc cmd_select est égal à 0. Si je mets "!=" il m'insère bien mais après 97 revient à 2.

Une idée? :oops:

PS : Y a pas de problème sur le fait que à la dernière ligne, j'ai fais un retour de ligne à <br>, je l'ai fais au bon endroit?

Merci bcp. :wink:

Mammouth du PHP | 19672 Messages

01 mai 2005, 15:11

Par rapport à la question, ma réponse était juste, mais en fin de compte la question était erronée et aurait du être : comment vérifier qu'une référence existe dans une table ? C'est ça ?
Auquel cas, ce sera

Code : Tout sélectionner

SELECT count(`champ`) FROM `table` WHERE `champ` = 'valeur à vérifier';
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 15:13

Oups je teste si la valeur renvoyée vaut 0 mais faut tester si c'est vide en fait... J'ai remplacé == 0 par == "" mais ça ne va pas mieux. :roll:

Mammouth du PHP | 19672 Messages

01 mai 2005, 15:33

Tu as fait un raccourci saisissant dans ton code :
$cmd_select = mysql_query($select)
            or die ("<br>Erreur de séléction dans la table $tablename");

         // Teste si l'insertion n'a pas déjà été effectuée. Si ce n'est pas le cas, insertion des nombres 1ers
         if($cmd_select == 0)
Entre l'exécution de la requête et le test de la valeur, où donc est la récupération de ladite valeur ??
Peut-être bien qu'en faisant :
$cmd_select = mysql_query($select)
            or die ("<br>Erreur de séléction dans la table $tablename");
$resultat  = mysql_result($cmd_select);
         // Teste si l'insertion n'a pas déjà été effectuée. Si ce n'est pas le cas, insertion des nombres 1ers
         if($resultat == 0)
Tu auras des chances d'avoir un meilleur résultat... Mais ça, c'est le principe de fonctionnement. Il te reste à savoir ce que tu vas récupérer et comment le traiter pour faire des comparaisons : un seul résultat? plusieurs? Comment?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 15:37

Vala j'ai réussi autrement avec mysql_num_rows :

Code : Tout sélectionner

// Génération des nombres premiers et insertion de ces derniers dans la base MySQL (si ce n'a pas déjà été fait) // Recherche si une entrée existe déjà dans la table $select = "SELECT `colonne1` FROM `$tablename` WHERE `colonne1` = '1';"; $cmd_select = mysql_query($select) or die ("<br>Erreur de séléction dans la table $tablename"); // Si ce n'est pas le cas : if (mysql_num_rows($cmd_select) == 0) { // Génération des nombres premiers et insertion dans la base MySQL $max = 97; for($i = 2; $i <= $max; $i++) { $j = 2; // calcul de la racine de $i $k = sqrt($i); while(($i%$j) && $j < $k) { $j++; } if($j > $k) { // Insertion dans la table $requete = "INSERT INTO `$tablename` (colonne2) VALUES (". $i .");"; $execution = mysql_query($requete) or die ("<br>Erreur d'insertion MySQL."); // Si l'insertion dans la table a échouée, affichage du code d'erreur ainsi que de sa description if(!$execution) { echo("<p>Erreur lors de l'insertion : Erreur numéro ". mysql_errno() ." <br>\nDescription de l'erreur : ". mysql_error() ."</p>\n"); } } } }
S'il ne trouve pas l'id 1 dans la table, ca veut dire qu'elle est vide et donc, l'insertion se fait.
J'ai tout fini enfin! :lol: Un très grand merci pour tout.

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 16:46

Dernier truc (lol) mais ce n'est pas obligé, juste pour le fun :

Code : Tout sélectionner

<? function suppression_table() { $cmd_suppr_table="DROP TABLE `nombres_premiers`;"; $suppr_table=mysql_query($cmd_suppr_table); } ?> <a href="#" OnClick="<? suppression_table(); ?>">Supprimer la table <? echo $tablename; ?></a>
Pourquoi la fonction est exécutée toute seule (au chargement de la page) alors que je ne demande à l'exécuter que lors du clic sur le lien? Jamais compris pourquoi en php "$suppr_table=mysql_query($cmd_suppr_table);" par exemple, s'exécutait tout seul sans appel à echo $suppr_table... En Bash par ex. (programmation système sur Linux), si tu l'appelles pas, pas d'exécution. Comment faire le même en PHP?

Merci. :lol:

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 17:14

T'es plus là Cyrano? :oops: :oops:

Mammouth du PHP | 19672 Messages

01 mai 2005, 17:22

lol,
tu essayes d'appeler une fonction PHP avec un évènement en JavaScript : la fonction est appelée au moment de générer le contenu de l'attribut onclick , c'est sûr que ta table va être droppée
Il faut procéder autrement:
<?php
function suppression_table()
{
    $cmd_suppr_table="DROP TABLE `nombres_premiers`;";
    $suppr_table=mysql_query($cmd_suppr_table);
}
if(isset($_POST['supprimer']))
{
    if(suppression_table())
    {
        echo("<p>La table a été supprimée correctement</p>\n");
    }
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']): ?>" method="post" >
<input type="submit" name="supprimer" id="supprimer" value="Supprimer la table" />
</form>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 17:37

Oups ouais lol merci beaucoup. Par contre le :

Code : Tout sélectionner

if(suppression_table()) { echo("<p>La table a été supprimée correctement</p>\n"); }
n'a pas l'air de marcher mais c'est un détail bien sûr.

ViPHP
fab
ViPHP | 2657 Messages

01 mai 2005, 17:42

essaye
$suppression = suppression_table();
if($suppression) {
  echo "Supresssion : ok";
}
else {
  echo "Pas de supression de la table";
}

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 17:50

Apparemment vos deux codes marchent mais il suffirait d'inverser les messages pcq quand il affiche "pas effacé" il le fait lol.

Mammouth du PHP | 19672 Messages

01 mai 2005, 17:56

Ok, soyons tatillons et faisons ça dans les règles de l'art:
<?php
function suppression_table()
{
    $retour = false;
    $cmd_suppr_table="DROP TABLE `nombres_premiers`;";
    $suppr_table=mysql_query($cmd_suppr_table);
    if($suppr_table)
    {
        $retour = true;
    }
    return $retour
}
if(isset($_POST['supprimer']))
{
    $suppression = suppression_table();
    if($suppression == true)
    {
        echo("<p>La table a été supprimée correctement</p>\n");
    }
    else
    {
        echo("<p><span style=\"color: #ff0000; font-weight: bold\">Erreur d'exécution</span> : La table n'a pas été supprimée correctement</p>\n");
    }
}
?>
<form action="<?php echo($_SERVER['PHP_SELF']): ?>" method="post" >
<input type="submit" name="supprimer" id="supprimer" value="Supprimer la table" />
</form>
Tu ne devrais rien avoir à inverser...

[Edit] j'avais oublié un "=" :oops:
Modifié en dernier par Cyrano le 01 mai 2005, 18:03, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
fab
ViPHP | 2657 Messages

01 mai 2005, 18:00

Hum je ne comprends pas pourquoi car en temps normal mysql_query doit renvoyer TRUE si l'éxécution s'est bien passée et sinon FALSE