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

Mammouth du PHP | 19672 Messages

01 mai 2005, 20:11

Cette fonction retourne TRUE en cas de succès, FALSE en cas d'échec.
Teste le retour: si c'est FALSE, la base à priori n'existe pas donc tu fais avorter la procédure de DROP DATABASE
et si c'est TRUE, tu continues.
Même chose pour les tables
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, 20:33

Code : Tout sélectionner

$dbselect= mysql_select_db("$dbname", $dbconnect); if($dbselect == FALSE) { dbselect_succeeded = "not"; } if($dbselect_succeeded != "not") { $cmd_suppr_table="DROP TABLE IF EXISTS `". $tablename ."`;"; $suppr_table=mysql_query($cmd_suppr_table); } else { echo "test table"; }
ne marche pas (Parse error). :oops: :( Comment faire?

Mammouth du PHP | 19672 Messages

01 mai 2005, 20:43

Regarde la troisième ligne : ça, c'est une faute d'étourderie :

-
-
-
-
-
-
Allons, regarde mieux

-
-
-
-
-
-
dbselect_succeeded


-
-
-
-

toujours pas ???

-
-
-
-
-
-
et comme ça ?
$dbselect_succeeded : avec le "$" ?
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, 20:48

Nan c'est pcq je suis habitué au Bash à mort lol. En bash la déclaration d'une variable ne se fait pas avec un "$" devant, juste l'appel avec echo.
Et le ";" après les commandes sont inutiles sauf s'ils sont alignées. Ca m'est arrivé plusieurs fois mais souvent je m'en suis rendu compte mais là nop. :lol: Par contre, j'ai plus d'erreur mais ça ne marche pas mieux... :cry:
Il va encore me créer la base quand je fais "supprimer la table" lorsqu'il n'y a plus de base.

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 20:54

PS: As-tu, à titre d'info, une réponse au fait que PHP exécute directement ses variables contrairement à Bash (par ex. je sais c'est un language non-web mais bon)?

Exemple: $var=mysql_query($var2)
Il ne faudra pas faire echo $var; pour qu'elle soit exécuté.

Une explication? Comment faire si on voudrait par exemple qu'elle ne soit pas automatiquement exécuté?

Mammouth du PHP | 19672 Messages

01 mai 2005, 20:55

On est drôlement embarqués dis donc : Allez, on simplifie et tu testes ça :
<?php
$dbselect= mysql_select_db("$dbname", $dbconnect);
if($dbselect)
{
    $cmd_suppr_table="DROP TABLE IF EXISTS `". $tablename ."`;";
    $suppr_table=mysql_query($cmd_suppr_table);
    $affiche_resultat = "La table ". $tablename ." a été supprimée correctement.";
}
else
{
    $affiche_resultat = "La table ". $tablename ." n'existe pas et ne peut être supprimée.";
}
echo "<p>". $affiche_resultat ."</p>\n";
?>
Tu me diras ce que tu obtiens.
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, 21:34

