Erreur sur un insert

Mammouth du PHP | 643 Messages

10 août 2015, 19:06

Salut à tous.
Je dois buger tout autant que mon script je ne vois pas mon erreur
Le but du script est de rajouter une colone url en fonction du titre.
J'ai donc créer une colonne "url" et je cherche maintenant à y associer l'url en fonction du titre...
Si vous pouvez m'éclairer ...
Merci

Je me retrouve avec un message du genre:
Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\site\test.php on line 38
<?php
    
            include("connect.php");
            
            //Selection des l'annonce
            $sql = "SELECT * FROM table";
            $req = $bdd->query($sql);
				
            // On parcourt toutes les entrées
            while($ligne = $req->fetch(PDO::FETCH_ASSOC))// On affiche chaque entrée une à une

            {
				
			//construction de l'url en fonction du titre
			$recherche_pour_url = $ligne['titre'];
			$remplacement_url = str_replace ( ' ', '-', $recherche_pour_url);
			
			//Affichage des données	
            echo '<strong>Titre: </strong>' .$ligne['titre']. '<br>';
			echo '<strong>Url: </strong>' .$remplacement_url. '<br><br><hr>';
			
			
			
		$req = $bdd->prepare('INSERT INTO table(url) VALUES(:url)');
    	$req->execute(array(
     	 'url' => $remplacement_url
     	 ));
    
    	echo 'Le jeu a bien été ajouté !';
			
            }

			
    ?>
Ca marche ca insérer en fonction de la drniere entré que j'ai en bdd et ca en créer une nouvelle au lien d'insérer ds l'entrée en question ... :/

Mammouth du PHP | 643 Messages

10 août 2015, 21:06

J'ai essayer avec UPDATE du coup
c'est mieux mais ça m'insere toujours la meme chose:
<?php
    
            include("connect.php");
            include("include/variables.php");
            
            //Selection des l'annonce
            $sql = "SELECT * FROM table";
            $req = $bdd->query($sql);
				
            // On parcourt toutes les entrées
            while($ligne = $req->fetch(PDO::FETCH_ASSOC))// On affiche chaque entrée une à une

            {
				
			//construction de l'url en fonction du titre
			$recherche_pour_url = $ligne['titre'];
			$remplacement_url = str_replace ( ' ', '-', $recherche_pour_url);
			
			//Affichage des données	
            echo '<strong>Titre: </strong>' .$ligne['titre']. '<br>';
			echo '<strong>Url: </strong>' .$remplacement_url. '<br><br><hr>';
					
			// Insertion des données
			$req = $bdd->prepare('UPDATE table SET url =:url');
			$req->execute(array(
			'url' =>$remplacement_url
			 ));
		
			echo 'Le jeu a bien été ajouté !';
			

            }
	
    ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 août 2015, 22:54

salut

il faut que tu utilises la clause SQL where.
vue que tu sembles vouloir travailler sur toute la table le plus simple étant une requête SQL simple :
pour mysql, oracle ou postgresql
update latable set url = replace(titre,' ','-');

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 643 Messages

10 août 2015, 23:07

Meme avec un where ca ne change pas grand chose ....
J'ai le message suivant:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'de la petite enfance' at line 1 in C:\wamp\www\lasortie\test.php on line 35

Ce qui correspond à la derniere ligne de :
$req = $bdd->prepare("UPDATE table SET url =:url WHERE titre =".$ligne['titre']);
      $req->execute(array(
      'url' =>$remplacement_url
       )); // ligne 35
<?php
    
            include("connect.php");

            
            //Selection des l'annonce
            $sql = "SELECT * FROM table";
            $req = $bdd->query($sql);
				
            // On parcourt toutes les entrées
            while($ligne = $req->fetch(PDO::FETCH_ASSOC))// On affiche chaque entrée une à une

            {
				
			//construction de l'url en fonction du titre
			$recherche_pour_url = $ligne['titre'];
			$remplacement_url = str_replace ( ' ', '-', $recherche_pour_url);
			
			//Affichage des données	
            echo '<strong>Titre: </strong>' .$ligne['titre']. '<br>';
			echo '<strong>Url: </strong>' .$remplacement_url. '<br><br><hr>';

			// Insertion des données
      $req = $bdd->prepare("UPDATE table SET url =:url WHERE titre =".$ligne['titre']);
      $req->execute(array(
      'url' =>$remplacement_url
       ));
    
      echo 'Le jeu a bien été ajouté !';
			
			
			}


    ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 août 2015, 23:18

je te conseil de lire l'intégralité du cours sur SQL que j'ai indiqué dans mon premier message.
SQL est un langage avec une synataxe précise. Cette syntaxe n'est pas respecté dans le code que tu indique et php le retourne (c'est une erreur levée par mysql).


@+
Il en faut peu pour être heureux ......