Problème MySql

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 : Problème MySql

par PsykotropyK » 10 avr. 2006, 12:13

Ouais c'est ce que j'ai fait finallement, mais je mettais partout au début pour comprendre comment il marchait puis j'en virais, je regardais la ou c'était necessaire etc... De la bonne vieille méthode empirique quoi... ^^

par Ryle » 10 avr. 2006, 11:12

Sans forcément le mettre partout, ça doit marcher si tu le spécifies la base juste après la connexion :
$connexion = mysql_connect('localhost', 'mysql_user', 'mysql_password');
$db_selected = mysql_select_db('maBase', $connexion);
Chaque appel ensuite à mysql_query() se fera sur cette base de données :)

par PsykotropyK » 10 avr. 2006, 10:50

A priori c'était bien a cause de
$choixbase = mysql_select_db($base, $connexion);
donc bon c'est peut être un peu lourd comment j'ai fait, mais j'en ai mit un avant chaque requete comme ca....

par Invité » 10 avr. 2006, 10:10

remarque c'est tres con car ca vient forcément de la, vu que je ne lui dit pas dans quel base de donnée il doit chercher...

Bon en général il trouve tout seul, mais des fois il doit me faire une petite crise de nerf et voila tout...

par Ryle » 10 avr. 2006, 10:07

Je ne vois pas trop ce qui peut clocher... Ajoute des die() en cas d'erreur sur la connexion et l'exécution de la requête, réaffiche éventuellement la requête.. essaye eventuellement un connect à la place du pconnect.

Pour le rafraichissement/actualisation, en php tu ne peux faire que le header, ce qui ne sera probablement pas d'une grande utilité, ensuite c'est côté javascript qu'il faut regarder (document.location.reload de mémoire) ou avec le meta http-refresh, mais l'idéal reste quand meme de trouver ce qui plante ;)

par PsykotropyK » 10 avr. 2006, 10:07

J'ai (re) étudié le code source d'ou j'avais tiré mes infos pour faire mon script, et je voulais savoir si mon erreur ne viendrait pas de la:

Dans le code d'origine, la première requete envoyé à la table avait un code dans ce genre :
if($connexion != false)
{
    $choixbase = mysql_select_db($base, $connexion);
    $sql1 = "SELECT *".
    " FROM `model`";
    $rech_model = mysql_query($sql1);
    $code_model = array();
.....................
Puis ensuite un code comme ca
$sql2 = "SELECT *".
" FROM `finition`".
" WHERE `Code_Mod` = ". $modnum ."";
if($connexion != false)
{
	$rech_finition = mysql_query($sql2, $connexion);
.....................
toujours intégrer à la premier boucle if($connexion != false)

En gros la différence avac mon code c'est que j n'ai pas de $choix_base = mysql_select_db(...) et que tout n'est pas inclus dans cette première boucle if($connexion != false)

Si quelqu'un pense que ca peut venir de la merci de me faire signe (dsl j'ai pas spécialement envie de teste j'ai trop de modif a faire, si ca doit être inutile ....)

par PsykotropyK » 10 avr. 2006, 02:17

J'entends par la un vrai rafraichissement pas juste une redirection vers la meme page si erreur (ca pourrait marcher pour certaines pages mais pas pour d'autre, me faut vraiment ce qui se rapproche le plus du rafraichissement)

par PsykotropyK » 10 avr. 2006, 02:07

Au fait, je pensais comme ca (sisi je penses je vous jures ^^)

Viola comment est mon script désormais :
if($rech_cli) {
  while($ligne_cli = mysql_fetch_assoc($rech_cli)) {
    ...
  }
  mysql_free_result($rech_cli);
}else{
  include("erreur.php");
}
Donc il m'affiche un joli message invitant mon utilisateur a rafraichir sa page internet... Mais n'y aurait-il pas une commande pour la raffraichir automatiquement...???

par Invité » 09 avr. 2006, 21:40

Bon la solution fournit par Ryle marche, maintenant la grande question, c'est pourquoi des fois il attribue quelquechose pour $rech_client et pourquoi des fois non...

Vu que bon ça a l'air totalement aléatoire...

par rmed19 » 09 avr. 2006, 18:09

puisque tu veus envoie ta requette à la base essaie d'utiliser cet function
$result = mysql_query($query);

$query est la requette à envoier

par Ryle » 08 avr. 2006, 22:24

Pour ta 2ème erreur (mysql_free_result()), c'est parceque tu fais celui-ci en dehors du if dans lequel la requête est exécuté.. du coup s'il ne rentre pas dans le if(), il va essayer de liberer la ressource alors qu'elle n'est pas utilisée, et donc générer une erreur.

Un test que tu peux faire est de vérifier s'il y a un resultat avant le while :
if($rech_cli) {
  while($ligne_cli = mysql_fetch_assoc($rech_cli)) {
    ...
  }
  mysql_free_result($rech_cli);
}
tu peux aussi ajouter un or die(mysql_error()) lors de l'execution voir s'il n'y a pas d'erreur :)