Ca ne va pas pcq le test vaut toujours vrai car la séléction de la base se fait en haut du code et la fonction (appellé quand on appuye sur un bouton) est en bas. Donc il faut revérifier dans la fonction (donc lors de l'appui) que la connexion a pu se faire à ce moment-là et si oui, on supprime la table. J'y suis presque :

Code : Tout sélectionner

function suppression_table($tablename) { $retour = false; $db_select = mysql_select_db("$dbname", $dbconnect); if($db_select) { $cmd_suppr_table = "DROP TABLE IF EXISTS `". $tablename ."`;"; $suppr_table = mysql_query($cmd_suppr_table); } else { echo "Base non-existante"; } if($suppr_table) { $retour = true; } return $retour; }
Résultat lorsqu'il n'y a plus de base et que j'appuyes sur le bouton supprimer la table :

Code : Tout sélectionner

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in fichier.php on line 187 Base non-existante Erreur d'exécution : La table n'a pu être supprimée correctement. (<-- Message si la fonction a retourné false)
Ligne 187 :

Code : Tout sélectionner

$db_select = mysql_select_db("$dbname", $dbconnect);
Mici vraiment de ton aide. :lol:

Mammouth du PHP | 19672 Messages

01 mai 2005, 21:36

De rien, je crois que tu seras prêt pour demain ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 21:42

Donc il m'affiche bien les deux messages d'erreur.

1er msg d'erreur:

Si séléction de la base impossible, echo "Base inexistante" [OK]
Sauf que en plus il faudrait cacher le msg d'erreur de mysql_connect_db qui n'a pas su se connecter (avec un @ devant c'est bien ça?)

2ème msg d'erreur:

Si la fonction retourne false, echo "Erreur d'exécution : La table n'a pu être supprimée correctement."

En fait maintenant tout va bien on dirait (je vérifie) sauf que il recréée la base juste après (car il recharge la page et à chaque chargement il crée la base si elle n'existe pas...).

Mammouth du PHP | 19672 Messages

01 mai 2005, 21:48

Évite de mettre des "@" pour masquer des messages d'erreur : corrige les erreurs à la place, c'est plus professionnel et ça évite les surprises ultérieures. Si tu ne veux pas de message, laisse juste un "or die" et rien de plus.

Pour la création automatique, ben vois comment organiser ton script si tu ne veux pas qu'elle se recrée toute seule à chaque coup.
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, 21:58

Arf chui à deux doigts d'y arriver.
Dis, quand on déclare une variable en bas de page et qu'on rafraichit la page, l'appel à la variable en début de page marche encore? Pcq'on dirait pas.

En gros, en bas de page lorsqu'on appuye sur le bouton "suppr la table", il tente de se connecter à la base, si erreur -> $var=db_inexistante

Et en début de page je crée auto la base SAUF si $var=db_inexistante (déclaré en bas de page). Le pb c'est qu'entre, il y a un rafraichissement lors de l'appui sur le bouton... On dirait qu'il perd la valeur de $var à cause de ca. Comment faire? (Une fois ça réussi, je mange et dodoooo lol :lol:)

cyberappz
Invité n'ayant pas de compte PHPfrance

01 mai 2005, 22:20

Pas d'idée? :oops:
Si je trouves pas ça, je dois supprimer toute la partie qui m'a pris du temps sur le bouton "supprimer la table" et ne laisser que "supprimer la base". :oops:

Mammouth du PHP | 19672 Messages

01 mai 2005, 22:49

Transmission des variables : quand tu déclares une variable dans un script, cette variable a une durée de vie égale à celle de la page, le temps qu'elle est affichée. Donc en rechargeant la page, tu perds cette variable.

C'est pour ça que pour supprimer, on utilise un formulaire pour transmettre une variable via une variable Super-Globale $_POST.

Si tu veux garder une variable tout au long de ta navigation sans utiliser de formulaire pour ça, tu dois alors utiliser une autre super-globale : $_SESSION.

Dans ce cas, tu dois commencer ton script avant tout autre chose par session_start(); rien avant, surtout pas de HTML ni même d'espace. Cette ligne doit être présente sur toutes les pages.

À partir de là, tu initialises des variables de session, par exemple, $_SESSION['table'] = "nom_de_la_table";

En rechargeant ta page, la session se poursuit grâce au session_start(); . tu peux donc récupérer le contenu de ta variable de session contenu dans $_SESSION['table']

Voilà, c'est succinct, j'espère que c'est assez clair quand même :)
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, 22:57

Merci mais j'ai comme erreur:

Fatal error: Call to undefined function: session_start()

Code:

Code : Tout sélectionner

<? session_start(); ?> <html> ...
session_start n'est pas une fonction interne qu'il ne la connait pas :?:

Mammouth du PHP | 19672 Messages

01 mai 2005, 23:05

non, regarde dans le manuel , c'est une fontion PHP, mais si ça te génère une erreur, je comprends pas....?
C'est pas normal du tout
Jute au cas où, (en principe ça n'a pas de rapport) n'utilises pas les "short open tags" <?, mais la formule entière <?php :
<?php
session_start();
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: