Bonjour,
J'ai un petit souci! Je suis débutant et j'apprend PHP/MySQL depuis 2 jours en regardant le plus de tutoriels possible.
mais ce problème, je vois pas comment faire. J'arrive a faire appraitre l'information de la table client en test via echo mais quand je clique inscription ca me dit user_id cannot be null
J'ai deux table - une clients et l'autre annnonces
client annonces id annonce_id prenom annonce_titre nom annonce_description email user_id passwordDans ma page ajouter annonce, je veux ajouter le (id) du client dans le (user_id) de la table annonce quand il fait son inscription
j'y arrive pas :(
Voici le code (dsl pour le code Dreamweaver)
<?php require_once('Connections/ma_db.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$editFormAction = $_SERVER'PHP_SELF'];
if (isset($_SERVER'QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER'QUERY_STRING']);
}
if ((isset($_POST"MM_insert"])) && ($_POST"MM_insert"] == "annonce")) {
$insertSQL = sprintf("INSERT INTO annonces (annonce_id, user_id, annonce_titre, annonce_description) VALUES (%s, %s, %s, %s)",
GetSQLValueString($_POST'annonce_id'], "int"),
GetSQLValueString($_POST'user_id'], "int"),
GetSQLValueString($_POST'annonce_titre'], "text"),
GetSQLValueString($_POST'annonce_description'], "text"));
mysql_select_db($database_ma_db, $ma_db);
$Result1 = mysql_query($insertSQL, $ma_db) or die(mysql_error());
$insertGoTo = "ok";
if (isset($_SERVER'QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER'QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
mysql_select_db($database_ma_db, $ma_db);
$query_rsClient = "SELECT clients.id, clients.prenom, clients.nom, clients.email FROM clients";
$rsClient = mysql_query($query_rsClient, $ma_db) or die(mysql_error());
$row_rsClient = mysql_fetch_assoc($rsClient);
$totalRows_rsClient = mysql_num_rows($rsClient);
mysql_select_db($database_ma_db, $ma_db);
$query_rsannonce = "SELECT * FROM annonces";
$rsannonce = mysql_query($query_rsannonce, $ma_db) or die(mysql_error());
$row_rsannonce = mysql_fetch_assoc($rsannonce);
$totalRows_rsannonce = mysql_num_rows($rsannonce);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ajouter annonce</title>
</head>
<body>
test echo le id: <?php echo $row_rsClient'id']; ?> le prenom <?php echo $row_rsClient'prenom']; ?> nom de famille <?php echo $row_rsClient'nom']; ?> email <?php echo $row_rsClient'email']; ?>
<form id="annonce" name="annonce" method="POST" action="<?php echo $editFormAction; ?>">
<table width="653" cellspacing="0" cellpadding="0">
<tr>
<td width="183">Titre</td>
<td width="692"><input type="text" name="annonce_titre" id="titre" /></td>
</tr>
<tr>
<td>Description</td>
<td><textarea name="annonce_description" id="annonce_description" cols="45" rows="5"></textarea></td>
</tr>
<tr>
<td><input name="user_id" type="hidden" /><input type="hidden" name="id" /><input type="hidden" name="annonce_id" /></td>
<td><input type="submit" name="submit" id="submit" value="Inscription" /></td>
</tr>
</table>
<input type="hidden" name="MM_insert" value="annonce" />
</form>
</body>
</html>
<?php
mysql_free_result($rsClient);
mysql_free_result($rsannonce);
?>
Yop,
Utilises les balises code, ca sera plus clair pour t'aider.
Et j'ai pas compris le schema de tes tables, quels champs appartient à quelle table?
Si tu veux récupérer le dernier id inséré en bdd, penses alors à la fonction mysql_insert_id();
J'ai pas compris le problème, donc c'est ptete pas du tout ça ^^
lol oui tu as raison, dsl je prend Dreamweaver qui me place ce code. Je suis trop débutant pour coder moi-même mais ca va venir a force de regarder les tutoriels
J'essais un JOIN SELECT * FROM clients JOIN annonces ORDER BY annonce_id et je reussi a voir mes deux table sans probleme.
Mais c'est comment inserer le ID de ma table (client) dans la colonne user_id de ma table (annonce)????
Les deux table sont : clients et annonces
faut j'arrive a inserer le id du client au champ user_id de la table annonce.
Tu fais alors ce que j'ai dit ;)
En gros ça donne :
mysql_query('INSERT INTO client(`prenom`,`nom`,`email`,`password`) VALUES(blablabla,blablabla,blablabla,blablabla)';
$id_client = mysql_insert_id();
mysql_query('INSERT INTO annonce(`annonce_id`, `user_id`, `annonce_titre`, `annonce_description`) VALUES (blablabla,'.$id_client.', blablabla, blablabla, blablabla)');
Inutile de faire des jointures ;)
Je sais même pas si c'est possible d'ailleurs ^^
Ah et au fait, faut que le champs id de la table client soit en index primaire il me semble ^^, mais bon ca devrait l'être comme tous les id ^^
Aaaaaaa super, je comprend maintenant grâce a ton bout de code. C'est claire.. J'essais cela..
Merci tu est bien gentil :) Bonne journée!
aaaaaah j'en ai mal à la tête! Pas moyen de faire passer mon id dans mon user_id de ma table annonce :(
mais juste une question comme ca
Dans ma page annonce.php, je me suis fait une session pour retracer le id .
Je reussi a le retracer en fesant des echo...
Je poste rien dans ma table client, alors, j'ai pas vraiment besoin de faire un isert sur ma table client? Un query SELECT * FROM client c'est bon quand même?
j'ai esseyé:
$id_client = mysql_insert_id();
mysql_query('INSERT INTO annonce(annonce\_id
, user\_id
, annonce\_titre
, annonce\_description
) VALUES (annonce_id,'.$id_client.', annonce_titre, annonce_description)');
Je suis perdu...
Le mysql_insert_id() doit se mettre juste après une requête de type insert into dans une table comprenant un champ primaire.
Elle récupère ainsi le dernier id enregistré dans la table, ce qui est pratique pour faire la liaison.
Si tu n'as rien à insérer dans ta table client (rien de rien de rien? même pas l'id lui même?), alors tu fais un select selon tes besoins, et t'oublies le mysql_insert_id()
Mais tu pourrais être plus explicite sur ce que tu veux faire, car c'est très illogique.
J'pensais que tu voulais ajouter une annonce, et donc un client au passage. Le client serait relier à l'annonce. C'est ça non?
L'astuce que je t'ai filé s'utilise fréquemment lors de la création de topic, car en faite un topic, c'est un topic + un post, donc forcement faut faire la liaison.
En espérant t'avoir éclairé ^^
Rapidement le projet c'est un système de petite annonce. La personne s'enregistre, se log et arrive dans une section membre ou il peut modifier ses informations, changer son mot de passe, etc.
Aucun problème de ce coter! Il y a aussi une page ou il pourra ajouter une petite annonce. C'est là mon problème!
Dans ma table membre, j'ai : id, prenom, nom, adresse, etc., etc.
Dans ma table annonce j'ai : annonce_id, titre, description, photo, prix, membre_id
Dans ma page ajouter_annonce.php je dois aller chercher le id de la table membre et l'insérer le id unique du client la zone membre_id de ma table annonce.
J'ai fait une session MM_Username ou je peux faire afficher certaines informations sur lui comme son nom, son téléphone, via un echo <?php echo $row_rsMembre'prenom']; ?>
les informations s'affichent et ca va bien... j'ai aussi fait un query SELECT * FROM membres WHERE blabla
Le probleme viens de mon INSERT je crois. j'ai un formulaire bien simple et j'ai mis une zone hiden pour annonce_id
J'ai passé 4 heures hier à chercher Google, il n’y a presque pas d'information disponible ou je suis aveugle :(
J'ai suivi le tutorial Workbench qui est très bon en passant :)
CREATE TABLE IF NOT EXISTS vision\_db
.membres
(
id
INT NOT NULL AUTO_INCREMENT ,
level
ENUM('particulier','concessionnaires','vip') NOT NULL ,
prenom
VARCHAR(25) NOT NULL ,
nom
VARCHAR(25) NOT NULL ,
adresse
VARCHAR(45) NULL ,
ville
VARCHAR(25) NULL ,
province
VARCHAR(25) NULL DEFAULT 'Québec' ,
code\_postale
VARCHAR(10) NULL ,
telephone
VARCHAR(15) NULL ,
cell
VARCHAR(15) NULL ,
email
VARCHAR(45) NOT NULL ,
password
VARCHAR(40) NOT NULL ,
site\_web
VARCHAR(25) NULL ,
derniere\_connexion
DATETIME NULL ,
date\_inscription
DATETIME NULL ,
activation
ENUM('0','1') NULL DEFAULT 0 ,
PRIMARY KEY (id
) )
ENGINE = InnoDB;
CREATE UNIQUE INDEX email\_UNIQUE
ON vision\_db
.membres
(email
ASC) ;
CREATE TABLE IF NOT EXISTS vision\_db
.annonces
(
id
INT NOT NULL AUTO_INCREMENT ,
titre
VARCHAR(20) NULL ,
description
LONGTEXT NULL ,
membres\_id
INT NOT NULL ,
prix
VARCHAR(45) NULL ,
PRIMARY KEY (id
) ,
CONSTRAINT membred\_id
FOREIGN KEY (membres\_id
)
REFERENCES vision\_db
.membres
(id
)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB;
CREATE INDEX membred\_id
ON vision\_db
.annonces
(membres\_id
ASC) ;
Le plus simple est de stocker les information des membres dans un tableau comme ceci:
$sql = mysql_query('SELECT * FROM membres WHERE pseudo="'.Membre'prenom'].'"');
$membre = mysql_fetch_assoc($sql);
Puis plus tard dans le code, pour inserer tu fais ainsi :
INSERT INTO annonce(`annonce_id`, `user_id`, `annonce_titre`, `annonce_description`) VALUES (blablabla,'.$membre'id'].', blablabla, blablabla, blablabla)
Bon, j'avance un peu mais je réussi pas à insirer le membre_id
J'ai fait comme tu m'a dit:
ce bout fonctionne sans soucis. Je réussi à faire afficher les info par des echos alors je sais que ca fonctionne.
<?php
mysql_select_db($database_connexion, $connexion);
$query_rsMembre = sprintf("SELECT * FROM membre WHERE username='".$_SESSION'MM_Username']."'")or die(mysql_error());
$rsMembre = mysql_query($query_rsMembre, $connexion) or die(mysql_error());
$row_rsMembre = mysql_fetch_assoc($rsMembre);
$totalRows_rsMembre = mysql_num_rows($rsMembre);
?>
C'est ici que j'ai des problème, j'ai esseyé
if ((isset($_POST"MM_insert"])) && ($_POST"MM_insert"] == "form2")) {
$insertSQL = sprintf("INSERT INTO annonce (titre, description
, prix, membre_id) VALUES (%s, %s, %s, %s)",
GetSQLValueString($_POST'titre'], "text"),
GetSQLValueString($_POST'description'], "text"),
GetSQLValueString($_POST'prix'], "text"),
GetSQLValueString($_POST'membre_id'], "int"));
mysql_select_db($database_connexion, $connexion);
$Result1 = mysql_query($insertSQL, $connexion) or die(mysql_error());
$insertGoTo = "ok.php";
if (isset($_SERVER'QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER'QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
?>
Je pense c'est les %s de Dreamweaver qui me bloque, j'ai esseyé d'ajouter '.$membre_id'id'].' qui me donne un erreur
et si j'efface les GetSQLValueString plus rien fontionne.
J'ai toujours le message membre_id can't not be null
Je n'ai pas besoin d'ajouter un hidden dans ma form vu que je fait un session username?