par PsykotropyK » 08 avr. 2006, 18:31

non ca a rien a voir, la tu ne fais que changer la facon de trier, et si ca devait venir de la ca planterais a chaque fois, hors des fois ca plante, mais bon des fois non (en général non)...

En fait les ligne qui plante c'est au niveau de mysql_fetch_assoc et de mysql_free_result. Donc j'aimerais comprendre pourquoi...

Enfin je vais quand meme rajouter ASC ca fera toujours ca de plus 'léché' dans mon code lol...

par coxine » 08 avr. 2006, 17:34

Bonjour as tu essayé de changer la requête SQL ?
$sql = "SELECT *". 
" FROM client". 
" ORDER BY Code_Cli"; 
par
$sql = "SELECT * FROM client ORDER BY Code_Cli ASC"; 

par PsykotropyK » 08 avr. 2006, 17:15

A non ca regle pas le problème

par PsykotropyK » 08 avr. 2006, 17:10

Bon peut-être ca simplifie le code mais en tout cas ca règle pas le problème... D'ailleurs, voila pour un autre bout de code qui chie (et avec les changement ed guillement) :
<form id="form1" name="form1" method="post" action="">
<?php
$connexion = mysql_pconnect($serveur, $admin, $mdp);
$sql = "SELECT *".
" FROM client".
" ORDER BY Code_Cli";
if($connexion != false)
{
	$rech_cli = mysql_query($sql, $connexion);
	$nd = 0;
	$code = array();
	$nom = array();
	$adr = array();
	while($ligne_cli = mysql_fetch_assoc($rech_cli))
	{
		array_push($nom, $ligne_cli['Nom_Cli']);
		array_push($adr, $ligne_cli['Adr_Cli']);
		array_push($code, $ligne_cli['Code_Cli']);
		$nd++;
	}
	if ($nd >= 5){
		$nd=5;
	}
	?>
	<select name="model" id="model" onchange="document.forms['chgfinition'].submit();">
    <option value="-1">- - - Choisissez un client - - -</option>	
	<?php
	for($d = 0; $d<$nd; $d++)
	{
		?>
		<option value="<?php echo($code[$d]); ?>"<?php echo((isset($client) && $client == $code[$d])?" selected=\"selected\"":null); ?>><?php echo($nom[$d]); ?> - <?php echo($adr[$d]); ?></option>
		<?php
	}
	?>
	</select>
	<?php
}
mysql_free_result($rech_cli);

?>
  <p><br />
    <input name="menu" type="hidden" id="menu" value="6" />
    <input name="ssmenu6" type="hidden" id="ssmenu6" value="1" />
  </p>
</form>
Et comme d'hab, en faisant quelques rafraichissement, ou en recliquant sur le bouton et bien tout marche comme il faut... voila le message d'erreur, qui est le même que d'habitude mais bon...
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in d:\apps\easyphp1-8\www\audi - phase 2\Proposition\Client.php on line 14

Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource in d:\apps\easyphp1-8\www\audi - phase 2\Proposition\Client.php on line 38
Sinon, il semble qu'en mettant un $rech_cli = NULL; au début, cela règle le problème mais bon vu que ca marchait quand même un pêu avant je préfere pas m'avancer...